backups: UI improvements

Prompt for retype the backup password, more thoroughly test if the user
entered all required informations, use "dom0" instead of "None" for local
backup indication.
This commit is contained in:
Marek Marczykowski-Górecki 2013-11-28 03:52:02 +01:00
父節點 ced6fc672b
當前提交 21d72cdc6c
共有 4 個文件被更改,包括 64 次插入20 次删除

查看文件

@ -6,7 +6,7 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>700</width> <width>650</width>
<height>399</height> <height>399</height>
</rect> </rect>
</property> </property>
@ -215,7 +215,10 @@
<item row="4" column="0"> <item row="4" column="0">
<widget class="QLabel" name="label_2"> <widget class="QLabel" name="label_2">
<property name="text"> <property name="text">
<string>Backup directory:</string> <string>Backup directory or VM command:</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property> </property>
</widget> </widget>
</item> </item>
@ -227,7 +230,14 @@
<property name="title"> <property name="title">
<string>Backup security</string> <string>Backup security</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout_4"> <layout class="QFormLayout" name="formLayout">
<item row="2" column="0">
<widget class="QLabel" name="label_12">
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Encryption / Verification&lt;br/&gt;passphrase:&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
</item>
<item row="0" column="0"> <item row="0" column="0">
<widget class="QLabel" name="label_10"> <widget class="QLabel" name="label_10">
<property name="text"> <property name="text">
@ -235,13 +245,6 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="2" column="0">
<widget class="QLabel" name="label_11">
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Encryption / Verification&lt;br/&gt;passphrase:&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
</item>
<item row="0" column="1"> <item row="0" column="1">
<widget class="QCheckBox" name="encryption_checkbox"> <widget class="QCheckBox" name="encryption_checkbox">
<property name="layoutDirection"> <property name="layoutDirection">
@ -255,13 +258,27 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="2" column="1" colspan="2"> <item row="5" column="0">
<widget class="QLabel" name="label_11">
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Reenter passphrase:&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLineEdit" name="passphrase_line_edit"> <widget class="QLineEdit" name="passphrase_line_edit">
<property name="echoMode"> <property name="echoMode">
<enum>QLineEdit::Password</enum> <enum>QLineEdit::Password</enum>
</property> </property>
</widget> </widget>
</item> </item>
<item row="5" column="1">
<widget class="QLineEdit" name="passphrase_line_edit_verify">
<property name="echoMode">
<enum>QLineEdit::Password</enum>
</property>
</widget>
</item>
</layout> </layout>
</widget> </widget>
</item> </item>
@ -317,7 +334,7 @@ p, li { white-space: pre-wrap; }
<widget class="QWizardPage" name="commit_page"> <widget class="QWizardPage" name="commit_page">
<layout class="QVBoxLayout" name="verticalLayout_3"> <layout class="QVBoxLayout" name="verticalLayout_3">
<item> <item>
<widget class="QLabel" name="label_8"> <widget class="QLabel" name="progress_status">
<property name="font"> <property name="font">
<font> <font>
<pointsize>9</pointsize> <pointsize>9</pointsize>

查看文件

@ -93,12 +93,24 @@ class BackupVMsWindow(Ui_Backup, QWizard):
self.shutdown_running_vms_button.clicked.connect(self.shutdown_all_running_selected) self.shutdown_running_vms_button.clicked.connect(self.shutdown_all_running_selected)
self.connect(self.dev_combobox, SIGNAL("activated(int)"), self.dev_combobox_activated) self.connect(self.dev_combobox, SIGNAL("activated(int)"), self.dev_combobox_activated)
self.connect(self, SIGNAL("backup_progress(int)"), self.progress_bar.setValue) self.connect(self, SIGNAL("backup_progress(int)"), self.progress_bar.setValue)
self.dir_line_edit.connect(self.dir_line_edit, SIGNAL("textChanged(QString)"), self.backup_location_changed)
self.select_vms_page.isComplete = self.has_selected_vms self.select_vms_page.isComplete = self.has_selected_vms
self.select_dir_page.isComplete = self.has_selected_dir self.select_dir_page.isComplete = self.has_selected_dir_and_pass
#FIXME #FIXME
#this causes to run isComplete() twice, I don't know why #this causes to run isComplete() twice, I don't know why
self.select_vms_page.connect(self.select_vms_widget, SIGNAL("selected_changed()"), SIGNAL("completeChanged()")) self.select_vms_page.connect(
self.select_vms_widget,
SIGNAL("selected_changed()"),
SIGNAL("completeChanged()"))
self.passphrase_line_edit.connect(
self.passphrase_line_edit,
SIGNAL("textChanged(QString)"),
self.backup_location_changed)
self.passphrase_line_edit_verify.connect(
self.passphrase_line_edit_verify,
SIGNAL("textChanged(QString)"),
self.backup_location_changed)
self.total_size = 0 self.total_size = 0
self.__fill_vms_list__() self.__fill_vms_list__()
@ -354,10 +366,16 @@ class BackupVMsWindow(Ui_Backup, QWizard):
def has_selected_vms(self): def has_selected_vms(self):
return self.select_vms_widget.selected_list.count() > 0 return self.select_vms_widget.selected_list.count() > 0
def has_selected_dir(self): def has_selected_dir_and_pass(self):
return self.backup_dir != None if not len(self.passphrase_line_edit.text()):
return False
if self.passphrase_line_edit.text() != self.passphrase_line_edit_verify.text():
return False
return self.backup_location != None
def backup_location_changed(self, new_dir = None):
self.backup_location = str(self.dir_line_edit.text())
self.select_dir_page.emit(SIGNAL("completeChanged()"))
# Bases on the original code by: # Bases on the original code by:

查看文件

@ -77,7 +77,7 @@ def umount_device(dev_mount_path):
def fill_appvms_list(dialog): def fill_appvms_list(dialog):
dialog.appvm_combobox.clear() dialog.appvm_combobox.clear()
dialog.appvm_combobox.addItem("None") dialog.appvm_combobox.addItem("dom0")
dialog.appvm_combobox.setCurrentIndex(0) #current selected is null "" dialog.appvm_combobox.setCurrentIndex(0) #current selected is null ""

查看文件

@ -88,6 +88,7 @@ class RestoreVMsWindow(Ui_Restore, QWizard):
self.select_dir_page.isComplete = self.has_selected_dir self.select_dir_page.isComplete = self.has_selected_dir
self.select_vms_page.isComplete = self.has_selected_vms self.select_vms_page.isComplete = self.has_selected_vms
self.confirm_page.isComplete = self.all_vms_good
#FIXME #FIXME
#this causes to run isComplete() twice, I don't know why #this causes to run isComplete() twice, I don't know why
self.select_vms_page.connect(self.select_vms_widget, SIGNAL("selected_changed()"), SIGNAL("completeChanged()")) self.select_vms_page.connect(self.select_vms_widget, SIGNAL("selected_changed()"), SIGNAL("completeChanged()"))
@ -222,6 +223,7 @@ class RestoreVMsWindow(Ui_Restore, QWizard):
self.confirm_text_edit.setFontFamily("Monospace") self.confirm_text_edit.setFontFamily("Monospace")
self.confirm_text_edit.setText("\n".join(self.func_output)) self.confirm_text_edit.setText("\n".join(self.func_output))
self.confirm_page.emit(SIGNAL("completeChanged()"))
elif self.currentPage() is self.commit_page: elif self.currentPage() is self.commit_page:
self.button(self.CancelButton).setDisabled(True) self.button(self.CancelButton).setDisabled(True)
@ -243,6 +245,13 @@ class RestoreVMsWindow(Ui_Restore, QWizard):
umount_device(self.dev_mount_path) umount_device(self.dev_mount_path)
self.button(self.FinishButton).setEnabled(True) self.button(self.FinishButton).setEnabled(True)
def all_vms_good(self):
for vminfo in self.vms_to_restore.values():
if not vminfo['good-to-go']:
print vminfo['vm'].name, str(vminfo)
return False
return True
def reject(self): def reject(self):
if self.dev_mount_path != None: if self.dev_mount_path != None:
umount_device(self.dev_mount_path) umount_device(self.dev_mount_path)