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)))