From d7ac307ace75917882386c9cf4244013a4e5a319 Mon Sep 17 00:00:00 2001 From: Remco Burema Date: Fri, 12 Nov 2021 14:01:05 +0100 Subject: [PATCH] Type in the search-bar and the remote package list reacts. It doesn't do any actual searching yet though. Also switching between page doesn't work like it's supposed to yet (and probalby more of that sort of cases). part of CURA-8559 --- plugins/Marketplace/RemotePackageList.py | 24 +++++++++++++++++-- .../Marketplace/resources/qml/Marketplace.qml | 9 ++++++- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/plugins/Marketplace/RemotePackageList.py b/plugins/Marketplace/RemotePackageList.py index 8fa75453c1..150d9901f1 100644 --- a/plugins/Marketplace/RemotePackageList.py +++ b/plugins/Marketplace/RemotePackageList.py @@ -32,6 +32,7 @@ class RemotePackageList(PackageList): self._scope = JsonDecoratorScope(UltimakerCloudScope(CuraApplication.getInstance())) self._package_type_filter = "" + self._search_string = "" self._request_url = self._initialRequestUrl() self.isLoadingChanged.emit() @@ -69,6 +70,7 @@ class RemotePackageList(PackageList): self._request_url = self._initialRequestUrl() packageTypeFilterChanged = pyqtSignal() + searchStringChanged = pyqtSignal() def setPackageTypeFilter(self, new_filter: str) -> None: if new_filter != self._package_type_filter: @@ -76,6 +78,12 @@ class RemotePackageList(PackageList): self.reset() self.packageTypeFilterChanged.emit() + def setSearchString(self, new_search: str) -> None: + if new_search != self._search_string: + self._search_string = new_search + self.reset() + self.searchStringChanged.emit() + @pyqtProperty(str, fset = setPackageTypeFilter, notify = packageTypeFilterChanged) def packageTypeFilter(self) -> str: """ @@ -84,14 +92,26 @@ class RemotePackageList(PackageList): """ return self._package_type_filter + @pyqtProperty(str, fset = setSearchString, notify = searchStringChanged) + def searchString(self) -> str: + """ + Get the string the user is currently searching for within the packages, or an empty string if no extra search + filter has to be applied. Does not override package-type filter! + :return: String the user is searching for. Empty denotes 'no search filter'. + """ + return self._search_string + def _initialRequestUrl(self) -> str: """ Get the URL to request the first paginated page with. :return: A URL to request. """ + request_url = f"{Marketplace.PACKAGES_URL}?limit={self.ITEMS_PER_PAGE}" if self._package_type_filter != "": - return f"{Marketplace.PACKAGES_URL}?package_type={self._package_type_filter}&limit={self.ITEMS_PER_PAGE}" - return f"{Marketplace.PACKAGES_URL}?limit={self.ITEMS_PER_PAGE}" + request_url += f"&package_type={self._package_type_filter}" + if self._search_string != "": + request_url += f"" # TODO + return request_url def _parseResponse(self, reply: "QNetworkReply") -> None: """ diff --git a/plugins/Marketplace/resources/qml/Marketplace.qml b/plugins/Marketplace/resources/qml/Marketplace.qml index 1422a0eece..e92ac44c1d 100644 --- a/plugins/Marketplace/resources/qml/Marketplace.qml +++ b/plugins/Marketplace/resources/qml/Marketplace.qml @@ -14,6 +14,8 @@ Window id: marketplaceDialog property variant catalog: UM.I18nCatalog { name: "cura" } + signal searchStringChanged(string new_search) + minimumWidth: UM.Theme.getSize("modal_window_minimum").width minimumHeight: UM.Theme.getSize("modal_window_minimum").height width: minimumWidth @@ -92,7 +94,7 @@ Window id: searchBar Layout.preferredHeight: parent.height Layout.fillWidth: true - //onTextEdited: // TODO! + onTextEdited: marketplaceDialog.searchStringChanged(text) } // Page selection. @@ -168,6 +170,11 @@ Window function onLoaded() { pageTitle.text = content.item.pageTitle + searchStringChanged.connect(onSearchStringChanged) + } + function onSearchStringChanged(new_search) + { + content.item.model.searchString = new_search } } }