From ffcc7612ab3accc88b8214047e72f3b6d6167442 Mon Sep 17 00:00:00 2001 From: Evgeny Kulikov <248055+beyondcompute@users.noreply.github.com> Date: Wed, 19 Mar 2025 03:27:34 +0200 Subject: [PATCH] Add-ons Dialog: disable View Config/Page/Files buttons when clicking them would not lead to useful result (#3869) * Remove unused import * Nit-pick on code comment * Enable View Page/Config buttons only when 1 add-on selected * Enable Cmd+W shortcut (on Mac only) to close Add-ons dialog --- qt/aqt/addons.py | 38 +++++++++++++++++++++++++++++--------- 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/qt/aqt/addons.py b/qt/aqt/addons.py index 84ceac21f..92965e4e9 100644 --- a/qt/aqt/addons.py +++ b/qt/aqt/addons.py @@ -40,10 +40,10 @@ from aqt import gui_hooks from aqt.log import ADDON_LOGGER_PREFIX, find_addon_logger, get_addon_logs_folder from aqt.qt import * from aqt.utils import ( + addCloseShortcut, askUser, disable_help_button, getFile, - is_win, openFolder, openLink, restoreGeom, @@ -821,12 +821,17 @@ class AddonsDialog(QDialog): qconnect(f.config.clicked, self.onConfig) qconnect(self.form.addonList.itemDoubleClicked, self.onConfig) qconnect(self.form.addonList.currentRowChanged, self._onAddonItemSelected) + qconnect( + self.form.addonList.itemSelectionChanged, self._onAddonSelectionChanged + ) self.setWindowTitle(tr.addons_window_title()) disable_help_button(self) self.setAcceptDrops(True) self.redrawAddons() restoreGeom(self, "addons") + addCloseShortcut(self) gui_hooks.addons_dialog_will_show(self) + self._onAddonSelectionChanged() self.show() def dragEnterEvent(self, event: QDragEnterEvent) -> None: @@ -902,18 +907,33 @@ class AddonsDialog(QDialog): addonList.reset() + def _onAddonSelectionChanged(self) -> None: + self.form.viewFiles.setEnabled(False) + self.form.viewPage.setEnabled(False) + self.form.config.setEnabled(False) + + selected_count = len(self.selectedAddons()) + if selected_count == 0: + # View Files button shows top-level add-ons directory when nothing is selected + self.form.viewFiles.setEnabled(True) + elif selected_count == 1: + addon = self.addons[self.form.addonList.currentRow()] + + self.form.viewFiles.setEnabled(True) + self.form.viewPage.setEnabled(addon.page() is not None) + self.form.config.setEnabled( + bool( + self.mgr.getConfig(addon.dir_name) + or self.mgr.configAction(addon.dir_name) + ) + ) + return + def _onAddonItemSelected(self, row_int: int) -> None: try: addon = self.addons[row_int] except IndexError: return - self.form.viewPage.setEnabled(addon.page() is not None) - self.form.config.setEnabled( - bool( - self.mgr.getConfig(addon.dir_name) - or self.mgr.configAction(addon.dir_name) - ) - ) gui_hooks.addons_dialog_did_change_selected_addon(self, addon) return @@ -949,7 +969,7 @@ class AddonsDialog(QDialog): openLink(page) def onViewFiles(self) -> None: - # if nothing selected, open top level folder + # if nothing selected, open top-level folder selected = self.selectedAddons() if not selected: openFolder(self.mgr.addonsFolder())