mirror of
https://github.com/spalencsar/bearhub.git
synced 2026-07-08 13:14:17 +02:00
Apps table refactoring
This commit is contained in:
@@ -35,16 +35,24 @@ class UpdateToggleButton(QToolButton):
|
|||||||
|
|
||||||
class AppsTable(QTableWidget):
|
class AppsTable(QTableWidget):
|
||||||
|
|
||||||
def __init__(self, parent: QWidget, columns: List[str]):
|
def __init__(self, parent: QWidget):
|
||||||
super(AppsTable, self).__init__()
|
super(AppsTable, self).__init__()
|
||||||
self.parent = parent
|
self.setParent(parent)
|
||||||
self.columns = columns
|
self.window = parent
|
||||||
self.setColumnCount(len(columns))
|
self.column_names = [parent.locale_keys[key].capitalize() for key in ['flatpak.info.name',
|
||||||
|
'flatpak.info.version',
|
||||||
|
'manage_window.columns.latest_version',
|
||||||
|
'flatpak.info.branch',
|
||||||
|
'flatpak.info.arch',
|
||||||
|
'flatpak.info.ref',
|
||||||
|
'flatpak.info.origin',
|
||||||
|
'manage_window.columns.update']]
|
||||||
|
self.setColumnCount(len(self.column_names))
|
||||||
self.setFocusPolicy(Qt.NoFocus)
|
self.setFocusPolicy(Qt.NoFocus)
|
||||||
self.setShowGrid(False)
|
self.setShowGrid(False)
|
||||||
self.verticalHeader().setVisible(False)
|
self.verticalHeader().setVisible(False)
|
||||||
self.setSelectionBehavior(QTableView.SelectRows)
|
self.setSelectionBehavior(QTableView.SelectRows)
|
||||||
self.setHorizontalHeaderLabels(columns)
|
self.setHorizontalHeaderLabels(self.column_names)
|
||||||
self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
|
self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
|
||||||
self.icon_flathub = QIcon(resource.get_path('img/flathub_45.svg'))
|
self.icon_flathub = QIcon(resource.get_path('img/flathub_45.svg'))
|
||||||
|
|
||||||
@@ -54,30 +62,30 @@ class AppsTable(QTableWidget):
|
|||||||
self.icon_cache = {}
|
self.icon_cache = {}
|
||||||
|
|
||||||
def contextMenuEvent(self, QContextMenuEvent): # selected row right click event
|
def contextMenuEvent(self, QContextMenuEvent): # selected row right click event
|
||||||
napps = len([app for app in self.parent.apps if not app['model']['runtime']])
|
napps = len([app for app in self.window.apps if not app['model']['runtime']])
|
||||||
|
|
||||||
menu_row = QMenu()
|
menu_row = QMenu()
|
||||||
|
|
||||||
action_info = QAction(self.parent.locale_keys["manage_window.apps_table.row.actions.info"])
|
action_info = QAction(self.window.locale_keys["manage_window.apps_table.row.actions.info"])
|
||||||
action_info.setIcon(QIcon(resource.get_path('img/info.svg')))
|
action_info.setIcon(QIcon(resource.get_path('img/info.svg')))
|
||||||
action_info.triggered.connect(self._get_app_info)
|
action_info.triggered.connect(self._get_app_info)
|
||||||
menu_row.addAction(action_info)
|
menu_row.addAction(action_info)
|
||||||
|
|
||||||
action_history = QAction(self.parent.locale_keys["manage_window.apps_table.row.actions.history"])
|
action_history = QAction(self.window.locale_keys["manage_window.apps_table.row.actions.history"])
|
||||||
action_history.setIcon(QIcon(resource.get_path('img/history.svg')))
|
action_history.setIcon(QIcon(resource.get_path('img/history.svg')))
|
||||||
action_history.triggered.connect(self._get_app_history)
|
action_history.triggered.connect(self._get_app_history)
|
||||||
menu_row.addAction(action_history)
|
menu_row.addAction(action_history)
|
||||||
|
|
||||||
app = self.get_selected_app()
|
app = self.get_selected_app()
|
||||||
|
|
||||||
action_uninstall = QAction(self.parent.locale_keys["manage_window.apps_table.row.actions.uninstall"])
|
action_uninstall = QAction(self.window.locale_keys["manage_window.apps_table.row.actions.uninstall"])
|
||||||
action_uninstall.setIcon(QIcon(resource.get_path('img/uninstall.svg')))
|
action_uninstall.setIcon(QIcon(resource.get_path('img/uninstall.svg')))
|
||||||
action_uninstall.triggered.connect(self._uninstall_app)
|
action_uninstall.triggered.connect(self._uninstall_app)
|
||||||
action_uninstall.setEnabled(not napps or not app['model']['runtime']) # only enabled for runtimes when no apps are available
|
action_uninstall.setEnabled(not napps or not app['model']['runtime']) # only enabled for runtimes when no apps are available
|
||||||
menu_row.addAction(action_uninstall)
|
menu_row.addAction(action_uninstall)
|
||||||
|
|
||||||
if not app['model']['runtime']: # not available for runtimes
|
if not app['model']['runtime']: # not available for runtimes
|
||||||
action_downgrade = QAction(self.parent.locale_keys["manage_window.apps_table.row.actions.downgrade"])
|
action_downgrade = QAction(self.window.locale_keys["manage_window.apps_table.row.actions.downgrade"])
|
||||||
action_downgrade.triggered.connect(self._downgrade_app)
|
action_downgrade.triggered.connect(self._downgrade_app)
|
||||||
action_downgrade.setIcon(QIcon(resource.get_path('img/downgrade.svg')))
|
action_downgrade.setIcon(QIcon(resource.get_path('img/downgrade.svg')))
|
||||||
menu_row.addAction(action_downgrade)
|
menu_row.addAction(action_downgrade)
|
||||||
@@ -87,7 +95,7 @@ class AppsTable(QTableWidget):
|
|||||||
menu_row.exec_()
|
menu_row.exec_()
|
||||||
|
|
||||||
def get_selected_app(self):
|
def get_selected_app(self):
|
||||||
return self.parent.apps[self.currentRow()]
|
return self.window.apps[self.currentRow()]
|
||||||
|
|
||||||
def get_selected_app_icon(self):
|
def get_selected_app_icon(self):
|
||||||
return self.item(self.currentRow(), 0).icon()
|
return self.item(self.currentRow(), 0).icon()
|
||||||
@@ -95,24 +103,24 @@ class AppsTable(QTableWidget):
|
|||||||
def _uninstall_app(self):
|
def _uninstall_app(self):
|
||||||
selected_app = self.get_selected_app()
|
selected_app = self.get_selected_app()
|
||||||
|
|
||||||
if dialog.ask_confirmation(title=self.parent.locale_keys['manage_window.apps_table.row.actions.uninstall.popup.title'],
|
if dialog.ask_confirmation(title=self.window.locale_keys['manage_window.apps_table.row.actions.uninstall.popup.title'],
|
||||||
body=self.parent.locale_keys['manage_window.apps_table.row.actions.uninstall.popup.body'].format(selected_app['model']['name']),
|
body=self.window.locale_keys['manage_window.apps_table.row.actions.uninstall.popup.body'].format(selected_app['model']['name']),
|
||||||
locale_keys=self.parent.locale_keys):
|
locale_keys=self.window.locale_keys):
|
||||||
self.parent.uninstall_app(selected_app['model']['ref'])
|
self.window.uninstall_app(selected_app['model']['ref'])
|
||||||
|
|
||||||
def _downgrade_app(self):
|
def _downgrade_app(self):
|
||||||
selected_app = self.get_selected_app()
|
selected_app = self.get_selected_app()
|
||||||
|
|
||||||
if dialog.ask_confirmation(title=self.parent.locale_keys['manage_window.apps_table.row.actions.downgrade'],
|
if dialog.ask_confirmation(title=self.window.locale_keys['manage_window.apps_table.row.actions.downgrade'],
|
||||||
body=self.parent.locale_keys['manage_window.apps_table.row.actions.downgrade.popup.body'].format(selected_app['model']['name']),
|
body=self.window.locale_keys['manage_window.apps_table.row.actions.downgrade.popup.body'].format(selected_app['model']['name']),
|
||||||
locale_keys=self.parent.locale_keys):
|
locale_keys=self.window.locale_keys):
|
||||||
self.parent.downgrade_app(selected_app)
|
self.window.downgrade_app(selected_app)
|
||||||
|
|
||||||
def _get_app_info(self):
|
def _get_app_info(self):
|
||||||
self.parent.get_app_info(self.get_selected_app())
|
self.window.get_app_info(self.get_selected_app())
|
||||||
|
|
||||||
def _get_app_history(self):
|
def _get_app_history(self):
|
||||||
self.parent.get_app_history(self.get_selected_app())
|
self.window.get_app_history(self.get_selected_app())
|
||||||
|
|
||||||
def _load_icon(self, http_response):
|
def _load_icon(self, http_response):
|
||||||
icon_url = http_response.url().toString()
|
icon_url = http_response.url().toString()
|
||||||
@@ -121,10 +129,10 @@ class AppsTable(QTableWidget):
|
|||||||
icon = QIcon(pixmap)
|
icon = QIcon(pixmap)
|
||||||
self.icon_cache[icon_url] = icon
|
self.icon_cache[icon_url] = icon
|
||||||
|
|
||||||
for idx, app in enumerate(self.parent.apps):
|
for idx, app in enumerate(self.window.apps):
|
||||||
if app['model']['icon'] == icon_url:
|
if app['model']['icon'] == icon_url:
|
||||||
self.item(idx, 0).setIcon(icon)
|
self.item(idx, 0).setIcon(icon)
|
||||||
self.parent.resize_and_center()
|
self.window.resize_and_center()
|
||||||
break
|
break
|
||||||
|
|
||||||
def update_apps(self, apps: List[dict]):
|
def update_apps(self, apps: List[dict]):
|
||||||
@@ -184,10 +192,10 @@ class AppsTable(QTableWidget):
|
|||||||
col_origin.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled)
|
col_origin.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled)
|
||||||
self.setItem(idx, 6, col_origin)
|
self.setItem(idx, 6, col_origin)
|
||||||
|
|
||||||
col_update = UpdateToggleButton(app, self.parent, self.parent.locale_keys, app['model']['update']) if app['model']['update'] else None
|
col_update = UpdateToggleButton(app, self.window, self.window.locale_keys, app['model']['update']) if app['model']['update'] else None
|
||||||
self.setCellWidget(idx, 7, col_update)
|
self.setCellWidget(idx, 7, col_update)
|
||||||
|
|
||||||
def change_headers_policy(self, policy: QHeaderView = QHeaderView.ResizeToContents):
|
def change_headers_policy(self, policy: QHeaderView = QHeaderView.ResizeToContents):
|
||||||
header_horizontal = self.horizontalHeader()
|
header_horizontal = self.horizontalHeader()
|
||||||
for i in range(0, len(self.columns)):
|
for i in range(self.columnCount()):
|
||||||
header_horizontal.setSectionResizeMode(i, policy)
|
header_horizontal.setSectionResizeMode(i, policy)
|
||||||
|
|||||||
@@ -26,14 +26,6 @@ class ManageWindow(QWidget):
|
|||||||
def __init__(self, locale_keys: dict, manager: FlatpakManager, tray_icon=None):
|
def __init__(self, locale_keys: dict, manager: FlatpakManager, tray_icon=None):
|
||||||
super(ManageWindow, self).__init__()
|
super(ManageWindow, self).__init__()
|
||||||
self.locale_keys = locale_keys
|
self.locale_keys = locale_keys
|
||||||
self.column_names = [locale_keys[key].capitalize() for key in ['flatpak.info.name',
|
|
||||||
'flatpak.info.version',
|
|
||||||
'manage_window.columns.latest_version',
|
|
||||||
'flatpak.info.branch',
|
|
||||||
'flatpak.info.arch',
|
|
||||||
'flatpak.info.ref',
|
|
||||||
'flatpak.info.origin',
|
|
||||||
'manage_window.columns.update']]
|
|
||||||
self.manager = manager
|
self.manager = manager
|
||||||
self.tray_icon = tray_icon
|
self.tray_icon = tray_icon
|
||||||
self.thread_lock = Lock()
|
self.thread_lock = Lock()
|
||||||
@@ -86,7 +78,7 @@ class ManageWindow(QWidget):
|
|||||||
|
|
||||||
self.layout.addWidget(toolbar)
|
self.layout.addWidget(toolbar)
|
||||||
|
|
||||||
self.table_apps = AppsTable(self, self.column_names)
|
self.table_apps = AppsTable(self)
|
||||||
self.table_apps.change_headers_policy()
|
self.table_apps.change_headers_policy()
|
||||||
|
|
||||||
self.layout.addWidget(self.table_apps)
|
self.layout.addWidget(self.table_apps)
|
||||||
@@ -300,7 +292,7 @@ class ManageWindow(QWidget):
|
|||||||
self.resize_and_center()
|
self.resize_and_center()
|
||||||
|
|
||||||
def resize_and_center(self):
|
def resize_and_center(self):
|
||||||
new_width = reduce(operator.add, [self.table_apps.columnWidth(i) for i in range(len(self.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
|
||||||
self.resize(new_width, self.height())
|
self.resize(new_width, self.height())
|
||||||
self.centralize()
|
self.centralize()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user