diff --git a/icons/add.png b/icons/add.png
deleted file mode 100644
index 64cc87e1..00000000
Binary files a/icons/add.png and /dev/null differ
diff --git a/icons/add.svg b/icons/add.svg
new file mode 100755
index 00000000..b47b22b7
--- /dev/null
+++ b/icons/add.svg
@@ -0,0 +1,5 @@
+
diff --git a/icons/apps.png b/icons/apps.png
deleted file mode 100644
index a7fd069d..00000000
Binary files a/icons/apps.png and /dev/null differ
diff --git a/icons/apps.svg b/icons/apps.svg
new file mode 100755
index 00000000..fb48e3ea
--- /dev/null
+++ b/icons/apps.svg
@@ -0,0 +1,6 @@
+
diff --git a/icons/appsprefs.png b/icons/appsprefs.png
deleted file mode 100644
index ec797fea..00000000
Binary files a/icons/appsprefs.png and /dev/null differ
diff --git a/icons/appvm.png b/icons/appvm.png
deleted file mode 100644
index cfc473ae..00000000
Binary files a/icons/appvm.png and /dev/null differ
diff --git a/icons/backup.png b/icons/backup.png
deleted file mode 100644
index ccd6909d..00000000
Binary files a/icons/backup.png and /dev/null differ
diff --git a/icons/backup.svg b/icons/backup.svg
new file mode 100755
index 00000000..2f595374
--- /dev/null
+++ b/icons/backup.svg
@@ -0,0 +1,7 @@
+
diff --git a/icons/on-icon/off.png b/icons/blank.png
similarity index 100%
rename from icons/on-icon/off.png
rename to icons/blank.png
diff --git a/icons/blank.svg b/icons/blank.svg
new file mode 100755
index 00000000..125d7c17
--- /dev/null
+++ b/icons/blank.svg
@@ -0,0 +1,2 @@
+
diff --git a/icons/checked.svg b/icons/checked.svg
new file mode 100755
index 00000000..0b0eb227
--- /dev/null
+++ b/icons/checked.svg
@@ -0,0 +1,3 @@
+
diff --git a/icons/checkmark-with-plus.svg b/icons/checkmark-with-plus.svg
index 67a1e7b0..8712fff5 100644
--- a/icons/checkmark-with-plus.svg
+++ b/icons/checkmark-with-plus.svg
@@ -1 +1,167 @@
-
\ No newline at end of file
+
+
+
+
diff --git a/icons/checkmark.svg b/icons/checkmark.svg
old mode 100644
new mode 100755
index f70caccf..acfcf325
--- a/icons/checkmark.svg
+++ b/icons/checkmark.svg
@@ -1 +1,3 @@
-
\ No newline at end of file
+
diff --git a/icons/copy.png b/icons/copy.png
deleted file mode 100644
index fb75010f..00000000
Binary files a/icons/copy.png and /dev/null differ
diff --git a/icons/copy.svg b/icons/copy.svg
new file mode 100644
index 00000000..f3b629c6
--- /dev/null
+++ b/icons/copy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/icons/createvm.png b/icons/createvm.png
deleted file mode 100644
index 2c681b33..00000000
Binary files a/icons/createvm.png and /dev/null differ
diff --git a/icons/dom0.png b/icons/dom0.png
deleted file mode 100644
index 343df65e..00000000
Binary files a/icons/dom0.png and /dev/null differ
diff --git a/icons/edit.png b/icons/edit.png
deleted file mode 100644
index 134c39c4..00000000
Binary files a/icons/edit.png and /dev/null differ
diff --git a/icons/edit.svg b/icons/edit.svg
new file mode 100755
index 00000000..7df5bc99
--- /dev/null
+++ b/icons/edit.svg
@@ -0,0 +1,4 @@
+
diff --git a/icons/eye-off.svg b/icons/eye-off.svg
index 77c54cb4..625d3f7a 100644
--- a/icons/eye-off.svg
+++ b/icons/eye-off.svg
@@ -1 +1,6 @@
-
\ No newline at end of file
+
diff --git a/icons/eye.svg b/icons/eye.svg
index 9cde2437..d6cffeb0 100644
--- a/icons/eye.svg
+++ b/icons/eye.svg
@@ -1 +1,4 @@
-
\ No newline at end of file
+
diff --git a/icons/firewall.svg b/icons/firewall.svg
new file mode 100755
index 00000000..25dccfb7
--- /dev/null
+++ b/icons/firewall.svg
@@ -0,0 +1,10 @@
+
diff --git a/icons/flag-blue.png b/icons/flag-blue.png
deleted file mode 100644
index 20d3e4aa..00000000
Binary files a/icons/flag-blue.png and /dev/null differ
diff --git a/icons/flag-green.png b/icons/flag-green.png
deleted file mode 100644
index 9d307b94..00000000
Binary files a/icons/flag-green.png and /dev/null differ
diff --git a/icons/flag-red.png b/icons/flag-red.png
deleted file mode 100644
index 081b516b..00000000
Binary files a/icons/flag-red.png and /dev/null differ
diff --git a/icons/flag-yellow.png b/icons/flag-yellow.png
deleted file mode 100644
index 7342a390..00000000
Binary files a/icons/flag-yellow.png and /dev/null differ
diff --git a/icons/global-config.svg b/icons/global-config.svg
new file mode 100755
index 00000000..b3774b33
--- /dev/null
+++ b/icons/global-config.svg
@@ -0,0 +1,10 @@
+
diff --git a/icons/global-settings.png b/icons/global-settings.png
deleted file mode 100644
index 36db1948..00000000
Binary files a/icons/global-settings.png and /dev/null differ
diff --git a/icons/home.png b/icons/home.png
deleted file mode 100644
index 3ed201d3..00000000
Binary files a/icons/home.png and /dev/null differ
diff --git a/icons/kbd-layout.png b/icons/kbd-layout.png
deleted file mode 100644
index 8a929eb0..00000000
Binary files a/icons/kbd-layout.png and /dev/null differ
diff --git a/icons/kbd-layout.svg b/icons/kbd-layout.svg
new file mode 100755
index 00000000..cd7e8721
--- /dev/null
+++ b/icons/kbd-layout.svg
@@ -0,0 +1,11 @@
+
diff --git a/icons/kill.png b/icons/kill.png
deleted file mode 100644
index 2c6ee0cc..00000000
Binary files a/icons/kill.png and /dev/null differ
diff --git a/icons/kill.svg b/icons/kill.svg
new file mode 100755
index 00000000..f7d1d65c
--- /dev/null
+++ b/icons/kill.svg
@@ -0,0 +1,5 @@
+
diff --git a/icons/license.txt b/icons/license.txt
new file mode 100644
index 00000000..f9497435
--- /dev/null
+++ b/icons/license.txt
@@ -0,0 +1,23 @@
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+This copyright and license notice covers the images in this directory.
+************************************************************************
+
+Lucide License
+
+ISC License
+
+Copyright (c) for portions of Lucide are held by Cole Bemis 2013-2022 as part
+of Feather (MIT). All other copyright (c) for Lucide are held by Lucide
+Contributors 2022.
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
\ No newline at end of file
diff --git a/icons/log.png b/icons/log.png
deleted file mode 100644
index 7dcc2c9e..00000000
Binary files a/icons/log.png and /dev/null differ
diff --git a/icons/log.svg b/icons/log.svg
new file mode 100755
index 00000000..94e6854e
--- /dev/null
+++ b/icons/log.svg
@@ -0,0 +1,5 @@
+
diff --git a/icons/mic.png b/icons/mic.png
deleted file mode 100644
index ba476fa8..00000000
Binary files a/icons/mic.png and /dev/null differ
diff --git a/icons/mount.png b/icons/mount.png
deleted file mode 100644
index e7d2dfeb..00000000
Binary files a/icons/mount.png and /dev/null differ
diff --git a/icons/netvm.png b/icons/netvm.png
deleted file mode 100644
index 1ebf5ab7..00000000
Binary files a/icons/netvm.png and /dev/null differ
diff --git a/icons/netvm.svg b/icons/netvm.svg
new file mode 100644
index 00000000..43bb5203
--- /dev/null
+++ b/icons/netvm.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/icons/networking.png b/icons/networking.png
deleted file mode 100644
index 406bbbc2..00000000
Binary files a/icons/networking.png and /dev/null differ
diff --git a/icons/obsolete.svg b/icons/obsolete.svg
index 6516b2e7..72daf76b 100644
--- a/icons/obsolete.svg
+++ b/icons/obsolete.svg
@@ -1,6 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/icons/on-icon/on.png b/icons/on-icon/on.png
deleted file mode 100644
index c663429a..00000000
Binary files a/icons/on-icon/on.png and /dev/null differ
diff --git a/icons/outdated.png b/icons/outdated.png
deleted file mode 100644
index 19286777..00000000
Binary files a/icons/outdated.png and /dev/null differ
diff --git a/icons/outdated.svg b/icons/outdated.svg
new file mode 100755
index 00000000..2faf660b
--- /dev/null
+++ b/icons/outdated.svg
@@ -0,0 +1,4 @@
+
diff --git a/icons/paused.png b/icons/paused.png
deleted file mode 100644
index fbdac607..00000000
Binary files a/icons/paused.png and /dev/null differ
diff --git a/icons/paused.svg b/icons/paused.svg
new file mode 100755
index 00000000..fa286525
--- /dev/null
+++ b/icons/paused.svg
@@ -0,0 +1,5 @@
+
diff --git a/icons/pausevm.png b/icons/pausevm.png
deleted file mode 100644
index 1c41abb7..00000000
Binary files a/icons/pausevm.png and /dev/null differ
diff --git a/icons/pencil.png b/icons/pencil.png
deleted file mode 100644
index ad04673a..00000000
Binary files a/icons/pencil.png and /dev/null differ
diff --git a/icons/proxyvm.png b/icons/proxyvm.png
deleted file mode 100644
index f14ca855..00000000
Binary files a/icons/proxyvm.png and /dev/null differ
diff --git a/icons/qubes-global-config.svg b/icons/qubes-global-config.svg
deleted file mode 100644
index d74eb453..00000000
--- a/icons/qubes-global-config.svg
+++ /dev/null
@@ -1,57 +0,0 @@
-
-
diff --git a/icons/readme.txt b/icons/readme.txt
index 4760f699..044ee2e8 100644
--- a/icons/readme.txt
+++ b/icons/readme.txt
@@ -1,12 +1,24 @@
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-This copyright and license notice covers the images in this directory.
-************************************************************************
+Icon Notes
-TITLE: Crystal Project Icons
-AUTHOR: Everaldo Coelho
-SITE: http://www.everaldo.com
-CONTACT: everaldo@everaldo.com
+Most icons are taken from lucide.dev under a MIT license. They are based on
+outlined icons and each icon has a stroke width which can be customized.
+We recommend following stroke weight for different resolutions:
-Copyright (c) 2006-2007 Everaldo Coelho.
+16px = 1.5px stroke
+24px = 2px stroke
+32px = 3px stroke
+48px = 4px stroke
+64px = 6px stroke
-Additionally there are a few images taken from kde4 default icon theme.
+Symbolic icons are modular in color and can be adapted to different semantics
+(success, warning, error for example). We recommend using neutral or gray
+color schemes for the default version on light mode (e.g neutral-700).
+
+Please note that the neutral color palette is true gray while the gray color
+palette has a little tint of blue so it works better with the QubesOS brand
+colors.
+
+Some specific icons are custom based on existing lucide icons, such as the
+lock-pen icon used for the policy editor.
+
+If any further icons are needed, base them on lucide.dev icon set.
diff --git a/icons/remove.png b/icons/remove.png
deleted file mode 100644
index bb948438..00000000
Binary files a/icons/remove.png and /dev/null differ
diff --git a/icons/remove.svg b/icons/remove.svg
new file mode 100755
index 00000000..f2f27464
--- /dev/null
+++ b/icons/remove.svg
@@ -0,0 +1,4 @@
+
diff --git a/icons/removevm.png b/icons/removevm.png
deleted file mode 100644
index 17a3eae3..00000000
Binary files a/icons/removevm.png and /dev/null differ
diff --git a/icons/removevm.svg b/icons/removevm.svg
new file mode 100755
index 00000000..a2effff4
--- /dev/null
+++ b/icons/removevm.svg
@@ -0,0 +1,7 @@
+
diff --git a/icons/repo-refresh.svg b/icons/repo-refresh.svg
index 02298913..a73a9cac 100644
--- a/icons/repo-refresh.svg
+++ b/icons/repo-refresh.svg
@@ -1 +1,6 @@
-
\ No newline at end of file
+
diff --git a/icons/restartvm.png b/icons/restartvm.png
deleted file mode 100644
index 2a84e90c..00000000
Binary files a/icons/restartvm.png and /dev/null differ
diff --git a/icons/restartvm.svg b/icons/restartvm.svg
new file mode 100644
index 00000000..2a781c4c
--- /dev/null
+++ b/icons/restartvm.svg
@@ -0,0 +1,47 @@
+
+
+
+
diff --git a/icons/restore.png b/icons/restore.png
deleted file mode 100644
index df9ae71c..00000000
Binary files a/icons/restore.png and /dev/null differ
diff --git a/icons/restore.svg b/icons/restore.svg
new file mode 100755
index 00000000..58da271e
--- /dev/null
+++ b/icons/restore.svg
@@ -0,0 +1,7 @@
+
diff --git a/icons/resumevm.png b/icons/resumevm.png
deleted file mode 100644
index dbeee2bb..00000000
Binary files a/icons/resumevm.png and /dev/null differ
diff --git a/icons/resumevm.svg b/icons/resumevm.svg
new file mode 100755
index 00000000..f0d63f25
--- /dev/null
+++ b/icons/resumevm.svg
@@ -0,0 +1,4 @@
+
diff --git a/icons/root.png b/icons/root.png
deleted file mode 100644
index f68dec16..00000000
Binary files a/icons/root.png and /dev/null differ
diff --git a/icons/run-command.png b/icons/run-command.png
deleted file mode 100644
index bf90b614..00000000
Binary files a/icons/run-command.png and /dev/null differ
diff --git a/icons/run-command.svg b/icons/run-command.svg
new file mode 100755
index 00000000..8bd5d8ca
--- /dev/null
+++ b/icons/run-command.svg
@@ -0,0 +1,4 @@
+
diff --git a/icons/running.png b/icons/running.png
deleted file mode 100644
index a24f6908..00000000
Binary files a/icons/running.png and /dev/null differ
diff --git a/icons/running.svg b/icons/running.svg
new file mode 100755
index 00000000..4a61e005
--- /dev/null
+++ b/icons/running.svg
@@ -0,0 +1,4 @@
+
diff --git a/icons/settings.png b/icons/settings.png
deleted file mode 100644
index 2f19de4a..00000000
Binary files a/icons/settings.png and /dev/null differ
diff --git a/icons/show-all-running.png b/icons/show-all-running.png
deleted file mode 100644
index cf0a0ffe..00000000
Binary files a/icons/show-all-running.png and /dev/null differ
diff --git a/icons/showcpuload.png b/icons/showcpuload.png
deleted file mode 100644
index 344cda5e..00000000
Binary files a/icons/showcpuload.png and /dev/null differ
diff --git a/icons/shutdownvm.png b/icons/shutdownvm.png
deleted file mode 100644
index 1e415cdf..00000000
Binary files a/icons/shutdownvm.png and /dev/null differ
diff --git a/icons/shutdownvm.svg b/icons/shutdownvm.svg
new file mode 100755
index 00000000..0fb1f338
--- /dev/null
+++ b/icons/shutdownvm.svg
@@ -0,0 +1,4 @@
+
diff --git a/icons/skipped.svg b/icons/skipped.svg
new file mode 100644
index 00000000..199ee5dd
--- /dev/null
+++ b/icons/skipped.svg
@@ -0,0 +1,235 @@
+
+
+
+
diff --git a/icons/some-checked.svg b/icons/some-checked.svg
new file mode 100755
index 00000000..6649a0b7
--- /dev/null
+++ b/icons/some-checked.svg
@@ -0,0 +1,152 @@
+
+
+
+
diff --git a/icons/standalonevm.png b/icons/standalonevm.png
deleted file mode 100644
index e32b59f4..00000000
Binary files a/icons/standalonevm.png and /dev/null differ
diff --git a/icons/storage.svg b/icons/storage.svg
new file mode 100755
index 00000000..03a6ee7b
--- /dev/null
+++ b/icons/storage.svg
@@ -0,0 +1,6 @@
+
diff --git a/icons/storagevm.png b/icons/storagevm.png
deleted file mode 100644
index 6085f18b..00000000
Binary files a/icons/storagevm.png and /dev/null differ
diff --git a/icons/template-switcher.svg b/icons/template-switcher.svg
index 09c84d7a..d8134201 100644
--- a/icons/template-switcher.svg
+++ b/icons/template-switcher.svg
@@ -1 +1,200 @@
-
\ No newline at end of file
+
+
+
+
diff --git a/icons/templatevm.png b/icons/templatevm.png
deleted file mode 100644
index 3cffd5d6..00000000
Binary files a/icons/templatevm.png and /dev/null differ
diff --git a/icons/templatevm.svg b/icons/templatevm.svg
new file mode 100644
index 00000000..771789d7
--- /dev/null
+++ b/icons/templatevm.svg
@@ -0,0 +1,103 @@
+
+
+
+
diff --git a/icons/to-be-outdated.png b/icons/to-be-outdated.png
deleted file mode 100644
index 6a6522cf..00000000
Binary files a/icons/to-be-outdated.png and /dev/null differ
diff --git a/icons/transient.png b/icons/transient.png
deleted file mode 100644
index b6b0c86b..00000000
Binary files a/icons/transient.png and /dev/null differ
diff --git a/icons/transient.svg b/icons/transient.svg
new file mode 100755
index 00000000..05b2fbc7
--- /dev/null
+++ b/icons/transient.svg
@@ -0,0 +1,6 @@
+
diff --git a/icons/update-recommended.png b/icons/update-recommended.png
deleted file mode 100644
index 27acebc8..00000000
Binary files a/icons/update-recommended.png and /dev/null differ
diff --git a/icons/updateable.png b/icons/updateable.png
deleted file mode 100644
index 780714b8..00000000
Binary files a/icons/updateable.png and /dev/null differ
diff --git a/icons/updateable.svg b/icons/updateable.svg
new file mode 100755
index 00000000..a73a9cac
--- /dev/null
+++ b/icons/updateable.svg
@@ -0,0 +1,6 @@
+
diff --git a/icons/vm-settings.svg b/icons/vm-settings.svg
new file mode 100644
index 00000000..cd2cbeeb
--- /dev/null
+++ b/icons/vm-settings.svg
@@ -0,0 +1,15 @@
+
diff --git a/icons/wall.png b/icons/wall.png
deleted file mode 100644
index 59d0118b..00000000
Binary files a/icons/wall.png and /dev/null differ
diff --git a/icons/warning.png b/icons/warning.png
deleted file mode 100644
index 8e913378..00000000
Binary files a/icons/warning.png and /dev/null differ
diff --git a/icons/warning.svg b/icons/warning.svg
new file mode 100755
index 00000000..bc3cd3b6
--- /dev/null
+++ b/icons/warning.svg
@@ -0,0 +1,5 @@
+
diff --git a/qubesmanager/backup.py b/qubesmanager/backup.py
index e4879d01..8629951c 100644
--- a/qubesmanager/backup.py
+++ b/qubesmanager/backup.py
@@ -152,11 +152,11 @@ def show_hide_password(self):
if self.show_passwd_button.isChecked():
self.passphrase_line_edit.setEchoMode(
QtWidgets.QLineEdit.EchoMode.Password)
- self.show_passwd_button.setIcon(QtGui.QIcon(':/eye-off.svg'))
+ self.show_passwd_button.setIcon(QtGui.QIcon(':/eye-off'))
else:
self.passphrase_line_edit.setEchoMode(
QtWidgets.QLineEdit.EchoMode.Normal)
- self.show_passwd_button.setIcon(QtGui.QIcon(':/eye.svg'))
+ self.show_passwd_button.setIcon(QtGui.QIcon(':/eye'))
def save_profile_changed(self):
save_profile = self.save_profile_checkbox.isChecked()
diff --git a/qubesmanager/qube_manager.py b/qubesmanager/qube_manager.py
index e8853437..1255034b 100644
--- a/qubesmanager/qube_manager.py
+++ b/qubesmanager/qube_manager.py
@@ -44,7 +44,7 @@
QStyleOptionViewItem, QMessageBox)
# pylint: disable=import-error
-from PyQt6.QtGui import (QIcon, QPixmap, QRegularExpressionValidator, QFont,
+from PyQt6.QtGui import (QIcon, QRegularExpressionValidator, QFont,
QColor, QShortcut, QKeySequence)
from qubesmanager.about import AboutDialog
@@ -95,35 +95,34 @@ class StateIconDelegate(QStyledItemDelegate):
def __init__(self):
super().__init__()
self.stateIcons = {
- "Running" : QIcon(":/on.png"),
- "Paused" : QIcon(":/paused.png"),
- "Suspended" : QIcon(":/paused.png"),
- "Transient" : QIcon(":/transient.png"),
- "Halting" : QIcon(":/transient.png"),
- "Dying" : QIcon(":/transient.png"),
- "Halted" : QIcon(":/off.png")
+ "Running" : QIcon(":/running"),
+ "Paused" : QIcon(":/paused"),
+ "Suspended" : QIcon(":/paused"),
+ "Transient" : QIcon(":/transient"),
+ "Halting" : QIcon(":/transient"),
+ "Dying" : QIcon(":/transient"),
+ "Halted" : QIcon(":/blank")
}
self.outdatedIcons = {
- "update" : QIcon(":/update-recommended.png"),
- "outdated" : QIcon(":/outdated.png"),
- "to-be-outdated" : QIcon(":/to-be-outdated.png"),
- "eol": QIcon(':/warning.png'),
- "skipped": QIcon(':/warning.png')
+ "update" : QIcon(":/updateable"),
+ "outdated" : QIcon(":/outdated"),
+ "to-be-outdated" : QIcon(":/outdated"),
+ "eol": QIcon(':/warning'),
+ "skipped": QIcon(':/skipped')
}
self.outdatedTooltips = {
- "update" : self.tr("Updates pending!"),
+ "update" : self.tr("Updates available"),
"outdated" : self.tr(
- "The qube must be restarted for its filesystem to reflect"
- " the template's recent committed changes."),
+ "The qube must be restarted for recent changes in "
+ "template to take effect"),
"to-be-outdated" : self.tr(
- "The Template must be stopped before changes from its "
- "current session can be picked up by this qube."),
+ "The template must be halted for recent changes to take "
+ "effect"),
"eol": self.tr(
"This qube is based on a distribution that is no longer "
"supported\nInstall new template with Template Manager"),
"skipped": self.tr(
- "This qube is skipped from updates!\n"
- "This is an advanced feature. Use at your own risk")
+ "This qube is excluded from updates")
}
def sizeHint(self, option, index):
@@ -397,7 +396,6 @@ def __init__(self, qubes_cache):
self.klass_pixmap = {}
self.label_pixmap = {}
self.columns_indices = [
- "Type",
"Label",
"Name",
"State",
@@ -433,8 +431,6 @@ def data(self, index, role):
vm = self.qubes_cache.get_vm(row)
if role == Qt.ItemDataRole.DisplayRole:
- if col in [0, 1]:
- return None
if col_name == "Name":
return vm.name
if col_name == "State":
@@ -459,20 +455,8 @@ def data(self, index, role):
return "Yes" if vm.dvm_template else ""
if col_name == "Virt Mode":
return vm.virt_mode
+ return None
if role == Qt.ItemDataRole.DecorationRole:
- if col_name == "Type":
- try:
- return self.klass_pixmap[vm.klass]
- except KeyError:
- pixmap = QPixmap()
- icon_name = ":/"+vm.klass.lower()+".png"
- icon_name = icon_name.replace("adminvm", "dom0")
- icon_name = icon_name.replace("dispvm", "appvm")
- pixmap.load(icon_name)
- self.klass_pixmap[vm.klass] = pixmap.scaled(icon_size)
- return self.klass_pixmap[vm.klass]
- except exc.QubesDaemonAccessError:
- return None
if col_name == "Label":
try:
return self.label_pixmap[vm.icon]
@@ -501,8 +485,6 @@ def data(self, index, role):
if role == Qt.ItemDataRole.UserRole + 1:
if vm.klass == 'AdminVM':
return ""
- if col_name == "Type":
- return vm.klass
if col_name == "Label":
vmtype, vmcolor = vm.icon.split("-", 1)
try:
@@ -532,7 +514,7 @@ def data(self, index, role):
# pylint: disable=invalid-name
def headerData(self, col, orientation, role):
- if col < 2:
+ if col < 1:
return None
if (orientation == Qt.Orientation.Horizontal and role ==
Qt.ItemDataRole.DisplayRole):
@@ -830,14 +812,17 @@ def __init__(self, qt_app, qubes_app, dispatcher, _parent=None):
self.proxy.setSourceModel(self.qubes_model)
self.proxy.setSortRole(Qt.ItemDataRole.UserRole + 1)
self.proxy.setSortCaseSensitivity(Qt.CaseSensitivity.CaseInsensitive)
- self.proxy.setFilterKeyColumn(2)
+ self.proxy.setFilterKeyColumn(
+ self.qubes_model.columns_indices.index("Name"))
self.proxy.setFilterCaseSensitivity(Qt.CaseSensitivity.CaseInsensitive)
self.proxy.layoutChanged.connect(self.save_sorting)
self.proxy.layoutChanged.connect(self.update_template_menu)
self.proxy.layoutChanged.connect(self.update_network_menu)
self.table.setModel(self.proxy)
- self.table.setItemDelegateForColumn(3, StateIconDelegate())
+ self.table.setItemDelegateForColumn(
+ self.qubes_model.columns_indices.index("State"),
+ StateIconDelegate())
self.table.resizeColumnsToContents()
selection_model = self.table.selectionModel()
selection_model.selectionChanged.connect(self.table_selection_changed)
@@ -891,6 +876,10 @@ def __init__(self, qt_app, qubes_app, dispatcher, _parent=None):
self.on_domain_updates_available)
dispatcher.add_handler('domain-feature-delete:updates-available',
self.on_domain_updates_available)
+ dispatcher.add_handler('domain-feature-set:skip-update',
+ self.on_domain_updates_available)
+ dispatcher.add_handler('domain-feature-delete:skip-update',
+ self.on_domain_updates_available)
self.installEventFilter(self)
@@ -1035,7 +1024,7 @@ def save_showing(self):
def save_sorting(self):
self.manager_settings.setValue('view/sort_column',
- self.proxy.sortColumn())
+ self.qubes_model.columns_indices[self.proxy.sortColumn()])
self.manager_settings.setValue('view/sort_order',
self.proxy.sortOrder())
@@ -1218,8 +1207,14 @@ def load_manager_settings(self):
self.showhide_column(col_no, visible == "true")
# Restore sorting
- sort_column = int(self.manager_settings.value("view/sort_column",
- defaultValue=2))
+ sort_column: str = self.manager_settings.value("view/sort_column",
+ defaultValue="Name")
+ # Remove this when Qubes 4.3 reaches EOL, this is a conversion from
+ # number-based approach to a name-based approach
+ if sort_column.isnumeric():
+ col_no = int(sort_column)
+ col_no = max(0, col_no - 1) # removal of confusing Type column
+ sort_column = self.qubes_model.columns_indices[col_no]
order = self.manager_settings.value("view/sort_order",
defaultValue=Qt.SortOrder.AscendingOrder)
@@ -1228,10 +1223,11 @@ def load_manager_settings(self):
order = int(order)
order = Qt.SortOrder(order)
- if not sort_column: # Default sort by name
- self.table.sortByColumn(2, Qt.SortOrder.AscendingOrder)
- else:
- self.table.sortByColumn(sort_column, order)
+ if not sort_column:
+ sort_column = "Name"
+ sort_column_no = self.qubes_model.columns_indices.index(sort_column)
+
+ self.table.sortByColumn(sort_column_no, order)
if self.manager_settings.value("view/menubar_visible") == 'false':
self.action_menubar.setChecked(False)
@@ -1370,9 +1366,9 @@ def update_template_menu(self):
for entry in self.template_menu.actions():
if entry.data() == vm.template:
if len(vms) == 1:
- entry.setIcon(QIcon(":/on.png"))
+ entry.setIcon(QIcon(":/checked"))
else:
- entry.setIcon(QIcon(":/transient.png"))
+ entry.setIcon(QIcon(":/some-checked"))
def update_network_menu(self):
if not self.network_menu.isEnabled():
@@ -1382,9 +1378,9 @@ def update_network_menu(self):
entry.setIcon(QIcon())
if len(self.get_selected_vms()) == 1:
- icon = QIcon(":/on.png")
+ icon = QIcon(":/checked")
else:
- icon = QIcon(":/transient.png")
+ icon = QIcon(":/some-checked")
for vm in self.get_selected_vms():
if vm.netvm == "n/a":
diff --git a/qubesmanager/qvm_template_gui.py b/qubesmanager/qvm_template_gui.py
index ac806229..f28385c1 100644
--- a/qubesmanager/qvm_template_gui.py
+++ b/qubesmanager/qvm_template_gui.py
@@ -259,18 +259,18 @@ def status(self, role):
return tr("This template is obsolete and no longer receives "
"updates")
if role == PyQt6.QtCore.Qt.ItemDataRole.DecorationRole:
- return ":/obsolete.svg"
+ return ":/obsolete"
if self.template_status == 'extra':
if role == PyQt6.QtCore.Qt.ItemDataRole.ToolTipRole:
return tr("This template is a local template, not installed "
"from a repository")
if role == PyQt6.QtCore.Qt.ItemDataRole.DecorationRole:
- return ':/checkmark-with-plus.svg'
+ return ':/checkmark-with-plus'
if self.template_status in ['installed', 'upgradable']:
if role == PyQt6.QtCore.Qt.ItemDataRole.ToolTipRole:
return tr("This template is installed")
if role == PyQt6.QtCore.Qt.ItemDataRole.DecorationRole:
- return ':/checkmark.svg'
+ return ':/checkmark'
return None
def version(self):
diff --git a/qubesmanager/restore.py b/qubesmanager/restore.py
index 1b175f29..7c5c520f 100644
--- a/qubesmanager/restore.py
+++ b/qubesmanager/restore.py
@@ -141,11 +141,11 @@ def show_hide_password(self):
if self.passwd_show_button.isChecked():
self.passphrase_line_edit.setEchoMode(
QtWidgets.QLineEdit.EchoMode.Password)
- self.passwd_show_button.setIcon(QtGui.QIcon(':/eye-off.svg'))
+ self.passwd_show_button.setIcon(QtGui.QIcon(':/eye-off'))
else:
self.passphrase_line_edit.setEchoMode(
QtWidgets.QLineEdit.EchoMode.Normal)
- self.passwd_show_button.setIcon(QtGui.QIcon(':/eye.svg'))
+ self.passwd_show_button.setIcon(QtGui.QIcon(':/eye'))
def setup_application(self):
self.qt_app.setApplicationName(self.tr("Qubes Restore VMs"))
diff --git a/qubesmanager/tests/test_qube_manager.py b/qubesmanager/tests/test_qube_manager.py
index 58bcb587..d8caca0c 100644
--- a/qubesmanager/tests/test_qube_manager.py
+++ b/qubesmanager/tests/test_qube_manager.py
@@ -142,14 +142,13 @@ def _check_sorting(qm, column_name):
last_vm = vm_name
-def _is_icon(icon, icon_name: str = 'on'):
+def _is_icon(icon, icon_name: str = 'checked'):
"""This is a helper method, returning True if provided icon is the same
- as QIcon for the on.png file, False if it is empty icon, and ValueError
+ as QIcon for the checked icon, False if it is empty icon, and ValueError
if some other item was found"""
- ref_icon = QIcon(f":/{icon_name}.png").pixmap(64).toImage()
+ ref_icon = QIcon(f":/{icon_name}").pixmap(64).toImage()
off_icon = QIcon().pixmap(64).toImage()
my_icon = icon.pixmap(64).toImage()
-
if my_icon == ref_icon:
return True
if my_icon == off_icon:
@@ -752,9 +751,9 @@ async def test_300_netvm_menu(mock_question, qubes_manager):
for action in qubes_manager.network_menu.actions():
current_vms.add(action.text())
if action.text() == current_netvm:
- assert _is_icon(action.icon(), 'on')
+ assert _is_icon(action.icon(), 'checked')
else:
- assert not _is_icon(action.icon(), 'on')
+ assert not _is_icon(action.icon())
assert current_vms == expected_vms
@@ -805,7 +804,7 @@ async def test_300_netvm_menu(mock_question, qubes_manager):
for action in qubes_manager.network_menu.actions():
if action.text() == current_netvm:
- assert _is_icon(action.icon())
+ assert _is_icon(action.icon(), 'checked')
else:
assert not _is_icon(action.icon())
@@ -882,9 +881,9 @@ def test_303_netvm_menu_multiple(mock_question, qubes_manager):
for action in qubes_manager.network_menu.actions():
if action.text() == 'sys-firewall':
- assert _is_icon(action.icon(), 'transient')
+ assert _is_icon(action.icon(), 'some-checked')
elif action.text() == 'None':
- assert _is_icon(action.icon(), 'transient')
+ assert _is_icon(action.icon(), 'some-checked')
else:
assert not _is_icon(action.icon())
@@ -932,9 +931,9 @@ async def test_310_template_menu(mock_question, qubes_manager):
for action in qubes_manager.template_menu.actions():
current_templates.add(action.text())
if action.text() == vm_template:
- assert _is_icon(action.icon(), 'on')
+ assert _is_icon(action.icon(), 'checked')
else:
- assert not _is_icon(action.icon(), 'on')
+ assert not _is_icon(action.icon(), 'some-checked')
assert current_templates == expected_templates
diff --git a/resources.qrc b/resources.qrc
index 86809b1d..9c4d87d2 100644
--- a/resources.qrc
+++ b/resources.qrc
@@ -1,60 +1,43 @@
- icons/checkmark-with-plus.svg
- icons/checkmark.svg
+ icons/add.svg
+ icons/apps.svg
+ icons/backup.svg
+ icons/blank.svg
+ icons/checked.svg
+ icons/checkmark.svg
+ icons/checkmark-with-plus.svg
+ icons/copy.svg
+ icons/edit.svg
+ icons/eye.svg
+ icons/eye-off.svg
+ icons/firewall.svg
+ icons/global-config.svg
+ icons/kbd-layout.svg
+ icons/kill.svg
+ icons/log.svg
+ icons/netvm.svg
icons/obsolete.svg
- icons/eye.svg
- icons/template-switcher.svg
+ icons/outdated.svg
+ icons/paused.svg
+ icons/paused.svg
+ icons/remove.svg
+ icons/removevm.svg
icons/repo-refresh.svg
- icons/eye-off.svg
- icons/apps.png
- icons/settings.png
- icons/wall.png
- icons/restore.png
- icons/backup.png
- icons/global-settings.png
- icons/on-icon/off.png
- icons/outdated.png
- icons/to-be-outdated.png
- icons/update-recommended.png
- icons/show-all-running.png
- icons/mount.png
- icons/warning.png
- icons/log.png
- icons/run-command.png
- icons/kbd-layout.png
- icons/copy.png
- icons/pencil.png
- icons/edit.png
- icons/add.png
- icons/flag-blue.png
- icons/running.png
- icons/paused.png
- icons/transient.png
- icons/flag-green.png
- icons/flag-red.png
- icons/flag-yellow.png
- icons/remove.png
- icons/appsprefs.png
- icons/appvm.png
- icons/netvm.png
- icons/proxyvm.png
- icons/standalonevm.png
- icons/networking.png
- icons/dom0.png
- icons/storagevm.png
- icons/templatevm.png
- icons/updateable.png
- icons/home.png
- icons/root.png
- icons/createvm.png
- icons/removevm.png
- icons/shutdownvm.png
- icons/kill.png
- icons/resumevm.png
- icons/pausevm.png
- icons/showcpuload.png
- icons/mic.png
- icons/restartvm.png
+ icons/restartvm.svg
+ icons/restore.svg
+ icons/resumevm.svg
+ icons/run-command.svg
+ icons/running.svg
+ icons/shutdownvm.svg
+ icons/skipped.svg
+ icons/some-checked.svg
+ icons/storage.svg
+ icons/template-switcher.svg
+ icons/templatevm.svg
+ icons/transient.svg
+ icons/updateable.svg
+ icons/vm-settings.svg
+ icons/warning.svg
diff --git a/ui/logdlg.ui b/ui/logdlg.ui
index 20375129..adb19964 100644
--- a/ui/logdlg.ui
+++ b/ui/logdlg.ui
@@ -60,7 +60,7 @@
- :/copy.png:/copy.png
+ :/copy:/copy
diff --git a/ui/qubemanager.ui b/ui/qubemanager.ui
index 385caa57..2ca9d65f 100644
--- a/ui/qubemanager.ui
+++ b/ui/qubemanager.ui
@@ -17,7 +17,7 @@
- Qt::DefaultContextMenu
+ Qt::ContextMenuPolicy::DefaultContextMenu
Qube Manager
@@ -49,7 +49,7 @@
- QLayout::SetDefaultConstraint
+ QLayout::SizeConstraint::SetDefaultConstraint
-
@@ -72,7 +72,7 @@
- Qt::CustomContextMenu
+ Qt::ContextMenuPolicy::CustomContextMenu
false
@@ -81,25 +81,25 @@
0
- Qt::ScrollBarAsNeeded
+ Qt::ScrollBarPolicy::ScrollBarAsNeeded
- Qt::ScrollBarAsNeeded
+ Qt::ScrollBarPolicy::ScrollBarAsNeeded
true
- QAbstractItemView::ExtendedSelection
+ QAbstractItemView::SelectionMode::ExtendedSelection
- QAbstractItemView::SelectRows
+ QAbstractItemView::SelectionBehavior::SelectRows
false
- Qt::NoPen
+ Qt::PenStyle::NoPen
true
@@ -116,130 +116,6 @@
false
-
-
- Nowy wiersz
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Name
-
-
- The name of each qube
-
-
-
-
- State
-
-
- The running state and update status of each qube
-
-
-
-
- Template
-
-
- The template on which each qube is based
-
-
-
-
- Net qube
-
-
- The qube that provides network access to each qube
-
-
-
-
- Disk
-usage
-
-
- The amount of disk space used by each qube
-
-
-
-
- Internal
-
-
- Whether each qube is internal to the operation of the system and not intended for normal use by end users
-
-
-
-
- IP Address
-
-
- The internal IP address assigned to each qube
-
-
-
-
- Include
-in backups
-
-
- Whether each qube is included in backups by default
-
-
-
-
- Last backup
-
-
- Timestamp indicating the last time at which each qube was backed up
-
-
-
-
- Default disposable
-template
-
-
- The disposable template used by default when launching disposables from each qube
-
-
-
-
- Disposable
-template
-
-
- Whether each qube is itself a disposable template
-
-
-
-
- Virtualization mode
-
-
- The hypervisor mode used when running each qube as a virtual machine
-
-
@@ -318,15 +194,15 @@ template
-
+
+ Show AppVMs and Standalone VMs, hide disposable and service VMs
+
User qubes
true
-
- Show AppVMs and Standalone VMs, hide disposable and service VMs
-
-
@@ -342,7 +218,7 @@ template
-
- Qt::Horizontal
+ Qt::Orientation::Horizontal
@@ -362,11 +238,11 @@ template
0
0
1100
- 24
+ 22
- Qt::CustomContextMenu
+ Qt::ContextMenuPolicy::CustomContextMenu
@@ -447,16 +323,16 @@ template
- Qt::CustomContextMenu
+ Qt::ContextMenuPolicy::CustomContextMenu
toolBar
- Qt::BottomToolBarArea|Qt::TopToolBarArea
+ Qt::ToolBarArea::BottomToolBarArea|Qt::ToolBarArea::TopToolBarArea
- Qt::ToolButtonTextUnderIcon
+ Qt::ToolButtonStyle::ToolButtonTextUnderIcon
false
@@ -489,18 +365,17 @@ template
-
- :/createvm.png:/createvm.png
+
&New qube
-
- Ctrl+N
-
Create a new qube
+
+ Ctrl+N
+
@@ -508,7 +383,7 @@ template
- :/removevm.png:/removevm.png
+ :/removevm:/removevm
&Delete qube
@@ -523,7 +398,7 @@ template
- :/resumevm.png:/resumevm.png
+ :/resumevm:/resumevm
Start/Resu&me
@@ -538,7 +413,7 @@ template
- :/pausevm.png:/pausevm.png
+ :/pausevm:/pausevm
Emergency &pause
@@ -553,7 +428,7 @@ template
- :/shutdownvm.png:/shutdownvm.png
+ :/shutdownvm:/shutdownvm
&Shutdown
@@ -568,7 +443,7 @@ template
- :/restartvm.png:/restartvm.png
+ :/restartvm:/restartvm
Restar&t
@@ -583,7 +458,7 @@ template
- :/apps.png:/apps.png
+ :/apps:/apps
App s&hortcuts
@@ -598,7 +473,7 @@ template
- :/updateable.png:/updateable.png
+ :/updateable:/updateable
&Update
@@ -610,7 +485,7 @@ template
- :/firewall.png:/firewall.png
+ :/firewall:/firewall
Edit &firewall
@@ -619,21 +494,6 @@ template
Edit qube firewall rules
-
-
- true
-
-
-
- :/showcpuload.png:/showcpuload.png
-
-
- Show graphs
-
-
- Show graphs
-
-
Options
@@ -669,7 +529,7 @@ template
- :/settings.png:/settings.png
+ :/vm-settings:/vm-settings
S&ettings
@@ -681,7 +541,7 @@ template
- :/restore.png:/restore.png
+ :/restore:/restore
&Restore
@@ -693,7 +553,7 @@ template
- :/backup.png:/backup.png
+ :/backup:/backup
&Backup
@@ -705,7 +565,7 @@ template
- :/global-settings.png:/global-settings.png
+ :/global-config:/global-config
&Global config
@@ -714,7 +574,7 @@ template
- :/networking.png:/networking.png
+ :/networking:/networking
&Qubes network
@@ -737,7 +597,7 @@ template
- :/killvm.png:/killvm.png
+ :/killvm:/killvm
&Kill
@@ -749,7 +609,7 @@ template
- :/kbd-layout.png:/kbd-layout.png
+ :/kbd-layout:/kbd-layout
Keyboard la&yout
@@ -841,7 +701,7 @@ template
- :/run-command.png:/run-command.png
+ :/run-command:/run-command
&Run command in qube
@@ -856,7 +716,7 @@ template
- :/templatevm.png:/templatevm.png
+ :/copy:/copy
&Clone qube
@@ -883,10 +743,6 @@ template
false
-
-
- :/resumevm.png:/resumevm.png
-
Start qube for Qubes Windows Tools installation
@@ -993,8 +849,8 @@ template
- :/log.png
- :/log.png:/log.png
+ :/log
+ :/log:/log
Open console in qube
@@ -1006,7 +862,7 @@ template
- :/log.png:/log.png
+ :/log:/log
Logs
diff --git a/ui/settingsdlg.ui b/ui/settingsdlg.ui
index 1a5285dd..b666adef 100644
--- a/ui/settingsdlg.ui
+++ b/ui/settingsdlg.ui
@@ -15,7 +15,7 @@
- :/root.png:/root.png
+ :/vm-settings:/vm-settings
-
@@ -354,7 +354,7 @@ border-width: 1px;
- :/warning.png
+ :/warning
@@ -377,7 +377,7 @@ border-width: 1px;
- :/warning.png
+ :/warning
@@ -1137,7 +1137,7 @@ The qube must be running to disable seamless mode. This setting is not persisten
- :/firewall.png:/firewall.png
+ :/firewall:/firewall
Firewall rules
@@ -1423,7 +1423,7 @@ The qube must be running to disable seamless mode. This setting is not persisten
- :/add.png:/add.png
+ :/add:/add
@@ -1440,7 +1440,7 @@ The qube must be running to disable seamless mode. This setting is not persisten
- :/pencil.png:/pencil.png
+ :/edit:/edit
@@ -1460,7 +1460,7 @@ The qube must be running to disable seamless mode. This setting is not persisten
- :/remove.png:/remove.png
+ :/remove:/remove
@@ -1570,7 +1570,7 @@ The qube must be running to disable seamless mode. This setting is not persisten
- :/storagevm.png:/storagevm.png
+ :/storage:/storage
Devices
@@ -1637,7 +1637,7 @@ The qube must be running to disable seamless mode. This setting is not persisten
- :/apps.png:/apps.png
+ :/apps:/apps
Applications
@@ -1732,7 +1732,7 @@ The qube must be running to disable seamless mode. This setting is not persisten
- :/add.png:/add.png
+ :/add:/add
@@ -1751,7 +1751,7 @@ The qube must be running to disable seamless mode. This setting is not persisten
- :/remove.png:/remove.png
+ :/remove:/remove