From 8935b99188977ccb49c2cc119762b85e5726742a Mon Sep 17 00:00:00 2001 From: Glutanimate Date: Sat, 28 Jul 2018 09:00:49 +0200 Subject: [PATCH 1/3] Extend add-on API with setConfigUpdatedAction Allows add-on authors to define an action to be performed upon manual editing of the add-on configuration through the ConfigEditor --- aqt/addons.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/aqt/addons.py b/aqt/addons.py index 988d6de4c..a8e1cb36b 100644 --- a/aqt/addons.py +++ b/aqt/addons.py @@ -204,6 +204,7 @@ When loading '%(name)s': ###################################################################### _configButtonActions = {} + _configUpdatedActions = {} def addonConfigDefaults(self, dir): path = os.path.join(self.addonsFolder(dir), "config.json") @@ -227,6 +228,9 @@ When loading '%(name)s': def configAction(self, addon): return self._configButtonActions.get(addon) + def configUpdatedAction(self, addon): + return self._configUpdatedActions.get(addon) + # Add-on Config API ###################################################################### @@ -246,6 +250,10 @@ When loading '%(name)s': addon = self.addonFromModule(module) self._configButtonActions[addon] = fn + def setConfigUpdatedAction(self, module, fn): + addon = self.addonFromModule(module) + self._configUpdatedActions[addon] = fn + def writeConfig(self, module, conf): addon = self.addonFromModule(module) meta = self.addonMeta(addon) @@ -484,4 +492,9 @@ class ConfigEditor(QDialog): return self.mgr.writeConfig(self.addon, self.conf) + + act = self.mgr.configUpdatedAction(self.addon) + if act: + act() + super().accept() From ee3357a943295bd9a97e673b82441d140edf3b6f Mon Sep 17 00:00:00 2001 From: Glutanimate Date: Sat, 28 Jul 2018 09:09:17 +0200 Subject: [PATCH 2/3] Only update config if actually modified --- aqt/addons.py | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/aqt/addons.py b/aqt/addons.py index a8e1cb36b..a1286a830 100644 --- a/aqt/addons.py +++ b/aqt/addons.py @@ -465,12 +465,12 @@ class ConfigEditor(QDialog): restore = self.form.buttonBox.button(QDialogButtonBox.RestoreDefaults) restore.clicked.connect(self.onRestoreDefaults) self.updateHelp() - self.updateText() + self.updateText(self.conf) self.show() def onRestoreDefaults(self): - self.conf = self.mgr.addonConfigDefaults(self.addon) - self.updateText() + default_conf = self.mgr.addonConfigDefaults(self.addon) + self.updateText(default_conf) def updateHelp(self): txt = self.mgr.addonConfigHelp(self.addon) @@ -479,22 +479,22 @@ class ConfigEditor(QDialog): else: self.form.scrollArea.setVisible(False) - def updateText(self): + def updateText(self, conf): self.form.editor.setPlainText( - json.dumps(self.conf,sort_keys=True,indent=4, separators=(',', ': '))) + json.dumps(conf,sort_keys=True,indent=4, separators=(',', ': '))) def accept(self): txt = self.form.editor.toPlainText() try: - self.conf = json.loads(txt) + new_conf = json.loads(txt) except Exception as e: showInfo(_("Invalid configuration: ") + repr(e)) return - self.mgr.writeConfig(self.addon, self.conf) + if new_conf != self.conf: + self.mgr.writeConfig(self.addon, new_conf) + act = self.mgr.configUpdatedAction(self.addon) + if act: + act() - act = self.mgr.configUpdatedAction(self.addon) - if act: - act() - super().accept() From 8ce7c00d5401013ad0ad238ba0fe553d32b6dbf9 Mon Sep 17 00:00:00 2001 From: Glutanimate Date: Sat, 28 Jul 2018 09:25:38 +0200 Subject: [PATCH 3/3] Pass new config on to add-on --- aqt/addons.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/aqt/addons.py b/aqt/addons.py index a1286a830..9924bcd67 100644 --- a/aqt/addons.py +++ b/aqt/addons.py @@ -493,8 +493,9 @@ class ConfigEditor(QDialog): if new_conf != self.conf: self.mgr.writeConfig(self.addon, new_conf) + # does the add-on define an action to be fired? act = self.mgr.configUpdatedAction(self.addon) if act: - act() + act(new_conf) super().accept()