diff --git a/src/Mod/AddonManager/AddonManagerOptions.ui b/src/Mod/AddonManager/AddonManagerOptions.ui
index 3bd3b7e591..8d4ecb45e9 100644
--- a/src/Mod/AddonManager/AddonManagerOptions.ui
+++ b/src/Mod/AddonManager/AddonManagerOptions.ui
@@ -90,6 +90,22 @@ installed addons will be checked for available updates
+ -
+
+
+ Hide Addons without a license
+
+
+ true
+
+
+ HideUnlicensed
+
+
+ Addons
+
+
+
-
diff --git a/src/Mod/AddonManager/addonmanager_preferences_defaults.json b/src/Mod/AddonManager/addonmanager_preferences_defaults.json
index 99a953bc55..07d16d0e15 100644
--- a/src/Mod/AddonManager/addonmanager_preferences_defaults.json
+++ b/src/Mod/AddonManager/addonmanager_preferences_defaults.json
@@ -14,6 +14,9 @@
"HideNewerFreeCADRequired": true,
"HideObsolete": true,
"HidePy2": true,
+ "HideNonOSIApproved": false,
+ "HideNonFSFFreeLibre": false,
+ "HideUnlicensed": false,
"KnownPythonVersions": "[]",
"LastCacheUpdate": "never",
"MacroCacheUpdateFrequency": 7,
diff --git a/src/Mod/AddonManager/package_list.py b/src/Mod/AddonManager/package_list.py
index 849aa1d457..8d8f8a07a8 100644
--- a/src/Mod/AddonManager/package_list.py
+++ b/src/Mod/AddonManager/package_list.py
@@ -96,8 +96,11 @@ class PackageList(QtWidgets.QWidget):
self.item_filter.setHidePy2(pref.GetBool("HidePy2", True))
self.item_filter.setHideObsolete(pref.GetBool("HideObsolete", True))
self.item_filter.setHideNonOSIApproved(pref.GetBool("HideNonOSIApproved", True))
- self.item_filter.setHideNonFSFLibre(pref.GetBool("HideNonFSFFreeLibre", True))
- self.item_filter.setHideNewerFreeCADRequired(pref.GetBool("HideNewerFreeCADRequired", True))
+ self.item_filter.setHideNonFSFLibre(pref.GetBool("HideNonFSFFreeLibre", False))
+ self.item_filter.setHideNewerFreeCADRequired(
+ pref.GetBool("HideNewerFreeCADRequired", False)
+ )
+ self.item_filter.setHideUnlicensed(pref.GetBool("HideUnlicensed", False))
def on_listPackages_clicked(self, index: QtCore.QModelIndex):
"""Determine what addon was selected and emit the itemSelected signal with it as
@@ -473,6 +476,7 @@ class PackageListFilter(QtCore.QSortFilterProxyModel):
self.hide_py2 = False
self.hide_non_OSI_approved = False
self.hide_non_FSF_libre = False
+ self.hide_unlicensed = False
self.hide_newer_freecad_required = False
def setPackageFilter(
@@ -509,6 +513,11 @@ class PackageListFilter(QtCore.QSortFilterProxyModel):
self.hide_non_FSF_libre = hide
self.invalidateFilter()
+ def setHideUnlicensed(self, hide: bool) -> None:
+ """Sets whether to hide addons without a specified license"""
+ self.hide_unlicensed = hide
+ self.invalidateFilter()
+
def setHideNewerFreeCADRequired(self, hide_nfr: bool) -> None:
"""Sets whether to hide packages that have indicated they need a newer version
of FreeCAD than the one currently running."""
@@ -559,6 +568,11 @@ class PackageListFilter(QtCore.QSortFilterProxyModel):
if self.hide_obsolete and data.obsolete:
return False
+ if self.hide_unlicensed:
+ if not data.license or data.license in ["UNLICENSED", "UNLICENCED"]:
+ FreeCAD.Console.PrintLog(f"Hiding {data.name} because it has no license set\n")
+ return False
+
# If it is not an OSI-approved license, check to see if we are hiding those
if self.hide_non_OSI_approved or self.hide_non_FSF_libre:
if not data.license: