Skip to content

Commit

Permalink
Addon Manager: Add filter on installation status
Browse files Browse the repository at this point in the history
  • Loading branch information
chennes committed Dec 30, 2021
1 parent 80b9522 commit dc1c227
Showing 1 changed file with 66 additions and 1 deletion.
67 changes: 66 additions & 1 deletion src/Mod/AddonManager/package_list.py
Expand Up @@ -42,6 +42,12 @@ class ListDisplayStyle(IntEnum):
COMPACT = 0
EXPANDED = 1

class StatusFilter(IntEnum):
ANY = 0
INSTALLED = 1
NOT_INSTALLED = 2
UPDATE_AVAILABLE = 3


class PackageList(QWidget):
"""A widget that shows a list of packages and various widgets to control the display of the list"""
Expand All @@ -60,6 +66,7 @@ def __init__(self, parent=None):

self.ui.listPackages.clicked.connect(self.on_listPackages_clicked)
self.ui.comboPackageType.currentIndexChanged.connect(self.update_type_filter)
self.ui.comboStatus.currentIndexChanged.connect(self.update_status_filter)
self.ui.lineEditFilter.textChanged.connect(self.update_text_filter)
self.ui.buttonCompactLayout.clicked.connect(
lambda: self.set_view_style(ListDisplayStyle.COMPACT)
Expand All @@ -75,6 +82,8 @@ def __init__(self, parent=None):
pref = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Addons")
package_type = pref.GetInt("PackageTypeSelection", 1)
self.ui.comboPackageType.setCurrentIndex(package_type)
status = pref.GetInt("StatusSelection", 0)
self.ui.comboStatus.setCurrentIndex(status)

def setModel(self, model):
self.item_model = model
Expand Down Expand Up @@ -105,6 +114,17 @@ def update_type_filter(self, type_filter: int) -> None:
pref = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Addons")
pref.SetInt("PackageTypeSelection", type_filter)

def update_status_filter(self, status_filter: int) -> None:
"""hide/show rows corresponding to the status filter
status_filter is an integer: 0 for any, 1 for installed, 2 for not installed, and 3 for update available
"""

self.item_filter.setStatusFilter(status_filter)
pref = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Addons")
pref.SetInt("StatusSelection", status_filter)

def update_text_filter(self, text_filter: str) -> None:
"""filter name and description by the regex specified by text_filter"""

Expand Down Expand Up @@ -429,6 +449,7 @@ class PackageListFilter(QSortFilterProxyModel):
def __init__(self):
super().__init__()
self.package_type = 0 # Default to showing everything
self.status = 0 # Default to showing any
self.setSortCaseSensitivity(Qt.CaseInsensitive)

def setPackageFilter(
Expand All @@ -437,6 +458,12 @@ def setPackageFilter(
self.package_type = type
self.invalidateFilter()

def setStatusFilter(
self, status: int
) -> None: # 0=Any, 1=Installed, 2=Not installed, 3=Update available
self.status = status
self.invalidateFilter()

def lessThan(self, left, right) -> bool:
l = self.sourceModel().data(left, PackageListItemModel.DataAccessRole)
r = self.sourceModel().data(right, PackageListItemModel.DataAccessRole)
Expand All @@ -456,6 +483,16 @@ def filterAcceptsRow(self, row, parent=QModelIndex()):
if not data.contains_preference_pack():
return False

if self.status == StatusFilter.INSTALLED:
if data.update_status == AddonManagerRepo.UpdateStatus.NOT_INSTALLED:
return False
elif self.status == StatusFilter.NOT_INSTALLED:
if data.update_status != AddonManagerRepo.UpdateStatus.NOT_INSTALLED:
return False
elif self.status == StatusFilter.UPDATE_AVAILABLE:
if data.update_status != AddonManagerRepo.UpdateStatus.UPDATE_AVAILABLE:
return False

name = data.display_name
desc = data.description
if hasattr(self, "filterRegularExpression"): # Added in Qt 5.12
Expand Down Expand Up @@ -527,6 +564,20 @@ def setupUi(self, Form):

self.horizontalLayout_6.addWidget(self.comboPackageType)

self.labelStatus = QLabel(Form)
self.labelStatus.setObjectName("labelStatus")

self.horizontalLayout_6.addWidget(self.labelStatus)

self.comboStatus = QComboBox(Form)
self.comboStatus.addItem("")
self.comboStatus.addItem("")
self.comboStatus.addItem("")
self.comboStatus.addItem("")
self.comboStatus.setObjectName("comboStatus")

self.horizontalLayout_6.addWidget(self.comboStatus)

self.lineEditFilter = QLineEdit(Form)
self.lineEditFilter.setObjectName("lineEditFilter")
self.lineEditFilter.setClearButtonEnabled(True)
Expand Down Expand Up @@ -576,7 +627,21 @@ def retranslateUi(self, Form):
self.comboPackageType.setItemText(
3, QCoreApplication.translate("AddonsInstaller", "Preference Packs", None)
)

self.labelStatus.setText(
QCoreApplication.translate("AddonsInstaller", "Status:", None)
)
self.comboStatus.setItemText(
StatusFilter.ANY, QCoreApplication.translate("AddonsInstaller", "Any", None)
)
self.comboStatus.setItemText(
StatusFilter.INSTALLED, QCoreApplication.translate("AddonsInstaller", "Installed", None)
)
self.comboStatus.setItemText(
StatusFilter.NOT_INSTALLED, QCoreApplication.translate("AddonsInstaller", "Not installed", None)
)
self.comboStatus.setItemText(
StatusFilter.UPDATE_AVAILABLE, QCoreApplication.translate("AddonsInstaller", "Update available", None)
)
self.lineEditFilter.setPlaceholderText(
QCoreApplication.translate("AddonsInstaller", "Filter", None)
)
Expand Down

0 comments on commit dc1c227

Please sign in to comment.