From 693e1340ed3d0a20c6c5db1a6b356bb108ba022c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marta=20Marczykowska-G=C3=B3recka?= Date: Sat, 29 Jul 2017 12:49:02 +0200 Subject: [PATCH] 'rename VM' button in VM Settings rename VM button in VM settings: it asks for a new name, and then clones VM under the new name and deletes old one. Renaming VM closes VM settings window without saving any other changes. Changed max size of VM name field to 32 characters. --- qubesmanager/settings.py | 34 +++++++ ui/settingsdlg.ui | 214 ++++++++++++++++++++------------------- 2 files changed, 146 insertions(+), 102 deletions(-) diff --git a/qubesmanager/settings.py b/qubesmanager/settings.py index 7330ba2..c7b137b 100755 --- a/qubesmanager/settings.py +++ b/qubesmanager/settings.py @@ -83,6 +83,7 @@ class VMSettingsWindow(Ui_SettingsDialog, QDialog): ###### basic tab self.__init_basic_tab__() + self.rename_vm_button.clicked.connect(self.rename_vm) ###### advanced tab self.__init_advanced_tab__() @@ -232,6 +233,7 @@ class VMSettingsWindow(Ui_SettingsDialog, QDialog): self.vmname.setText(self.vm.name) self.vmname.setValidator(QRegExpValidator(QRegExp("[a-zA-Z0-9-]*", Qt.CaseInsensitive), None)) self.vmname.setEnabled(False) + self.rename_vm_button.setEnabled(not self.vm.is_running()) if self.vm.qid == 0: self.vmlabel.setVisible(False) @@ -397,7 +399,39 @@ class VMSettingsWindow(Ui_SettingsDialog, QDialog): "allowed value.")) self.init_mem.setValue(self.max_mem_size.value() / 10) + def _rename_vm(self, t_monitor, name): + try: + self.vm.app.clone_vm(self.vm, name) + del self.vm.app.domains[self.vm.name] + except Exception as ex: + t_monitor.set_error_msg(str(ex)) + + t_monitor.set_finished() + + + def rename_vm(self): + + new_vm_name, ok = QInputDialog.getText(self, self.tr('Rename VM'), self.tr('New name: (WARNING: all other changes will be discarded)')) + + if ok: + + t_monitor = thread_monitor.ThreadMonitor() + thread = threading.Thread(target=self._rename_vm, args=(t_monitor, new_vm_name,)) + thread.daemon = True + thread.start() + + while not t_monitor.is_finished(): + self.qapp.processEvents() + time.sleep (0.1) + + if not t_monitor.success: + QMessageBox.warning(None, + self.tr("Error renaming the VM!"), + self.tr("ERROR: {}").format( + t_monitor.error_msg)) + + self.done(0) ######### advanced tab diff --git a/ui/settingsdlg.ui b/ui/settingsdlg.ui index f2a95f1..af61fef 100644 --- a/ui/settingsdlg.ui +++ b/ui/settingsdlg.ui @@ -29,7 +29,7 @@ - 4 + 0 @@ -39,107 +39,6 @@ Basic - - - - Settings - - - - - - <html><head/><body><p>Name &amp;&amp; label<span style=" color:#ff0000;">*</span>:</p></body></html> - - - vmname - - - - - - - ---- - - - - - - - <html><head/><body><p>Template<span style=" color:#ff0000;">*</span>:</p></body></html> - - - template_name - - - - - - - - - - NetVM: - - - netVM - - - - - - - - - - true - - - - - - - - - true - - - Include in backups by default - - - true - - - - - - - Run in debug mode - - - - - - - - - - - Start VM automatically on boot - - - - - - - Seamless GUI - - - - - - - - @@ -363,6 +262,117 @@ + + + + Settings + + + + + + <html><head/><body><p>Name &amp;&amp; label<span style=" color:#ff0000;">*</span>:</p></body></html> + + + vmname + + + + + + + <html><head/><body><p>Template<span style=" color:#ff0000;">*</span>:</p></body></html> + + + template_name + + + + + + + NetVM: + + + netVM + + + + + + + true + + + + + + + ---- + + + 32 + + + + + + + Rename + + + + + + + + + + + + + + + true + + + Include in backups by default + + + true + + + + + + + Run in debug mode + + + + + + + + + + + Start VM automatically on boot + + + + + + + Seamless GUI + + + + + + + +