combo type filter refactoring

This commit is contained in:
Vinicius Moreira
2019-08-29 15:02:21 -03:00
parent 438f40f8a4
commit 6b40232a05

View File

@@ -5,7 +5,7 @@ from typing import List
from PyQt5.QtCore import QEvent, Qt, QSize, pyqtSignal from PyQt5.QtCore import QEvent, Qt, QSize, pyqtSignal
from PyQt5.QtGui import QIcon, QWindowStateChangeEvent, QPixmap from PyQt5.QtGui import QIcon, QWindowStateChangeEvent, QPixmap
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QApplication, QCheckBox, QHeaderView, QToolButton, QToolBar, \ from PyQt5.QtWidgets import QWidget, QVBoxLayout, QApplication, QCheckBox, QHeaderView, QToolButton, QToolBar, \
QLabel, QPlainTextEdit, QLineEdit, QProgressBar, QHBoxLayout, QPushButton, QComboBox QLabel, QPlainTextEdit, QLineEdit, QProgressBar, QPushButton, QComboBox
from bauh_api.abstract.controller import SoftwareManager from bauh_api.abstract.controller import SoftwareManager
from bauh_api.abstract.model import SoftwarePackage from bauh_api.abstract.model import SoftwarePackage
from bauh_api.abstract.view import MessageType from bauh_api.abstract.view import MessageType
@@ -106,9 +106,16 @@ class ManageWindow(QWidget):
self.checkbox_only_apps.stateChanged.connect(self._handle_filter_only_apps) self.checkbox_only_apps.stateChanged.connect(self._handle_filter_only_apps)
self.ref_checkbox_only_apps = self.toolbar.addWidget(self.checkbox_only_apps) self.ref_checkbox_only_apps = self.toolbar.addWidget(self.checkbox_only_apps)
self.extra_filters = QWidget() self.any_type_filter = 'any'
self.extra_filters.setLayout(QHBoxLayout()) self.cache_type_filter_icons = {}
self.toolbar.addWidget(self.extra_filters) self.combo_filter_type = QComboBox()
self.combo_filter_type.setStyleSheet('QLineEdit { height: 2px}')
self.combo_filter_type.setEditable(True)
self.combo_filter_type.lineEdit().setReadOnly(True)
self.combo_filter_type.lineEdit().setAlignment(Qt.AlignCenter)
self.combo_filter_type.activated.connect(self._handle_type_filter)
self.combo_filter_type.addItem(self._get_resized_icon(resource.get_path('img/logo.svg'), 14), self.locale_keys[self.any_type_filter].capitalize(), self.any_type_filter)
self.ref_combo_filter_type = self.toolbar.addWidget(self.combo_filter_type)
self.toolbar.addWidget(new_spacer()) self.toolbar.addWidget(new_spacer())
@@ -216,7 +223,6 @@ class ManageWindow(QWidget):
self.centralize() self.centralize()
self.filter_only_apps = True self.filter_only_apps = True
self.any_type_filter = 'any'
self.type_filter = self.any_type_filter self.type_filter = self.any_type_filter
self.filter_updates = False self.filter_updates = False
self._maximized = False self._maximized = False
@@ -282,8 +288,8 @@ class ManageWindow(QWidget):
self.filter_only_apps = status == 2 self.filter_only_apps = status == 2
self.apply_filters() self.apply_filters()
def _handle_type_filter(self, app_type: str): def _handle_type_filter(self, idx: int):
self.type_filter = app_type self.type_filter = self.combo_filter_type.itemData(idx)
self.apply_filters() self.apply_filters()
def _notify_model_data_change(self): def _notify_model_data_change(self):
@@ -526,6 +532,7 @@ class ManageWindow(QWidget):
else: # use installed else: # use installed
self.pkgs = self.pkgs_installed self.pkgs = self.pkgs_installed
for app in self.pkgs: for app in self.pkgs:
available_types[app.model.get_type()] = app.model.get_type_icon_path()
napps += 1 if app.model.is_application() else 0 napps += 1 if app.model.is_application() else 0
if napps == 0: if napps == 0:
@@ -561,29 +568,23 @@ class ManageWindow(QWidget):
self.type_filter = self.any_type_filter self.type_filter = self.any_type_filter
if len(available_types) > 1: if available_types and len(available_types) > 1:
if self.combo_filter_type.count() > 1:
filters_layout = self.extra_filters.layout() for _ in range(self.combo_filter_type.count() - 1):
for i in reversed(range(filters_layout.count())): self.combo_filter_type.removeItem(1)
filters_layout.itemAt(i).widget().setParent(None)
if available_types:
combo = QComboBox()
combo.setStyleSheet('QLineEdit { height: 2px}')
combo.setEditable(True)
combo.lineEdit().setReadOnly(True)
combo.lineEdit().setAlignment(Qt.AlignCenter)
def handle_activated(index: int):
self._handle_type_filter(combo.itemData(index))
combo.activated.connect(handle_activated)
combo.addItem(self._get_resized_icon(resource.get_path('img/logo.svg'), 14), self.locale_keys[self.any_type_filter].capitalize(), self.any_type_filter)
for app_type, icon_path in available_types.items(): for app_type, icon_path in available_types.items():
combo.addItem(self._get_resized_icon(icon_path, 14), app_type.capitalize(), app_type) icon = self.cache_type_filter_icons.get(app_type)
filters_layout.addWidget(combo) if not icon:
icon = self._get_resized_icon(icon_path, 14)
self.cache_type_filter_icons[app_type] = icon
self.combo_filter_type.addItem(icon, app_type.capitalize(), app_type)
self.ref_combo_filter_type.setVisible(True)
else:
self.ref_combo_filter_type.setVisible(False)
def resize_and_center(self, accept_lower_width: bool = True): def resize_and_center(self, accept_lower_width: bool = True):
new_width = reduce(operator.add, [self.table_apps.columnWidth(i) for i in range(len(self.table_apps.column_names))]) * 1.05 new_width = reduce(operator.add, [self.table_apps.columnWidth(i) for i in range(len(self.table_apps.column_names))]) * 1.05
@@ -647,6 +648,7 @@ class ManageWindow(QWidget):
self.textarea_output.appendPlainText(output) self.textarea_output.appendPlainText(output)
def _begin_action(self, action_label: str, keep_search: bool = False, clear_filters: bool = False): def _begin_action(self, action_label: str, keep_search: bool = False, clear_filters: bool = False):
self.ref_combo_filter_type.setVisible(False)
self.ref_bt_about.setVisible(False) self.ref_bt_about.setVisible(False)
self.ref_label_updates.setVisible(False) self.ref_label_updates.setVisible(False)
self.thread_animate_progress.stop = False self.thread_animate_progress.stop = False
@@ -669,7 +671,7 @@ class ManageWindow(QWidget):
if clear_filters: if clear_filters:
self._update_type_filters({}) self._update_type_filters({})
else: else:
self.extra_filters.setEnabled(False) self.combo_filter_type.setEnabled(False)
def finish_action(self): def finish_action(self):
self._change_label_substatus('') self._change_label_substatus('')
@@ -686,7 +688,7 @@ class ManageWindow(QWidget):
self.label_substatus.setText('') self.label_substatus.setText('')
self.ref_toolbar_search.setVisible(True) self.ref_toolbar_search.setVisible(True)
self.ref_toolbar_search.setEnabled(True) self.ref_toolbar_search.setEnabled(True)
self.extra_filters.setEnabled(True) self.combo_filter_type.setEnabled(True)
self.checkbox_updates.setEnabled(True) self.checkbox_updates.setEnabled(True)
def downgrade_app(self, app: PackageView): def downgrade_app(self, app: PackageView):