diff --git a/backupdlg.ui b/backupdlg.ui index 33de66b..04cb139 100644 --- a/backupdlg.ui +++ b/backupdlg.ui @@ -25,10 +25,10 @@ - 12 - 75 + 9 + 50 false - true + false false @@ -40,75 +40,68 @@ - - - - - - 12 - 75 - false - true - false - - - - Select backup destination directory: - - - - - - - Device - - - - - - - - 0 - 0 - - - - - dev1 - - - - - longdeviceblablabla - - - - - dev2 - - - - - dev3 - - - - - - - - Backup directory: - - - - - - - - - - ... + + + + + Backup destination directory + + + + + Device: + + + + + + + + 0 + 0 + + + + + dev1 + + + + + longdeviceblablabla + + + + + dev2 + + + + + dev3 + + + + + + + + Backup directory: + + + + + + + + + + ... + + + + @@ -119,10 +112,10 @@ - 12 - 75 + 9 + 50 false - true + false false @@ -150,10 +143,10 @@ p, li { white-space: pre-wrap; } - 12 - 75 + 9 + 50 false - true + false false @@ -170,10 +163,10 @@ p, li { white-space: pre-wrap; } - 12 - 75 + 9 + 50 false - true + false false @@ -182,21 +175,6 @@ p, li { white-space: pre-wrap; } - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">A lot of info<br />A lot of info<br />A lot of info<br />A lot of info<br />A lot of info<br />A lot of info<br />A lot of info A lot of info A lot of info A lot of info A lot of info A lot of info</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">A lot of info A lot of info A lot of info A lot of info A lot of info A lot of info</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">A lot of info A lot of info A lot of info A lot of info A lot of info A lot of info</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">A lot of info A lot of info A lot of info A lot of info A lot of info A lot of info</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">A lot of info A lot of info A lot of info A lot of info A lot of info A lot of info<br />A lot of info</p></body></html> - - - diff --git a/globalsettingsdlg.ui b/globalsettingsdlg.ui index 850361c..0795e1f 100644 --- a/globalsettingsdlg.ui +++ b/globalsettingsdlg.ui @@ -6,8 +6,8 @@ 0 0 - 568 - 342 + 678 + 288 @@ -15,68 +15,157 @@ - - - - 0 - 0 - - - - UpdateVM: + + + System defaults + + + + + + 0 + 0 + + + + UpdateVM: + + + + + + + + + + ClockVM: + + + + + + + + + + Default netVM: + + + + + + + + + + + 0 + 0 + + + + Default template: + + + + + + + - - - - - - ClockVM: + + + Default memory settings + + + + 11 + 26 + 134 + 16 + + + + Minimal VM's memory: + + + + + + 11 + 57 + 139 + 16 + + + + dom0 memory margin: + + + + + + 156 + 26 + 121 + 25 + + + + MB + + + 999999999 + + + 10 + + + + + + 156 + 57 + 121 + 25 + + + + MB + + + 999999999 + + + 50 + + - - - - - - - Default netVM: + + + + Kernel + + + + + Default kernel: + + + + + + + - - - - - - - - 0 - 0 - - - - Default template: - - - - - - - - - - Default kernel: - - - - - - - + Qt::Horizontal diff --git a/icons/add.png b/icons/add.png new file mode 100644 index 0000000..a15dd10 Binary files /dev/null and b/icons/add.png differ diff --git a/icons/edit.png b/icons/edit.png new file mode 100644 index 0000000..b17a7ce Binary files /dev/null and b/icons/edit.png differ diff --git a/icons/flag-blue.png b/icons/flag-blue.png new file mode 100644 index 0000000..6f6b4ab Binary files /dev/null and b/icons/flag-blue.png differ diff --git a/icons/flag-green.png b/icons/flag-green.png new file mode 100644 index 0000000..9b0b06d Binary files /dev/null and b/icons/flag-green.png differ diff --git a/icons/flag-red.png b/icons/flag-red.png new file mode 100644 index 0000000..3a9b9ac Binary files /dev/null and b/icons/flag-red.png differ diff --git a/icons/flag-yellow.png b/icons/flag-yellow.png new file mode 100644 index 0000000..ab7835a Binary files /dev/null and b/icons/flag-yellow.png differ diff --git a/icons/pencil.png b/icons/pencil.png new file mode 100644 index 0000000..1ecb10c Binary files /dev/null and b/icons/pencil.png differ diff --git a/icons/remove.png b/icons/remove.png new file mode 100644 index 0000000..fffb248 Binary files /dev/null and b/icons/remove.png differ diff --git a/mainwindow.ui b/mainwindow.ui index b5e8fdf..bd5bfb7 100644 --- a/mainwindow.ui +++ b/mainwindow.ui @@ -22,6 +22,13 @@ Qubes VM Manager + + + :/qubes.png:/qubes.png + + + + true @@ -42,6 +49,12 @@ + + 0 + + + 0 + @@ -87,10 +100,10 @@ QAbstractItemView::SelectRows - true + false - Qt::DashLine + Qt::NoPen true @@ -128,16 +141,33 @@ Name + + VM name + + + + + Upd + + + Update info + Template + + VM's template + NetVM + + VM's netVM + @@ -148,6 +178,9 @@ CPU Graph + + CPU usage graph + @@ -158,6 +191,9 @@ MEM Graph + + Memory usage graph + @@ -198,6 +234,7 @@ Columns visibility + @@ -212,17 +249,6 @@ - - - - 0 - 0 - - - - false - - toolBar @@ -522,6 +548,14 @@ Global settings + + + true + + + Upd + + diff --git a/multiselectwidget.ui b/multiselectwidget.ui index db9cb70..f5e0ab6 100644 --- a/multiselectwidget.ui +++ b/multiselectwidget.ui @@ -86,6 +86,13 @@ + + + + >> + + + @@ -100,6 +107,13 @@ + + + + << + + + diff --git a/qubesmanager/main.py b/qubesmanager/main.py index 183fb24..ca76aa5 100755 --- a/qubesmanager/main.py +++ b/qubesmanager/main.py @@ -156,7 +156,7 @@ class VmIconWidget (QWidget): label_icon = QLabel() icon = QIcon (icon_path) - icon_sz = QSize (VmManagerWindow.row_height * 0.8, VmManagerWindow.row_height * 0.3) + icon_sz = QSize (VmManagerWindow.row_height * 0.8, VmManagerWindow.row_height * 0.8) icon_pixmap = icon.pixmap(icon_sz, QIcon.Disabled if not enabled else QIcon.Normal) label_icon.setPixmap (icon_pixmap) label_icon.setFixedSize (icon_sz) @@ -187,7 +187,7 @@ class VmNetvmWidget (QWidget): class VmUsageBarWidget (QWidget): - def __init__(self, min, max, format, label, update_func, vm, load, parent = None): + def __init__(self, min, max, format, update_func, vm, load, parent = None): super (VmUsageBarWidget, self).__init__(parent) self.min = min @@ -198,10 +198,20 @@ class VmUsageBarWidget (QWidget): self.widget.setMinimum(min) self.widget.setMaximum(max) self.widget.setFormat(format); - self.label = QLabel(label) + + self.widget.setStyleSheet( + "QProgressBar:horizontal{ \ + border: 1px solid lightblue;\ + border-radius: 4px;\ + background: white;\ + text-align: center;\ + }\ + QProgressBar::chunk:horizontal {\ + background: qlineargradient(x1: 0, y1: 0.5, x2: 1, y2: 0.5, stop: 0 hsv(210, 170, 207), stop: 1 white);\ + }" + ) layout = QHBoxLayout() - layout.addWidget(self.label) layout.addWidget(self.widget) self.setLayout(layout) @@ -298,21 +308,26 @@ class MemChartWidget (QWidget): class VmUpdateInfoWidget(QWidget): - def __init__(self, vm, parent = None): + def __init__(self, vm, show_text=True, parent = None): super (VmUpdateInfoWidget, self).__init__(parent) layout = QHBoxLayout () - self.label = QLabel("---") - layout.addWidget(self.label, alignment=Qt.AlignCenter) + self.show_text = show_text + if self.show_text: + self.label=QLabel("") + layout.addWidget(self.label, alignment=Qt.AlignCenter) + else: + self.icon = QLabel("") + layout.addWidget(self.icon, alignment=Qt.AlignHCenter) self.setLayout(layout) self.previous_outdated = False - self.previous_update_recommended = False + self.previous_update_recommended = None def update_outdated(self, vm): outdated = vm.is_outdated() if outdated and not self.previous_outdated: - self.label.setText("outdated") - + self.update_status_widget("outdated") + self.previous_outdated = outdated if vm.is_updateable(): update_recommended = self.previous_update_recommended @@ -323,11 +338,37 @@ class VmUpdateInfoWidget(QWidget): update_recommended = True else: update_recommended = False - self.label.setText("OK") + if not self.show_text and self.previous_update_recommended != False: + self.update_status_widget("ok") + if update_recommended and not self.previous_update_recommended: - self.label.setText("check updates") + self.update_status_widget("update") self.previous_update_recommended = update_recommended + def update_status_widget(self, state): + + if state == "ok": + label_text = "" + icon_path = ":/flag-green.png" + tooltip_text = "VM up to date" + elif state == "update": + label_text = "Check updates" + icon_path = ":/flag-yellow.png" + tooltip_text = "Update recommended" + elif state == "outdated": + label_text = "VM outdated" + icon_path = ":/flag-red.png" + tooltip_text = "VM outdated" + + if self.show_text: + self.label.setText(label_text) + else: + self.layout().removeWidget(self.icon) + self.icon.deleteLater() + self.icon = VmIconWidget(icon_path, True) + self.icon.setToolTip(tooltip_text) + self.layout().addWidget(self.icon, alignment=Qt.AlignCenter) + class VmBlockDevicesWidget(QWidget): def __init__(self, vm, parent=None): @@ -353,31 +394,34 @@ class VmRowInTable(object): self.info_widget = VmInfoWidget(vm) table.setCellWidget(row_no, 0, self.info_widget) + self.upd_widget = VmUpdateInfoWidget(vm, False) + table.setCellWidget(row_no, 1, self.upd_widget) + self.template_widget = VmTemplateWidget(vm) - table.setCellWidget(row_no, 1, self.template_widget) + table.setCellWidget(row_no, 2, self.template_widget) self.netvm_widget = VmNetvmWidget(vm) - table.setCellWidget(row_no, 2, self.netvm_widget) + table.setCellWidget(row_no, 3, self.netvm_widget) - self.cpu_usage_widget = VmUsageBarWidget(0, 100, "", "CPU", + self.cpu_usage_widget = VmUsageBarWidget(0, 100, "", lambda vm, val: val if vm.last_power_state else 0, vm, 0) - table.setCellWidget(row_no, 3, self.cpu_usage_widget) + table.setCellWidget(row_no, 4, self.cpu_usage_widget) self.load_widget = LoadChartWidget(vm) - table.setCellWidget(row_no, 4, self.load_widget) + table.setCellWidget(row_no, 5, self.load_widget) - self.mem_usage_widget = VmUsageBarWidget(0, qubes_host.memory_total/1024, "%v MB", "MEM", + self.mem_usage_widget = VmUsageBarWidget(0, qubes_host.memory_total/1024, "%v MB", lambda vm, val: vm.get_mem()/1024 if vm.last_power_state else 0, vm, 0) - table.setCellWidget(row_no, 5, self.mem_usage_widget) + table.setCellWidget(row_no, 6, self.mem_usage_widget) self.mem_widget = MemChartWidget(vm) - table.setCellWidget(row_no, 6, self.mem_widget) + table.setCellWidget(row_no, 7, self.mem_widget) - self.updateinfo_widget = VmUpdateInfoWidget(vm) - table.setCellWidget(row_no, 7, self.updateinfo_widget) + self.updateinfo_widget = VmUpdateInfoWidget(vm, True) + table.setCellWidget(row_no, 8, self.updateinfo_widget) self.blockdevices_widget = VmBlockDevicesWidget(vm) - table.setCellWidget(row_no, 8, self.blockdevices_widget) + table.setCellWidget(row_no, 9, self.blockdevices_widget) def update(self, counter, cpu_load = None): @@ -388,6 +432,7 @@ class VmRowInTable(object): self.load_widget.update_load(self.vm, cpu_load) self.mem_widget.update_load(self.vm) self.updateinfo_widget.update_outdated(self.vm) + self.upd_widget.update_outdated(self.vm) class NewAppVmDlg (QDialog, ui_newappvmdlg.Ui_NewAppVMDlg): def __init__(self, parent = None): @@ -437,18 +482,20 @@ class ThreadMonitor(QObject): class VmManagerWindow(Ui_VmManagerWindow, QMainWindow): row_height = 30 + column_width = 200 max_visible_rows = 7 update_interval = 1000 # in msec show_inactive_vms = True columns_indices = { "Name": 0, - "Template": 1, - "NetVM": 2, - "CPU": 3, - "CPU Graph": 4, - "MEM": 5, - "MEM Graph": 6, - "Update Info": 7, - "Block Device": 8 } + "Upd": 1, + "Template": 2, + "NetVM": 3, + "CPU": 4, + "CPU Graph": 5, + "MEM": 6, + "MEM Graph": 7, + "Update Info": 8, + "Block Device": 9 } @@ -462,7 +509,7 @@ class VmManagerWindow(Ui_VmManagerWindow, QMainWindow): self.connect(self.table, SIGNAL("itemSelectionChanged()"), self.table_selection_changed) cur_pos = self.pos() - self.table.setColumnWidth(0, 200) + self.table.setColumnWidth(0, self.column_width) self.setSizeIncrement(QtCore.QSize(200, 30)) self.centralwidget.setSizeIncrement(QtCore.QSize(200, 30)) self.table.setSizeIncrement(QtCore.QSize(200, 30)) @@ -471,15 +518,21 @@ class VmManagerWindow(Ui_VmManagerWindow, QMainWindow): self.table.setColumnHidden( self.columns_indices["NetVM"], True) self.actionNetVM.setChecked(False) + self.table.setColumnHidden( self.columns_indices["Update Info"], True) + self.actionUpdate_Info.setChecked(False) self.table.setColumnHidden( self.columns_indices["CPU Graph"], True) self.actionCPU_Graph.setChecked(False) self.table.setColumnHidden( self.columns_indices["MEM Graph"], True) self.actionMEM_Graph.setChecked(False) self.table.setColumnHidden( self.columns_indices["Block Device"], True) self.actionBlock_Devices.setChecked(False) + self.table.setColumnWidth(self.columns_indices["Upd"], 50) + + #self.table.setFrameShape(QFrame.NoFrame) + self.table.setContentsMargins(0,0,0,0) + self.centralwidget.layout().setContentsMargins(0,0,0,0) + self.layout().setContentsMargins(0,0,0,0) - self.update_table_columns() - self.set_table_geom_height() self.counter = 0 self.shutdown_monitor = {} @@ -487,37 +540,43 @@ class VmManagerWindow(Ui_VmManagerWindow, QMainWindow): self.last_measure_time = time.time() QTimer.singleShot (self.update_interval, self.update_table) + def show(self): + super(VmManagerWindow, self).show() + self.set_table_geom_height() + self.update_table_columns() + def set_table_geom_height(self): - minH = self.table.horizontalHeader().height() + \ - 2*self.table.contentsMargins().top() +\ - self.centralwidget.layout().contentsMargins().top() +\ - self.centralwidget.layout().contentsMargins().bottom() - #self.table.contentsMargins().bottom() # this is huge, dunno why - #2*self.centralwidget.layout().verticalSpacing() # and this is negative... + minH = self.table.horizontalHeader().height() +\ + 2*self.table.frameWidth() #All this sizing is kind of magic, so change it only if you have to #or if you know what you're doing :) n = self.table.rowCount(); - if n > self.max_visible_rows: - for i in range (0, self.max_visible_rows): - minH += self.table.rowHeight(i) - maxH = minH - for i in range (self.max_visible_rows, n): - maxH += self.table.rowHeight(i) + maxH = minH + if n >= self.max_visible_rows: + minH += self.max_visible_rows*self.row_height + maxH += n*self.row_height else: - for i in range (n): - minH += self.table.rowHeight(i) + minH += n*self.row_height maxH = minH - + self.centralwidget.setMinimumHeight(minH) - maxH += self.menubar.height() + self.statusbar.height() +\ - self.toolbar.height() + self.centralwidget.setMaximumHeight(maxH) + + mainwindow_to_add = self.menubar.height() +\ + self.toolbar.height() + \ + self.menubar.contentsMargins().top() + self.menubar.contentsMargins().bottom() +\ + self.toolbar.contentsMargins().top() + self.toolbar.contentsMargins().bottom() + + maxH += mainwindow_to_add + minH += mainwindow_to_add + self.setMaximumHeight(maxH) - self.adjustSize() - + self.setMinimumHeight(minH) + def get_vms_list(self): self.qvm_collection.lock_db_for_reading() self.qvm_collection.load() @@ -613,12 +672,14 @@ class VmManagerWindow(Ui_VmManagerWindow, QMainWindow): def update_table_columns(self): - width = self.table.horizontalHeader().length() +\ - self.table.verticalScrollBar().width() +\ - self.centralwidget.layout().contentsMargins().left() +\ - self.centralwidget.layout().contentsMargins().right() + table_width = self.table.horizontalHeader().length() +\ + self.table.verticalScrollBar().width() + \ + 2*self.table.frameWidth() + 1 + + self.table.setFixedWidth( table_width ) + self.centralwidget.setFixedWidth(table_width) + self.setFixedWidth(table_width) - self.table.setFixedWidth( width ) def table_selection_changed (self): @@ -738,6 +799,7 @@ class VmManagerWindow(Ui_VmManagerWindow, QMainWindow): @pyqtSlot(name='on_action_removevm_triggered') def action_removevm_triggered(self): + vm = self.get_selected_vm() assert not vm.is_running() assert not vm.installed_by_rpm @@ -885,7 +947,7 @@ class VmManagerWindow(Ui_VmManagerWindow, QMainWindow): @pyqtSlot(name='on_action_settings_triggered') def action_settings_triggered(self): vm = self.get_selected_vm() - settings_window = VMSettingsWindow(vm) + settings_window = VMSettingsWindow(vm, 1) settings_window.exec_() @@ -980,30 +1042,33 @@ class VmManagerWindow(Ui_VmManagerWindow, QMainWindow): def showhide_collumn(self, col_num, show): self.table.setColumnHidden( col_num, not show) self.update_table_columns() - + + def on_actionUpd_toggled(self, checked): + self.showhide_collumn( self.columns_indices['Upd'], checked) + def on_actionTemplate_toggled(self, checked): - self.showhide_collumn( 1, checked) + self.showhide_collumn( self.columns_indices['Template'], checked) def on_actionNetVM_toggled(self, checked): - self.showhide_collumn( 2, checked) + self.showhide_collumn( self.columns_indices['NetVM'], checked) def on_actionCPU_toggled(self, checked): - self.showhide_collumn( 3, checked) + self.showhide_collumn( self.columns_indices['CPU'], checked) def on_actionCPU_Graph_toggled(self, checked): - self.showhide_collumn( 4, checked) + self.showhide_collumn( self.columns_indices['CPU Graph'], checked) def on_actionMEM_toggled(self, checked): - self.showhide_collumn( 5, checked) + self.showhide_collumn( self.columns_indices['MEM'], checked) def on_actionMEM_Graph_toggled(self, checked): - self.showhide_collumn( 6, checked) + self.showhide_collumn( self.columns_indices['MEM Graph'], checked) def on_actionUpdate_Info_toggled(self, checked): - self.showhide_collumn( 7, checked) + self.showhide_collumn( self.columns_indices['Update Info'], checked) def on_actionBlock_Devices_toggled(self, checked): - self.showhide_collumn( 8, checked) + self.showhide_collumn( self.columns_indices['Block Device'], checked) class QubesTrayIcon(QSystemTrayIcon): @@ -1139,4 +1204,3 @@ def main(): app.exec_() trayIcon = None - diff --git a/qubesmanager/multiselectwidget.py b/qubesmanager/multiselectwidget.py index f0c0c23..46c7cf2 100644 --- a/qubesmanager/multiselectwidget.py +++ b/qubesmanager/multiselectwidget.py @@ -9,7 +9,9 @@ class MultiSelectWidget(Ui_MultiSelectWidget, QWidget): super(MultiSelectWidget, self).__init__() self.setupUi(self); self.add_selected_button.clicked.connect(self.add_selected) + self.add_all_button.clicked.connect(self.add_all) self.remove_selected_button.clicked.connect(self.remove_selected) + self.remove_all_button.clicked.connect(self.remove_all) self.available_list.setSelectionMode(QAbstractItemView.ExtendedSelection) self.selected_list.setSelectionMode(QAbstractItemView.ExtendedSelection) @@ -20,15 +22,25 @@ class MultiSelectWidget(Ui_MultiSelectWidget, QWidget): row = src.indexFromItem(s).row() item = src.takeItem(row) dst.addItem(item) + dst.sortItems() def add_selected(self): self.switch_selected(self.available_list, self.selected_list) - self.selected_list.sortItems() - def remove_selected(self): self.switch_selected(self.selected_list, self.available_list) - self.available_list.sortItems() + + def move_all(self, src, dst): + while src.count() > 0: + item = src.takeItem(0) + dst.addItem(item) + dst.sortItems() + + def add_all(self): + self.move_all(self.available_list, self.selected_list) + + def remove_all(self): + self.move_all(self.selected_list, self.available_list) def clear(self): self.available_list.clear() @@ -36,7 +48,6 @@ class MultiSelectWidget(Ui_MultiSelectWidget, QWidget): - if __name__ == "__main__": app = QtGui.QApplication(sys.argv) ui = MultiSelectWidget() diff --git a/qubesmanager/restore.py b/qubesmanager/restore.py index 9371f85..d243a25 100644 --- a/qubesmanager/restore.py +++ b/qubesmanager/restore.py @@ -53,7 +53,7 @@ class RestoreVMsWindow(Ui_Restore, QWizard): self.setupUi(self) self.selectVMsWidget = MultiSelectWidget(self) - self.verticalLayout.insertWidget(1, self.selectVMsWidget) + self.selectVMsLayout.insertWidget(1, self.selectVMsWidget) self.selectVMsWidget.available_list.addItem("netVM1") self.selectVMsWidget.available_list.addItem("appVM1") diff --git a/qubesmanager/settings.py b/qubesmanager/settings.py index a213af7..b7ce7e1 100644 --- a/qubesmanager/settings.py +++ b/qubesmanager/settings.py @@ -50,10 +50,12 @@ from multiselectwidget import * class VMSettingsWindow(Ui_SettingsDialog, QDialog): - def __init__(self, vm, parent=None): + def __init__(self, vm, init_page=0, parent=None): super(VMSettingsWindow, self).__init__(parent) self.setupUi(self) + if init_page in range(self.tabWidget.count()): + self.tabWidget.setCurrentIndex(init_page) self.connect(self.buttonBox, SIGNAL("accepted()"), self.save_and_apply) self.connect(self.buttonBox, SIGNAL("rejected()"), self.reject) diff --git a/resources.qrc b/resources.qrc index 360ff93..483f372 100644 --- a/resources.qrc +++ b/resources.qrc @@ -1,5 +1,13 @@ + icons/pencil.png + icons/edit.png + icons/add.png + icons/flag-blue.png + icons/flag-green.png + icons/flag-red.png + icons/flag-yellow.png + icons/remove.png icons/on.png icons/appsprefs.png icons/newfirewall.png diff --git a/restoredlg.ui b/restoredlg.ui index 88360e1..8ff2cee 100644 --- a/restoredlg.ui +++ b/restoredlg.ui @@ -20,170 +20,168 @@ QWizard::NoBackButtonOnLastPage|QWizard::NoBackButtonOnStartPage - - - - - Device - - - - - - - - 0 - 0 - - - - - dev1 - - - - - longdeviceblablabla - - - - - dev2 - - - - - dev3 - - - - - - - - Backup directory: - - - - - - - - - - ... - - - - - + + + - 12 - 75 - false - true - false + 50 + false - - Select backup source location: + + Backup source location + + + + + + 50 + false + + + + Device + + + + + + + + 0 + 0 + + + + + dev1 + + + + + longdeviceblablabla + + + + + dev2 + + + + + dev3 + + + + + + + + Backup directory: + + + + + + + + + + ... + + + + + + + + Qt::Vertical + + + + 20 + 215 + + + + - + - - - - 12 - 75 - false - true - false - - - - Select VMs to restore: + + + VMs to restore + - - - - + - 12 - 75 - false - true - false + 50 + false - - Restore options: + + Restore options + + + + + + 50 + false + + + + Do not restore VMs that have missing templates or netvms. + + + skip broken + + + + + + + Ignore missing templates or netvms, restore VMs anyway. + + + ignore missing + + + + + + + Do not restore VMs that are already present on the host. + + + skip conflicting + + + + + + + Ignore dom0 username mismatch while restoring homedir. + + + ignore username mismatch + + + + - - - - - - Do not restore VMs that have missing templates or netvms. - - - skip broken - - - - - - - Do not restore VMs that are already present on the host. - - - skip conflicting - - - - - - - Ignore dom0 username mismatch while restoring homedir. - - - ignore username mismatch - - - - - - - Ignore missing templates or netvms, restore VMs anyway. - - - ignore missing - - - - - - - Force to run, even with root privileges. - - - force root - - - - - @@ -192,10 +190,10 @@ - 12 - 75 + 9 + 50 false - true + false false @@ -223,10 +221,10 @@ p, li { white-space: pre-wrap; } - 12 - 75 + 9 + 50 false - true + false false @@ -243,10 +241,10 @@ p, li { white-space: pre-wrap; } - 12 - 75 + 9 + 50 false - true + false false @@ -255,21 +253,6 @@ p, li { white-space: pre-wrap; } - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">A lot of info<br />A lot of info<br />A lot of info<br />A lot of info<br />A lot of info<br />A lot of info<br />A lot of info A lot of info A lot of info A lot of info A lot of info A lot of info</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">A lot of info A lot of info A lot of info A lot of info A lot of info A lot of info</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">A lot of info A lot of info A lot of info A lot of info A lot of info A lot of info</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">A lot of info A lot of info A lot of info A lot of info A lot of info A lot of info</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">A lot of info A lot of info A lot of info A lot of info A lot of info A lot of info<br />A lot of info</p></body></html> - - - diff --git a/settingsdlg.ui b/settingsdlg.ui index 19d0b76..59d0c1b 100644 --- a/settingsdlg.ui +++ b/settingsdlg.ui @@ -26,7 +26,7 @@ - 0 + 2 @@ -35,131 +35,123 @@ Basic - + - - - - - Settings - - - - - - Name & label: - - - - - - - myappvm - - - - - - - true - - - - - - - Use this template: - - - - - - - - - - Allow networking - - - true - - - - - - - - - - Info - - - - - - Type: - - - - - - - - 75 - true - - - - AppVM - - - - - - - Installed by RPM: - - - - - - - - 75 - true - - - - No - - - - - - - + + + Settings + + + + + + Name & label: + + + + + + + myappvm + + + + + + + true + + + + + + + Template: + + + + + + + + + + NetVM: + + + + + + + + + + true + + + Include in backups by default + + + true + + + + + - - - Qt::Vertical + + + Info - - - 20 - 157 - - - + + + QFormLayout::AllNonFixedFieldsGrow + + + + + Type: + + + + + + + + 75 + true + + + + AppVM + + + + + + + Installed by RPM: + + + + + + + + 75 + true + + + + No + + + + + - - - - - Advanced - - - + Disk storage @@ -168,7 +160,7 @@ - false + true Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter @@ -181,16 +173,6 @@ - - - - false - - - Allow to grow - - - @@ -205,64 +187,39 @@ - - - - false - - - Include in backups - - - true - - - - + + + + Qt::Vertical + + + + 20 + 73 + + + + + + + + + Advanced + + + Memory/CPU - - - - - false - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - 10000 - - - 100 - - - 400 - - - - - + + + - MB - - - - - - - false - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - 1 + Initial memory: @@ -289,57 +246,70 @@ - - + + - Memory: + Max memory: + + + + + + + false + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 10000 + + + 100 + + + 400 + + + + + + + MB - - - Max Memory: - - - - - VCPUs: + VCPUs no.: + + + + + + + false + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 1 + + + + + + + Include in memory balancing - - - - Networking - - - - - - NetVM: - - - - - - - - - - VM updateable? - - - - - - - + Kernel @@ -378,7 +348,7 @@ - + Paths @@ -469,6 +439,168 @@ + + + + Qt::Vertical + + + + 20 + 88 + + + + + + + + + Firewall rules + + + + + + Allow network access except... + + + + + + + Deny network access except... + + + + + + + QLayout::SetMaximumSize + + + + + + + false + + + false + + + false + + + true + + + true + + + 40 + + + false + + + + + + + + + Allow ICMP traffic + + + true + + + + + + + Allow DNS queries + + + true + + + + + + + + + + + + + + + + + :/add.png:/add.png + + + + 24 + 24 + + + + + + + + + + + + :/pencil.png:/pencil.png + + + + 24 + 24 + + + + + + + + + + + + :/remove.png:/remove.png + + + + 24 + 24 + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + @@ -495,6 +627,112 @@ + + + Services + + + + + + + + + + + + + :/add.png:/add.png + + + + 24 + 24 + + + + + + + + + ntpd + + + Checked + + + + + cupsd + + + Checked + + + + + meminfo + + + Checked + + + + + + + + Checked services will be turned on. + + + + + + + Unchecked services will be turned off. + + + + + + + Unlisted services will follow default VM's settings. + + + + + + + + + + + :/remove.png:/remove.png + + + + 24 + 24 + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + +