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
This commit is contained in:
Evgeny Kulikov 2025-03-19 03:27:34 +02:00 committed by GitHub
parent 6ef24739fc
commit ffcc7612ab
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -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.log import ADDON_LOGGER_PREFIX, find_addon_logger, get_addon_logs_folder
from aqt.qt import * from aqt.qt import *
from aqt.utils import ( from aqt.utils import (
addCloseShortcut,
askUser, askUser,
disable_help_button, disable_help_button,
getFile, getFile,
is_win,
openFolder, openFolder,
openLink, openLink,
restoreGeom, restoreGeom,
@ -821,12 +821,17 @@ class AddonsDialog(QDialog):
qconnect(f.config.clicked, self.onConfig) qconnect(f.config.clicked, self.onConfig)
qconnect(self.form.addonList.itemDoubleClicked, self.onConfig) qconnect(self.form.addonList.itemDoubleClicked, self.onConfig)
qconnect(self.form.addonList.currentRowChanged, self._onAddonItemSelected) qconnect(self.form.addonList.currentRowChanged, self._onAddonItemSelected)
qconnect(
self.form.addonList.itemSelectionChanged, self._onAddonSelectionChanged
)
self.setWindowTitle(tr.addons_window_title()) self.setWindowTitle(tr.addons_window_title())
disable_help_button(self) disable_help_button(self)
self.setAcceptDrops(True) self.setAcceptDrops(True)
self.redrawAddons() self.redrawAddons()
restoreGeom(self, "addons") restoreGeom(self, "addons")
addCloseShortcut(self)
gui_hooks.addons_dialog_will_show(self) gui_hooks.addons_dialog_will_show(self)
self._onAddonSelectionChanged()
self.show() self.show()
def dragEnterEvent(self, event: QDragEnterEvent) -> None: def dragEnterEvent(self, event: QDragEnterEvent) -> None:
@ -902,11 +907,19 @@ class AddonsDialog(QDialog):
addonList.reset() addonList.reset()
def _onAddonItemSelected(self, row_int: int) -> None: def _onAddonSelectionChanged(self) -> None:
try: self.form.viewFiles.setEnabled(False)
addon = self.addons[row_int] self.form.viewPage.setEnabled(False)
except IndexError: self.form.config.setEnabled(False)
return
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.viewPage.setEnabled(addon.page() is not None)
self.form.config.setEnabled( self.form.config.setEnabled(
bool( bool(
@ -914,6 +927,13 @@ class AddonsDialog(QDialog):
or self.mgr.configAction(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
gui_hooks.addons_dialog_did_change_selected_addon(self, addon) gui_hooks.addons_dialog_did_change_selected_addon(self, addon)
return return
@ -949,7 +969,7 @@ class AddonsDialog(QDialog):
openLink(page) openLink(page)
def onViewFiles(self) -> None: def onViewFiles(self) -> None:
# if nothing selected, open top level folder # if nothing selected, open top-level folder
selected = self.selectedAddons() selected = self.selectedAddons()
if not selected: if not selected:
openFolder(self.mgr.addonsFolder()) openFolder(self.mgr.addonsFolder())