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 @@ -394,7 +270,7 @@ template - :/templatevm.png:/templatevm.png + :/templatevm:/templatevm @@ -403,7 +279,7 @@ template - :/netvm.png:/netvm.png + :/networking:/networking @@ -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