From 4aef256c8921cef93a9860b6a9a10e2cba0ed6da Mon Sep 17 00:00:00 2001 From: Vinicius Moreira Date: Tue, 29 Mar 2022 12:15:32 -0300 Subject: [PATCH] [view] improvement: only displaying the 'Installed' filter when installed packages are available on the table --- CHANGELOG.md | 3 +++ bauh/view/qt/commons.py | 7 ++++++- bauh/view/qt/window.py | 31 +++++++++++++++++++++++++++---- 3 files changed, 36 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 143cdc71..771c1c00 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Snap - allowing the actions output locale to be decided by the Snap client +- UI + - only displaying the "Installed" filter when installed packages are available on the table + ### Fixes - Arch - regression: not displaying ignored updates diff --git a/bauh/view/qt/commons.py b/bauh/view/qt/commons.py index 8ba0a221..e5384a13 100644 --- a/bauh/view/qt/commons.py +++ b/bauh/view/qt/commons.py @@ -13,6 +13,7 @@ def new_pkgs_info() -> dict: 'napp_updates': 0, 'pkgs_displayed': [], 'not_installed': 0, + 'installed': 0, 'categories': set(), 'pkgs': []} # total packages @@ -41,7 +42,11 @@ def update_info(pkgv: PackageView, pkgs_info: dict): pkgs_info['categories'].add(cat) pkgs_info['pkgs'].append(pkgv) - pkgs_info['not_installed'] += 1 if not pkgv.model.installed else 0 + + if pkgv.model.installed: + pkgs_info['installed'] += 1 + else: + pkgs_info['not_installed'] += 1 def apply_filters(pkg: PackageView, filters: dict, info: dict, limit: bool = True): diff --git a/bauh/view/qt/window.py b/bauh/view/qt/window.py index 7141760e..6cf37bf3 100755 --- a/bauh/view/qt/window.py +++ b/bauh/view/qt/window.py @@ -469,7 +469,7 @@ class ManageWindow(QWidget): *common_filters) self.comp_manager.register_group(GROUP_UPPER_BAR, False, - CHECK_APPS, CHECK_UPDATES, COMBO_CATEGORIES, COMBO_TYPES, INP_NAME, + CHECK_APPS, CHECK_UPDATES, CHECK_INSTALLED, COMBO_CATEGORIES, COMBO_TYPES, INP_NAME, BT_INSTALLED, BT_SUGGESTIONS, BT_REFRESH, BT_UPGRADE) self.comp_manager.register_group(GROUP_LOWER_BTS, False, BT_SUGGESTIONS, BT_THEMES, BT_CUSTOM_ACTIONS, BT_SETTINGS, BT_ABOUT) @@ -805,6 +805,7 @@ class ManageWindow(QWidget): self.update_custom_actions() self._show_console_checkbox_if_output() + self._update_installed_filter() self.begin_apply_filters() notify_tray() else: @@ -932,9 +933,6 @@ class ManageWindow(QWidget): pkgs_info = commons.new_pkgs_info() filters = self._gen_filters(ignore_updates=ignore_updates) - if not keep_filters: - self._change_checkbox(self.check_installed, False, 'filter_installed', trigger=False) - if new_pkgs is not None: old_installed = None @@ -988,6 +986,9 @@ class ManageWindow(QWidget): self.pkgs_installed = pkgs_info['pkgs'] self.pkgs = pkgs_info['pkgs_displayed'] + self._update_installed_filter(installed_available=pkgs_info['installed'] > 0, + keep_state=keep_filters, + hide=as_installed) self._update_table(pkgs_info=pkgs_info) if new_pkgs: @@ -1007,6 +1008,27 @@ class ManageWindow(QWidget): return True + def _update_installed_filter(self, keep_state: bool = True, hide: bool = False, installed_available: Optional[bool] = None): + if installed_available is not None: + has_installed = installed_available + elif self.pkgs_available == self.pkgs_installed: # it means the "installed" view is loaded + has_installed = False + else: + has_installed = False + if self.pkgs_available: + for p in self.pkgs_available: + if p.model.installed: + has_installed = True + break + + if not keep_state or not has_installed: + self._change_checkbox(self.check_installed, False, 'filter_installed', trigger=False) + + if hide: + self.comp_manager.set_component_visible(CHECK_INSTALLED, False) + else: + self.comp_manager.set_component_visible(CHECK_INSTALLED, has_installed) + def _apply_filters(self, pkgs_info: dict, ignore_updates: bool): pkgs_info['pkgs_displayed'] = [] filters = self._gen_filters(ignore_updates=ignore_updates) @@ -1438,6 +1460,7 @@ class ManageWindow(QWidget): self.pkgs_installed.insert(idx, PackageView(model, self.i18n)) self.update_custom_actions() + self._update_installed_filter(installed_available=True, keep_state=True) self.table_apps.change_headers_policy(policy=QHeaderView.Stretch, maximized=self._maximized) self.table_apps.change_headers_policy(policy=QHeaderView.ResizeToContents, maximized=self._maximized) self._resize(accept_lower_width=False)