Skip to content

Commit

Permalink
Add a "show internal" option to Qube Manager
Browse files Browse the repository at this point in the history
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
  • Loading branch information
marmarta committed Mar 14, 2023
1 parent 5ef8bd4 commit 9177c06
Showing 1 changed file with 36 additions and 22 deletions.
58 changes: 36 additions & 22 deletions qubesmanager/qube_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -748,45 +751,52 @@ 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)
self.show_templates.stateChanged.connect(self.invalidate)
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)
action.setData(column)
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
Expand Down Expand Up @@ -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):
Expand Down Expand Up @@ -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)))
Expand Down

0 comments on commit 9177c06

Please sign in to comment.