Apps table refactoring

This commit is contained in:
Vinicius Moreira
2019-06-27 15:04:42 -03:00
parent a741c3fa08
commit e3a8df5dab
2 changed files with 35 additions and 35 deletions

View File

@@ -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)

View File

@@ -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()