diff --git a/src/Mod/AddonManager/addonmanager_devmode.py b/src/Mod/AddonManager/addonmanager_devmode.py index 2e49c0a0fe..3a431cfe50 100644 --- a/src/Mod/AddonManager/addonmanager_devmode.py +++ b/src/Mod/AddonManager/addonmanager_devmode.py @@ -349,6 +349,7 @@ class DeveloperMode: self.dialog.pathToAddonComboBox.editTextChanged.connect( self._addon_combo_text_changed ) + self.dialog.iconBrowseButton.clicked.connect(self._browse_for_icon_clicked) self.dialog.addContentItemToolButton.clicked.connect(self._add_content_clicked) self.dialog.removeContentItemToolButton.clicked.connect( @@ -551,3 +552,33 @@ class DeveloperMode: day = datetime.date.today().day version_string = f"{year}.{month:>02}.{day:>02}" self.dialog.versionLineEdit.setText(version_string) + + def _browse_for_icon_clicked(self): + """Callback: when the "Browse..." button for the icon field is clicked""" + new_icon_path, _ = QFileDialog.getOpenFileName( + parent=self.dialog, + caption=translate( + "AddonsInstaller", + "Select an icon file for this package", + ), + dir=self.current_mod, + ) + + if not new_icon_path: + return + + base_path = self.current_mod.replace("/", os.path.sep) + icon_path = new_icon_path.replace("/", os.path.sep) + if base_path[-1] != os.path.sep: + base_path += os.path.sep + + if not icon_path.startswith(base_path): + FreeCAD.Console.PrintError( + translate("AddonsInstaller", "{} is not a subdirectory of {}").format( + new_icon_path, self.current_mod + ) + + "\n" + ) + return + self.metadata.Icon = new_icon_path[len(base_path) :] + self._populate_icon_from_metadata(self.metadata) \ No newline at end of file diff --git a/src/Mod/AddonManager/addonmanager_devmode_add_content.py b/src/Mod/AddonManager/addonmanager_devmode_add_content.py index d897e37891..7c302f856b 100644 --- a/src/Mod/AddonManager/addonmanager_devmode_add_content.py +++ b/src/Mod/AddonManager/addonmanager_devmode_add_content.py @@ -283,6 +283,8 @@ class AddContent: base_path = self.path_to_addon.replace("/", os.path.sep) icon_path = new_icon_path.replace("/", os.path.sep) + if base_path[-1] != os.path.sep: + base_path += os.path.sep if not icon_path.startswith(base_path): FreeCAD.Console.PrintError( diff --git a/src/Mod/AddonManager/developer_mode.ui b/src/Mod/AddonManager/developer_mode.ui index c698b6d698..2e6e0538f8 100644 --- a/src/Mod/AddonManager/developer_mode.ui +++ b/src/Mod/AddonManager/developer_mode.ui @@ -221,7 +221,7 @@ - + Browse...