From a9f1a0c4e23df9ae16b4041c175d96735a2fddbb Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Sun, 6 Jan 2019 22:26:03 -0200 Subject: [PATCH] AddonManager: Don't overwrite displayed text after a module install/removal --- src/Mod/AddonManager/AddonManager.py | 80 +++++++++++++++++++--------- 1 file changed, 55 insertions(+), 25 deletions(-) diff --git a/src/Mod/AddonManager/AddonManager.py b/src/Mod/AddonManager/AddonManager.py index dd25a0ffec70..6e2f9e14b434 100644 --- a/src/Mod/AddonManager/AddonManager.py +++ b/src/Mod/AddonManager/AddonManager.py @@ -389,7 +389,7 @@ def add_macro(self, macro): if macro.is_installed(): self.listMacros.addItem(QtGui.QListWidgetItem(QtGui.QIcon.fromTheme('dialog-ok'), macro.name + str(' (Installed)'))) else: - self.listMacros.addItem(macro.name) + self.listMacros.addItem(" "+macro.name) def showlink(self,link): """opens a link with the system browser""" @@ -423,7 +423,7 @@ def install(self,repos=None): self.labelDescription.setText(translate("AddonsInstaller", "Macro successfully installed. The macro is now available from the Macros dialog.")) else: self.labelDescription.setText(translate("AddonsInstaller", "Unable to install")) - self.update_status() + self.update_status(soft=True) def show_progress_bar(self, state): if state == True: @@ -490,24 +490,53 @@ def remove(self): self.labelDescription.setText(translate('AddonsInstaller', 'Macro successfully removed.')) else: self.labelDescription.setText(translate('AddonsInstaller', 'Macro could not be removed.')) - self.update_status() + self.update_status(soft=True) + + def update_status(self,soft=False): + + "Updates the list of wbs/macros. If soft is true, items are not recreated (and therefore display text no triggered)" - def update_status(self): - self.listWorkbenches.clear() - self.listMacros.clear() moddir = FreeCAD.getUserAppDataDir() + os.sep + "Mod" - for wb in self.repos: - if os.path.exists(os.path.join(moddir,wb[0])): - self.listWorkbenches.addItem(QtGui.QListWidgetItem(QtGui.QIcon.fromTheme("dialog-ok"),str(wb[0]) + str(" (Installed)"))) - wb[2] = 1 - else: - self.listWorkbenches.addItem(" "+str(wb[0])) - wb[2] = 0 - for macro in self.macros: - if macro.is_installed(): - self.listMacros.addItem(QtGui.QListWidgetItem(QtGui.QIcon.fromTheme('dialog-ok'), macro.name + str(' (Installed)'))) - else: - self.listMacros.addItem(macro.name) + if soft: + for i in range(self.listWorkbenches.count()): + txt = self.listWorkbenches.item(i).text().strip() + if txt.endswith(" (Installed)"): + txt = txt[:-12] + elif txt.endswith(" (Update available)"): + txt = txt[:-19] + if os.path.exists(os.path.join(moddir,txt)): + self.listWorkbenches.item(i).setText(txt+" (Installed)") + self.listWorkbenches.item(i).setIcon(QtGui.QIcon.fromTheme("dialog-ok")) + else: + self.listWorkbenches.item(i).setText(" "+txt) + self.listWorkbenches.item(i).setIcon(QtGui.QIcon()) + for i in range(self.listMacros.count()): + txt = self.listMacros.item(i).text().strip() + if txt.endswith(" (Installed)"): + txt = txt[:-12] + elif txt.endswith(" (Update available)"): + txt = txt[:-19] + if os.path.exists(os.path.join(moddir,txt)): + self.listMacros.item(i).setText(txt+" (Installed)") + self.listMacros.item(i).setIcon(QtGui.QIcon.fromTheme("dialog-ok")) + else: + self.listMacros.item(i).setText(" "+txt) + self.listMacros.item(i).setIcon(QtGui.QIcon()) + else: + self.listWorkbenches.clear() + self.listMacros.clear() + for wb in self.repos: + if os.path.exists(os.path.join(moddir,wb[0])): + self.listWorkbenches.addItem(QtGui.QListWidgetItem(QtGui.QIcon.fromTheme("dialog-ok"),str(wb[0]) + str(" (Installed)"))) + wb[2] = 1 + else: + self.listWorkbenches.addItem(" "+str(wb[0])) + wb[2] = 0 + for macro in self.macros: + if macro.is_installed(): + self.listMacros.addItem(QtGui.QListWidgetItem(QtGui.QIcon.fromTheme('dialog-ok'), macro.name + str(' (Installed)'))) + else: + self.listMacros.addItem(" "+macro.name) def mark(self,repo): for i in range(self.listWorkbenches.count()): @@ -918,13 +947,14 @@ def run(self): macro_dir = FreeCAD.getUserMacroDir(True) if not os.path.exists(macro_dir): os.makedirs(macro_dir) - for f in os.listdir(clonedir): - if f.lower().endswith(".fcmacro"): - print("copying macro:",f) - symlink(os.path.join(clonedir, f), os.path.join(macro_dir, f)) - FreeCAD.ParamGet('User parameter:Plugins/'+self.repos[idx][0]).SetString("destination",clonedir) - answer += translate("AddonsInstaller", "A macro has been installed and is available the Macros menu") + ": " - answer += f + "" + if os.path.exists(clonedir): + for f in os.listdir(clonedir): + if f.lower().endswith(".fcmacro"): + print("copying macro:",f) + symlink(os.path.join(clonedir, f), os.path.join(macro_dir, f)) + FreeCAD.ParamGet('User parameter:Plugins/'+self.repos[idx][0]).SetString("destination",clonedir) + answer += translate("AddonsInstaller", "A macro has been installed and is available the Macros menu") + ": " + answer += f + "" self.progressbar_show.emit(False) self.info_label.emit(answer) self.stop = True