From 9177c065b95cc869b754e3f3cdd2f44c30db3a23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marta=20Marczykowska-G=C3=B3recka?= Date: Tue, 14 Mar 2023 15:28:56 +0100 Subject: [PATCH] Add a "show internal" option to Qube Manager By default, internal qubes should be hidden. The option is available from View menu. Also some minor reorganization of code, to avoid 'variable not yet defined' errors. fixes QubesOS/qubes-issues#8042 --- qubesmanager/qube_manager.py | 58 ++++++++++++++++++++++-------------- 1 file changed, 36 insertions(+), 22 deletions(-) diff --git a/qubesmanager/qube_manager.py b/qubesmanager/qube_manager.py index 5ecbe55f..826b341e 100644 --- a/qubesmanager/qube_manager.py +++ b/qubesmanager/qube_manager.py @@ -671,12 +671,15 @@ def lessThan(self, left, right): # pylint: disable=too-many-return-statements def filterAcceptsRow(self, sourceRow, sourceParent): - if self.window.show_all.isChecked(): - return super().filterAcceptsRow(sourceRow, sourceParent) - index = self.sourceModel().index(sourceRow, 0, sourceParent) vm = self.sourceModel().data(index, Qt.UserRole) + # if hide internal is true, ignore all other filters + if not self.window.show_internal_action.isChecked() and vm.internal: + return False + if self.window.show_all.isChecked(): + return super().filterAcceptsRow(sourceRow, sourceParent) + if self.window.show_running.isChecked() and \ vm.state['power'] != 'Halted': return super().filterAcceptsRow(sourceRow, sourceParent) @@ -748,16 +751,6 @@ def __init__(self, qt_app, qubes_app, dispatcher, _parent=None): self.fill_cache() self.qubes_model = QubesTableModel(self.qubes_cache) - self.proxy = QubesProxyModel(self) - self.proxy.setSourceModel(self.qubes_model) - self.proxy.setSortRole(Qt.UserRole + 1) - self.proxy.setSortCaseSensitivity(Qt.CaseInsensitive) - self.proxy.setFilterKeyColumn(2) - self.proxy.setFilterCaseSensitivity(Qt.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.show_running.stateChanged.connect(self.invalidate) self.show_halted.stateChanged.connect(self.invalidate) self.show_network.stateChanged.connect(self.invalidate) @@ -765,15 +758,6 @@ def __init__(self, qt_app, qubes_app, dispatcher, _parent=None): self.show_standalone.stateChanged.connect(self.invalidate) self.show_all.stateChanged.connect(self.invalidate) - self.table.setModel(self.proxy) - self.table.setItemDelegateForColumn(3, StateIconDelegate()) - self.table.resizeColumnsToContents() - selection_model = self.table.selectionModel() - selection_model.selectionChanged.connect(self.table_selection_changed) - - self.table.setContextMenuPolicy(Qt.CustomContextMenu) - self.table.customContextMenuRequested.connect(self.open_context_menu) - # Create view menu for col_no, column in enumerate(self.qubes_model.columns_indices): action = self.menu_view.addAction(column) @@ -781,12 +765,38 @@ def __init__(self, qt_app, qubes_app, dispatcher, _parent=None): action.setCheckable(True) action.toggled.connect(partial(self.showhide_column, col_no)) + self.menu_view.addSeparator() + self.show_internal_action = self.menu_view.addAction( + self.tr('Show internal qubes')) + self.show_internal_action.setCheckable(True) + self.show_internal_action.toggled.connect(self.invalidate) + self.menu_view.addSeparator() self.menu_view.addAction(self.action_toolbar) self.menu_view.addAction(self.action_menubar) + self.menu_view.addSeparator() self.menu_view.addAction(self.action_compact_view) + self.proxy = QubesProxyModel(self) + self.proxy.setSourceModel(self.qubes_model) + self.proxy.setSortRole(Qt.UserRole + 1) + self.proxy.setSortCaseSensitivity(Qt.CaseInsensitive) + self.proxy.setFilterKeyColumn(2) + self.proxy.setFilterCaseSensitivity(Qt.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.resizeColumnsToContents() + selection_model = self.table.selectionModel() + selection_model.selectionChanged.connect(self.table_selection_changed) + + self.table.setContextMenuPolicy(Qt.CustomContextMenu) + self.table.customContextMenuRequested.connect(self.open_context_menu) + try: self.load_manager_settings() except Exception as ex: # pylint: disable=broad-except @@ -941,6 +951,8 @@ def save_showing(self): self.show_templates.isChecked()) self.manager_settings.setValue('show/standalone', self.show_standalone.isChecked()) + self.manager_settings.setValue('show/internal', + self.show_internal_action.isChecked()) self.manager_settings.setValue('show/all', self.show_all.isChecked()) def save_sorting(self): @@ -1152,6 +1164,8 @@ def load_manager_settings(self): self.show_all.setChecked(self.manager_settings.value( 'show/all', "true") == "true") + self.show_internal_action.setChecked(self.manager_settings.value( + 'show/internal', "false") == "true") # load last window size self.resize(self.manager_settings.value("window_size", QSize(1100, 600)))