diff --git a/bauh/view/qt/commons.py b/bauh/view/qt/commons.py index a78eaa1d..6ba6f90b 100644 --- a/bauh/view/qt/commons.py +++ b/bauh/view/qt/commons.py @@ -10,6 +10,7 @@ def new_pkgs_info() -> dict: 'napp_updates': 0, 'pkgs_displayed': [], 'not_installed': 0, + 'categories': set(), 'pkgs': []} # total packages @@ -29,6 +30,9 @@ def update_info(pkgv: PackageView, pkgs_info: dict): pkgs_info['updates'] += 1 + if pkgv.model.categories: + pkgs_info['categories'].update([s.lower() for s in pkgv.model.categories]) + pkgs_info['pkgs'].append(pkgv) pkgs_info['not_installed'] += 1 if not pkgv.model.installed else 0 @@ -39,6 +43,9 @@ def apply_filters(pkgv: PackageView, filters: dict, info: dict): if not hidden and filters['type'] is not None and filters['type'] != 'any': hidden = pkgv.model.get_type() != filters['type'] + if not hidden and filters['category'] is not None and filters['category'] != 'any': + hidden = not pkgv.model.categories or not [c for c in pkgv.model.categories if c.lower() == filters['category']] + if not hidden and filters['updates']: hidden = not pkgv.model.update diff --git a/bauh/view/qt/window.py b/bauh/view/qt/window.py index a88cec63..1d54bf41 100755 --- a/bauh/view/qt/window.py +++ b/bauh/view/qt/window.py @@ -136,6 +136,16 @@ class ManageWindow(QWidget): self.combo_filter_type.addItem(load_icon(resource.get_path('img/logo.svg'), 14), self.i18n[self.any_type_filter].capitalize(), self.any_type_filter) self.ref_combo_filter_type = self.toolbar.addWidget(self.combo_filter_type) + self.any_category_filter = 'any' + self.combo_categories = QComboBox() + self.combo_categories.setStyleSheet('QLineEdit { height: 2px}') + self.combo_categories.setEditable(True) + self.combo_categories.lineEdit().setReadOnly(True) + self.combo_categories.lineEdit().setAlignment(Qt.AlignCenter) + self.combo_categories.activated.connect(self._handle_category_filter) + self.combo_categories.addItem('--{}--'.format(self.i18n['category'].capitalize()), self.any_category_filter) + self.ref_combo_categories = self.toolbar.addWidget(self.combo_categories) + self.input_name_filter = InputFilter(self.apply_filters_async) self.input_name_filter.setMaxLength(10) self.input_name_filter.setPlaceholderText(self.i18n['manage_window.name_filter.placeholder'] + '...') @@ -263,6 +273,7 @@ class ManageWindow(QWidget): self.filter_only_apps = True self.type_filter = self.any_type_filter + self.category_filter = self.any_category_filter self.filter_updates = False self._maximized = False self.progress_controll_enabled = True @@ -376,6 +387,10 @@ class ManageWindow(QWidget): self.type_filter = self.combo_filter_type.itemData(idx) self.apply_filters_async() + def _handle_category_filter(self, idx: int): + self.category_filter = self.combo_categories.itemData(idx) + self.apply_filters_async() + def _notify_model_data_change(self): self.table_apps.fill_async_data() @@ -557,6 +572,7 @@ class ManageWindow(QWidget): return { 'only_apps': self.filter_only_apps, 'type': self.type_filter, + 'category': self.category_filter, 'updates': False if ignore_updates else self.filter_updates, 'name': self.input_name_filter.get_text().lower() if self.input_name_filter.get_text() else None, 'display_limit': self.display_limit if updates <= 0 else None @@ -617,6 +633,7 @@ class ManageWindow(QWidget): self.ref_input_name_filter.setVisible(True) self._update_type_filters(pkgs_info['available_types']) + self._update_categories(pkgs_info['categories']) self._update_table(pkgs_info=pkgs_info) @@ -660,6 +677,27 @@ class ManageWindow(QWidget): else: self.ref_combo_filter_type.setVisible(False) + def _update_categories(self, categories: Set[str] = None): + + if categories is None: + self.ref_combo_categories.setVisible(self.combo_categories.count() > 1) + else: + self.category_filter = self.any_category_filter + + if categories and len(categories) > 1: + if self.combo_categories.count() > 1: + for _ in range(self.combo_categories.count() - 1): + self.combo_categories.removeItem(1) + + for c in categories: + i18n_cat = self.i18n.get(c) + cat_label = i18n_cat if i18n_cat else c + self.combo_categories.addItem(cat_label.capitalize(), c) + + self.ref_combo_categories.setVisible(True) + else: + self.ref_combo_categories.setVisible(False) + def resize_and_center(self, accept_lower_width: bool = True): if self.pkgs: new_width = reduce(operator.add, [self.table_apps.columnWidth(i) for i in range(self.table_apps.columnCount())]) @@ -758,6 +796,7 @@ class ManageWindow(QWidget): if clear_filters: self._update_type_filters({}) + self._update_categories(set()) else: self.combo_filter_type.setEnabled(False) @@ -788,6 +827,7 @@ class ManageWindow(QWidget): self.ref_input_name_filter.setVisible(True) self.update_bt_upgrade() self._update_type_filters() + self._update_categories() if self.ref_bt_installed.isVisible(): self.ref_bt_installed.setEnabled(True) diff --git a/bauh/view/resources/locale/en b/bauh/view/resources/locale/en index 1bc605e9..4357969c 100644 --- a/bauh/view/resources/locale/en +++ b/bauh/view/resources/locale/en @@ -122,6 +122,7 @@ console.install_logs.path=Installation logs can be found at {} author=author source=source size=size +category=category categories=categories summary=summary popup.screenshots.no_screenshot.body=it was not possible to retrieve {} screenshots \ No newline at end of file diff --git a/bauh/view/resources/locale/es b/bauh/view/resources/locale/es index e109b7bb..d3ccecbe 100644 --- a/bauh/view/resources/locale/es +++ b/bauh/view/resources/locale/es @@ -122,8 +122,14 @@ console.install_logs.path=Los registros de instalación se pueden encontrar en { author=autor source=origen size=tamaño +category=categoría categories=categorías summary=sumario manage_window.status.screenshots=Obteniendo imágenes de {} action.screenshots.tooltip=Haga clic aquí para ver algunas fotos de esta aplicación -popup.screenshots.no_screenshot.body=No fue posible recuperar las fotos de {} \ No newline at end of file +popup.screenshots.no_screenshot.body=No fue posible recuperar las fotos de {} +games=juegos +videoeditor=edito de video +browser=navegador +music=música +development=desarrollo \ No newline at end of file diff --git a/bauh/view/resources/locale/pt b/bauh/view/resources/locale/pt index 75e7e1fb..70f8055f 100644 --- a/bauh/view/resources/locale/pt +++ b/bauh/view/resources/locale/pt @@ -122,8 +122,14 @@ console.install_logs.path=Os registros de instalação podem ser encontrados em author=autor source=fonte size=tamanho +category=categoria categories=categorias summary=resumo manage_window.status.screenshots=Obtendo imagens de {} action.screenshots.tooltip=Clique aqui para ver algumas fotos desse aplicativo -popup.screenshots.no_screenshot.body=Não foi possível obter as fotos de {} \ No newline at end of file +popup.screenshots.no_screenshot.body=Não foi possível obter as fotos de {} +games=jogos +videoeditor=edito de vídeo +browser=navegador +music=música +development=desenvolvimento \ No newline at end of file