diff --git a/qubesmanager/qube_manager.py b/qubesmanager/qube_manager.py
index 83720ab..69f900e 100644
--- a/qubesmanager/qube_manager.py
+++ b/qubesmanager/qube_manager.py
@@ -78,7 +78,6 @@ class VmRowInTable:
# TODO: replace a various different widgets with a more generic
# VmFeatureWidget or VMPropertyWidget
-
table_widgets.row_height = VmManagerWindow.row_height
table.setRowHeight(row_no, VmManagerWindow.row_height)
@@ -94,7 +93,7 @@ class VmRowInTable:
table.setItem(row_no, VmManagerWindow.columns_indices['Label'],
self.label_widget.table_item)
- self.name_widget = table_widgets.VmNameItem(vm)
+ self.name_widget = table_widgets.VMPropertyItem(vm, "name")
table.setItem(row_no, VmManagerWindow.columns_indices['Name'],
self.name_widget)
@@ -108,7 +107,8 @@ class VmRowInTable:
table.setItem(row_no, VmManagerWindow.columns_indices['Template'],
self.template_widget)
- self.netvm_widget = table_widgets.VmNetvmItem(vm)
+ self.netvm_widget = table_widgets.VMPropertyItem(vm, "netvm",
+ check_default=True)
table.setItem(row_no, VmManagerWindow.columns_indices['NetVM'],
self.netvm_widget)
@@ -120,16 +120,18 @@ class VmRowInTable:
table.setItem(row_no, VmManagerWindow.columns_indices['Internal'],
self.internal_widget)
- self.ip_widget = table_widgets.VmIPItem(vm)
+ self.ip_widget = table_widgets.VMPropertyItem(vm, "ip")
table.setItem(row_no, VmManagerWindow.columns_indices['IP'],
self.ip_widget)
- self.include_in_backups_widget = \
- table_widgets.VmIncludeInBackupsItem(vm)
+ self.include_in_backups_widget = table_widgets.VMPropertyItem(
+ vm, "include_in_backups",
+ empty_function=(lambda x: True if x is None or not x else False))
table.setItem(row_no, VmManagerWindow.columns_indices[
- 'Backups'], self.include_in_backups_widget)
+ 'Include in backups'], self.include_in_backups_widget)
- self.last_backup_widget = table_widgets.VmLastBackupItem(vm)
+ self.last_backup_widget = table_widgets.VmLastBackupItem(
+ vm, "backup_timestamp")
table.setItem(row_no, VmManagerWindow.columns_indices[
'Last backup'], self.last_backup_widget)
@@ -331,7 +333,7 @@ class VmManagerWindow(ui_qubemanager.Ui_VmManagerWindow, QtGui.QMainWindow):
"Size": 6,
"Internal": 7,
"IP": 8,
- "Backups": 9,
+ "Include in backups": 9,
"Last backup": 10,
}
@@ -374,7 +376,7 @@ class VmManagerWindow(ui_qubemanager.Ui_VmManagerWindow, QtGui.QMainWindow):
self.columns_indices["Size"]: self.action_size_on_disk,
self.columns_indices["Internal"]: self.action_internal,
self.columns_indices["IP"]: self
- .action_ip, self.columns_indices["Backups"]: self
+ .action_ip, self.columns_indices["Include in backups"]: self
.action_backups, self.columns_indices["Last backup"]: self
.action_last_backup
}
@@ -1164,7 +1166,8 @@ class VmManagerWindow(ui_qubemanager.Ui_VmManagerWindow, QtGui.QMainWindow):
self.showhide_column(self.columns_indices['IP'], checked)
def on_action_backups_toggled(self, checked):
- self.showhide_column(self.columns_indices['Backups'], checked)
+ self.showhide_column(
+ self.columns_indices['Include in backups'], checked)
def on_action_last_backup_toggled(self, checked):
self.showhide_column(self.columns_indices['Last backup'], checked)
diff --git a/qubesmanager/table_widgets.py b/qubesmanager/table_widgets.py
index 131f7d8..43dd228 100644
--- a/qubesmanager/table_widgets.py
+++ b/qubesmanager/table_widgets.py
@@ -71,7 +71,6 @@ class VmIconWidget(QtGui.QWidget):
self.label_icon.setFixedSize(icon_sz)
-
class VmTypeWidget(VmIconWidget):
class VmTypeItem(QtGui.QTableWidgetItem):
def __init__(self, value, vm):
@@ -160,22 +159,6 @@ class VmLabelWidget(VmIconWidget):
self.set_icon(icon_path)
-class VmNameItem(QtGui.QTableWidgetItem):
- def __init__(self, vm):
- super(VmNameItem, self).__init__()
- self.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled)
- self.setText(vm.name)
- self.setTextAlignment(QtCore.Qt.AlignVCenter)
- self.qid = vm.qid
-
- def __lt__(self, other):
- if self.qid == 0:
- return True
- if other.qid == 0:
- return False
- return super(VmNameItem, self).__lt__(other)
-
-
class VmStatusIcon(QtGui.QLabel):
def __init__(self, vm, parent=None):
super(VmStatusIcon, self).__init__(parent)
@@ -281,16 +264,48 @@ class VmInfoWidget(QtGui.QWidget):
self.upd_info.update_outdated()
-class VmTemplateItem(QtGui.QTableWidgetItem):
- def __init__(self, vm):
- super(VmTemplateItem, self).__init__()
+class VMPropertyItem(QtGui.QTableWidgetItem):
+ def __init__(self, vm, property_name, empty_function=(lambda x: False),
+ check_default=False):
+ super(VMPropertyItem, self).__init__()
self.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled)
+ self.setTextAlignment(QtCore.Qt.AlignVCenter)
self.vm = vm
self.qid = vm.qid
+ self.property_name = property_name
self.name = vm.name
- self.setTextAlignment(QtCore.Qt.AlignVCenter)
+ self.empty_function = empty_function
+ self.check_default = check_default
self.update()
+ def update(self):
+ val = getattr(self.vm, self.property_name, None)
+ if self.empty_function(val):
+ self.setText("")
+ elif val is None:
+ self.setText("n/a")
+ elif self.check_default and \
+ self.vm.property_is_default(self.property_name):
+ self.setText('default (' + str(val) + ')')
+ elif val is True:
+ self.setText("Yes")
+ else:
+ self.setText(str(val))
+
+ def __lt__(self, other):
+ if self.qid == 0:
+ return True
+ if other.qid == 0:
+ return False
+ if self.text() == other.text():
+ return self.name < other.name
+ return super(VMPropertyItem, self).__lt__(other)
+
+
+class VmTemplateItem(VMPropertyItem):
+ def __init__(self, vm):
+ super(VmTemplateItem, self).__init__(vm, "template")
+
def update(self):
if getattr(self.vm, 'template', None) is not None:
self.setText(self.vm.template.name)
@@ -302,68 +317,14 @@ class VmTemplateItem(QtGui.QTableWidgetItem):
self.setText(self.vm.klass)
- def __lt__(self, other):
- if self.qid == 0:
- return True
- if other.qid == 0:
- return False
- if self.text() == other.text():
- return self.name < other.name
- return super(VmTemplateItem, self).__lt__(other)
-
-class VmNetvmItem(QtGui.QTableWidgetItem):
+class VmInternalItem(VMPropertyItem):
def __init__(self, vm):
- super(VmNetvmItem, self).__init__()
- self.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled)
- self.vm = vm
- self.qid = vm.qid
- self.name = vm.name
- self.setTextAlignment(QtCore.Qt.AlignVCenter)
- self.update()
+ super(VmInternalItem, self).__init__(vm, None)
def update(self):
- if getattr(self.vm, 'netvm', None) is None:
- self.setText("n/a")
- else:
- if self.vm.property_is_default('netvm'):
- text = 'default (' + self.vm.netvm.name +')'
- else:
- text = self.vm.netvm.name
- self.setText(text)
-
- def __lt__(self, other):
- if self.qid == 0:
- return True
- if other.qid == 0:
- return False
- if self.text() == other.text():
- return self.name < other.name
- return super(VmNetvmItem, self).__lt__(other)
-
-
-class VmInternalItem(QtGui.QTableWidgetItem):
- def __init__(self, vm):
- super(VmInternalItem, self).__init__()
- self.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled)
-
- self.vm = vm
- self.qid = vm.qid
- self.name = vm.name
- self.update()
-
- def update(self):
- self.internal = self.vm.features.get('internal', False)
- self.setText("Yes" if self.internal else "")
-
- def __lt__(self, other):
- if self.qid == 0:
- return True
- if other.qid == 0:
- return False
- if self.internal == other.internal:
- return self.name < other.name
- return super(VmInternalItem, self).__lt__(other)
+ internal = self.vm.features.get('internal', False)
+ self.setText("Yes" if internal else "")
# features man qvm-features
@@ -474,6 +435,7 @@ class VmUpdateInfoWidget(QtGui.QWidget):
alignment=QtCore.Qt.AlignCenter)
self.icon.setVisible(True)
+
class VmSizeOnDiskItem(QtGui.QTableWidgetItem):
def __init__(self, vm):
super(VmSizeOnDiskItem, self).__init__()
@@ -504,87 +466,15 @@ class VmSizeOnDiskItem(QtGui.QTableWidgetItem):
return self.value < other.value
-class VmIPItem(QtGui.QTableWidgetItem):
- def __init__(self, vm):
- super(VmIPItem, self).__init__()
- self.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled)
-
- self.vm = vm
- self.qid = vm.qid
- self.name = vm.name
- self.update()
+class VmLastBackupItem(VMPropertyItem):
+ def __init__(self, vm, property_name):
+ super(VmLastBackupItem, self).__init__(vm, property_name)
def update(self):
- self.ip = getattr(self.vm, 'ip', None)
- self.setText(self.ip if self.ip is not None else 'n/a')
+ backup_timestamp = getattr(self.vm, 'backup_timestamp', None)
- def __lt__(self, other):
- if self.qid == 0:
- return True
- if other.qid == 0:
- return False
- if self.ip == other.ip:
- return self.name < other.name
- return super(VmIPItem, self).__lt__(other)
-
-
-class VmIncludeInBackupsItem(QtGui.QTableWidgetItem):
- def __init__(self, vm):
- super(VmIncludeInBackupsItem, self).__init__()
- self.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled)
-
- self.vm = vm
- self.name = vm.name
- self.qid = vm.qid
- self.update()
-
- def update(self):
- if getattr(self.vm, 'include_in_backups', None):
- self.setText("Yes")
- self.include_in_backups = True
- else:
- self.setText("")
- self.include_in_backups = False
-
- def __lt__(self, other):
- if self.qid == 0:
- return True
- if other.qid == 0:
- return False
- if self.include_in_backups == other.include_in_backups:
- return self.name < other.name
- return self.include_in_backups < other.include_in_backups
-
-
-class VmLastBackupItem(QtGui.QTableWidgetItem):
- def __init__(self, vm):
- super(VmLastBackupItem, self).__init__()
- self.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled)
-
- self.vm = vm
- self.qid = vm.qid
- self.name = vm.name
- self.update()
-
- def update(self):
- self.backup_timestamp = getattr(self.vm, 'backup_timestamp', None)
-
- if self.backup_timestamp:
+ if backup_timestamp:
self.setText(
- str(datetime.datetime.fromtimestamp(self.backup_timestamp)))
+ str(datetime.datetime.fromtimestamp(backup_timestamp)))
else:
self.setText("")
-
- #pylint: disable=too-many-return-statements
- def __lt__(self, other):
- if self.qid == 0:
- return True
- if other.qid == 0:
- return False
- if self.backup_timestamp == other.backup_timestamp:
- return self.name < other.name
- if not self.backup_timestamp:
- return False
- if not other.backup_timestamp:
- return True
- return self.backup_timestamp < other.backup_timestamp
diff --git a/ui/qubemanager.ui b/ui/qubemanager.ui
index 0dea278..d9a097f 100644
--- a/ui/qubemanager.ui
+++ b/ui/qubemanager.ui
@@ -226,7 +226,7 @@
- Backups
+ Include in backups