diff --git a/qubesmanager/backup.py b/qubesmanager/backup.py
index c74e0de..80b7f1d 100644
--- a/qubesmanager/backup.py
+++ b/qubesmanager/backup.py
@@ -55,7 +55,6 @@ class BackupVMsWindow(Ui_Backup, QWizard):
__pyqtSignals__ = ("backup_progress(int)",)
excluded = []
- to_backup = []
def __init__(self, app, qvm_collection, blk_manager, parent=None):
super(BackupVMsWindow, self).__init__(parent)
@@ -109,8 +108,10 @@ class BackupVMsWindow(Ui_Backup, QWizard):
self.excluded.append(vm.name)
continue
- self.to_backup.append(vm.name)
- self.select_vms_widget.available_list.addItem(vm.name)
+ if vm.include_in_backups == True:
+ self.select_vms_widget.selected_list.addItem(vm.name)
+ else:
+ self.select_vms_widget.available_list.addItem(vm.name)
def dev_combobox_activated(self, idx):
diff --git a/qubesmanager/main.py b/qubesmanager/main.py
index 9d2298b..5534669 100755
--- a/qubesmanager/main.py
+++ b/qubesmanager/main.py
@@ -88,7 +88,7 @@ class VmStatusIcon(QLabel):
elif vm.is_netvm():
icon = QIcon (":/netvm.png")
else:
- icon = QIcon()
+ icon = QIcon(vm.label.icon_path)
icon_sz = QSize (VmManagerWindow.row_height * 0.8, VmManagerWindow.row_height * 0.8)
if vm.last_power_state:
diff --git a/qubesmanager/settings.py b/qubesmanager/settings.py
index a2f7cb4..f350019 100644
--- a/qubesmanager/settings.py
+++ b/qubesmanager/settings.py
@@ -80,34 +80,35 @@ class VMSettingsWindow(Ui_SettingsDialog, QDialog):
self.tabWidget.currentChanged.connect(self.current_tab_changed)
+ self.tabWidget.setTabEnabled(self.tabs_indices["applications"], not vm.is_netvm())
+ self.tabWidget.setTabEnabled(self.tabs_indices["firewall"], vm.is_networked() and not (vm.is_netvm() and not vm.is_proxyvm()))
+
###### basic tab
self.__init_basic_tab__()
###### firewall tab
+ if self.tabWidget.isTabEnabled(self.tabs_indices["firewall"]):
- model = QubesFirewallRulesModel()
- model.set_vm(vm)
- self.set_fw_model(model)
+ model = QubesFirewallRulesModel()
+ model.set_vm(vm)
+ self.set_fw_model(model)
-
- self.newRuleButton.clicked.connect(self.new_rule_button_pressed)
- self.editRuleButton.clicked.connect(self.edit_rule_button_pressed)
- self.deleteRuleButton.clicked.connect(self.delete_rule_button_pressed)
- self.policyAllowRadioButton.toggled.connect(self.policy_radio_toggled)
- self.dnsCheckBox.toggled.connect(self.dns_checkbox_toggled)
- self.icmpCheckBox.toggled.connect(self.icmp_checkbox_toggled)
+ self.newRuleButton.clicked.connect(self.new_rule_button_pressed)
+ self.editRuleButton.clicked.connect(self.edit_rule_button_pressed)
+ self.deleteRuleButton.clicked.connect(self.delete_rule_button_pressed)
+ self.policyAllowRadioButton.toggled.connect(self.policy_radio_toggled)
+ self.dnsCheckBox.toggled.connect(self.dns_checkbox_toggled)
+ self.icmpCheckBox.toggled.connect(self.icmp_checkbox_toggled)
####### devices tab
self.dev_list = MultiSelectWidget(self)
self.devices_layout.addWidget(self.dev_list)
####### apps tab
- if not vm.is_netvm():
+ if self.tabWidget.isTabEnabled(self.tabs_indices["applications"]):
self.app_list = MultiSelectWidget(self)
self.apps_layout.addWidget(self.app_list)
self.AppListManager = AppmenuSelectManager(self.vm, self.app_list)
- else:
- self.tabWidget.setTabEnabled(self.tabs_indices["applications"], False)
def reject(self):
self.done(0)
@@ -140,8 +141,10 @@ class VMSettingsWindow(Ui_SettingsDialog, QDialog):
def __save_changes__(self, thread_monitor):
- self.fw_model.apply_rules()
- self.AppListManager.save_appmenu_select_changes()
+ if self.tabWidget.isTabEnabled(self.tabs_indices["firewall"]):
+ self.fw_model.apply_rules()
+ if self.tabWidget.isTabEnabled(self.tabs_indices["applications"]):
+ self.AppListManager.save_appmenu_select_changes()
ret = self.__apply_basic_tab__()
if len(ret) > 0 :
@@ -191,21 +194,41 @@ class VMSettingsWindow(Ui_SettingsDialog, QDialog):
else:
self.template_name.setEnabled(False)
- if not self.vm.is_netvm():
+
+ if (not self.vm.is_netvm() or self.vm.is_proxyvm()):
netvm_list = [vm for vm in self.qvm_collection.values() if not vm.internal and vm.is_netvm()]
- self.netvm_idx = 0
+ self.netvm_idx = -1
for (i, vm) in enumerate(netvm_list):
text = vm.name
if vm is self.qvm_collection.get_default_netvm():
text += " (default)"
- if vm.qid == self.vm.netvm.qid:
+ if self.vm.netvm is not None and vm.qid == self.vm.netvm.qid:
self.netvm_idx = i
text += " (current)"
self.netVM.insertItem(i, text)
+ none_text = "none"
+ if self.vm.netvm is None:
+ none_text += " (current)"
+ self.netvm_idx = len(netvm_list)
+ self.netVM.insertItem(len(netvm_list), none_text)
self.netVM.setCurrentIndex(self.netvm_idx)
else:
self.netVM.setEnabled(False)
+ self.include_in_backups.setChecked(self.vm.include_in_backups)
+
+ #type
+ self.type_label.setText(self.vm.type)
+
+ #installed by rpm
+ text = "Yes" if self.vm.installed_by_rpm == True else "No"
+ self.rpm_label.setText(text)
+
+ #maxmem
+ self.priv_size.setValue(int(self.vm.maxmem)/1024)
+ self.priv_size.setMinimum(0)
+ self.priv_size.setMaximum(QubesHost().memory_total/1024/1024)
+
#self.vmname.selectAll()
#self.vmname.setFocus()
@@ -245,9 +268,44 @@ class VMSettingsWindow(Ui_SettingsDialog, QDialog):
self.qvm_collection.save()
self.qvm_collection.unlock_db()
- return msg
+ #vm template changed
+ if self.template_name.currentIndex() != self.template_idx:
+ new_template_name = self.template_name.currentText()
+ new_template_name = new_template_name.split(' ')[0]
- # template_vm = template_vm_list[dialog.template_name.currentIndex()]
+ template_vm = self.qvm_collection.get_vm_by_name(new_template_name)
+ assert (template_vm is not None and template_vm.qid in self.qvm_collection)
+ assert template_vm.is_template()
+
+ self.qvm_collection.lock_db_for_writing()
+ self.vm.template_vm = template_vm
+ self.qvm_collection.save()
+ self.qvm_collection.unlock_db()
+
+
+ #vm netvm changed
+ if self.netVM.currentIndex() != self.netvm_idx:
+ new_netvm_name = self.netVM.currentText()
+ new_netvm_name = new_netvm_name.split(' ')[0]
+
+ cmd = ["qvm-prefs", "-s", self.vm.name, "netvm", new_netvm_name]
+ res = subprocess.check_call(cmd, stderr=subprocess.PIPE)
+
+ if res != 0:
+ msg.append("Error while setting netVM!")
+
+ #include in backups
+ self.vm.include_in_backups = self.include_in_backups.isChecked()
+
+ #maxmem
+ maxmem = self.priv_size.value()*1024
+ if maxmem == 0:
+ maxmem = 256
+ self.vm.maxmem = maxmem
+
+ return msg
+
+ # template_vm = template_vm_list[dialog.template_name.currentIndex()]
# allow_networking = dialog.allow_networking.isChecked()
######### firewall tab related
diff --git a/settingsdlg.ui b/settingsdlg.ui
index 2ad1399..2d1be52 100644
--- a/settingsdlg.ui
+++ b/settingsdlg.ui
@@ -29,7 +29,7 @@
- 2
+ 0
@@ -87,9 +87,9 @@
-
-
+
- false
+ true
Include in backups by default
@@ -105,7 +105,7 @@
-
- false
+ true
Info
@@ -160,7 +160,7 @@
-
- false
+ true
Disk storage
@@ -169,7 +169,7 @@
-
- false
+ true
Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter