From 0f164f8ef4d1dfbc47adbfa967c1cdf910665a97 Mon Sep 17 00:00:00 2001 From: Mohsen Date: Sun, 18 Aug 2024 18:26:30 +0330 Subject: [PATCH] Address PR review. --- src/core/qfieldcloudprojectsmodel.cpp | 13 +++++++++---- src/core/qfieldcloudprojectsmodel.h | 10 ++++++++-- src/qml/QFieldCloudScreen.qml | 10 +++------- .../Theme/QfSearchBar.qml} | 12 ++---------- src/qml/imports/Theme/qmldir | 1 + src/qml/qml.qrc | 2 +- 6 files changed, 24 insertions(+), 24 deletions(-) rename src/qml/{SearchBar.qml => imports/Theme/QfSearchBar.qml} (86%) diff --git a/src/core/qfieldcloudprojectsmodel.cpp b/src/core/qfieldcloudprojectsmodel.cpp index a15572a35f..e6ad7022ea 100644 --- a/src/core/qfieldcloudprojectsmodel.cpp +++ b/src/core/qfieldcloudprojectsmodel.cpp @@ -2453,7 +2453,7 @@ bool QFieldCloudProjectsFilterModel::showLocalOnly() const bool QFieldCloudProjectsFilterModel::filterAcceptsRow( int source_row, const QModelIndex &source_parent ) const { - auto currentRowIndex = mSourceModel->index( source_row, 0, source_parent ); + const QModelIndex currentRowIndex = mSourceModel->index( source_row, 0, source_parent ); if ( mShowLocalOnly && mSourceModel->data( currentRowIndex, QFieldCloudProjectsModel::LocalPathRole ).toString().isEmpty() ) { return false; @@ -2472,9 +2472,9 @@ bool QFieldCloudProjectsFilterModel::filterAcceptsRow( int source_row, const QMo break; } - QString Name = mSourceModel->data( currentRowIndex, QFieldCloudProjectsModel::NameRole ).toString(); - QString Description = mSourceModel->data( currentRowIndex, QFieldCloudProjectsModel::DescriptionRole ).toString(); - QString Owner = mSourceModel->data( currentRowIndex, QFieldCloudProjectsModel::OwnerRole ).toString(); + const QString Name = mSourceModel->data( currentRowIndex, QFieldCloudProjectsModel::NameRole ).toString(); + const QString Description = mSourceModel->data( currentRowIndex, QFieldCloudProjectsModel::DescriptionRole ).toString(); + const QString Owner = mSourceModel->data( currentRowIndex, QFieldCloudProjectsModel::OwnerRole ).toString(); bool matchesTextFilter = mTextFilter.isEmpty() || Name.contains( mTextFilter, Qt::CaseInsensitive ) || Description.contains( mTextFilter, Qt::CaseInsensitive ) || Owner.contains( mTextFilter, Qt::CaseInsensitive ); @@ -2488,3 +2488,8 @@ void QFieldCloudProjectsFilterModel::setTextFilter( const QString &newTextFilter mTextFilter = newTextFilter; invalidateFilter(); } + +QString QFieldCloudProjectsFilterModel::textFilter() const +{ + return mTextFilter; +} diff --git a/src/core/qfieldcloudprojectsmodel.h b/src/core/qfieldcloudprojectsmodel.h index 382f0e68a4..f2ca162493 100644 --- a/src/core/qfieldcloudprojectsmodel.h +++ b/src/core/qfieldcloudprojectsmodel.h @@ -511,6 +511,7 @@ class QFieldCloudProjectsFilterModel : public QSortFilterProxyModel Q_PROPERTY( QFieldCloudProjectsModel *projectsModel READ projectsModel WRITE setProjectsModel NOTIFY projectsModelChanged ) Q_PROPERTY( ProjectsFilter filter READ filter WRITE setFilter NOTIFY filterChanged ) Q_PROPERTY( bool showLocalOnly READ showLocalOnly WRITE setShowLocalOnly NOTIFY showLocalOnlyChanged ) + Q_PROPERTY( QString textFilter READ textFilter WRITE setTextFilter NOTIFY textFilterChanged ) public: enum ProjectsFilter @@ -539,7 +540,7 @@ class QFieldCloudProjectsFilterModel : public QSortFilterProxyModel ProjectsFilter filter() const; /** - * Sets the the cloud project \a filter. + * Sets the cloud project \a filter. */ void setFilter( ProjectsFilter filter ); @@ -553,13 +554,18 @@ class QFieldCloudProjectsFilterModel : public QSortFilterProxyModel */ void setShowLocalOnly( bool showLocalOnly ); - Q_INVOKABLE void setTextFilter( const QString &newTextFilter ); + /** + * Sets a filter text to apply to projects. This text will be searched in the project's name, owner's name, and descriptions. + */ + void setTextFilter( const QString &newTextFilter ); + QString textFilter() const; signals: void projectsModelChanged(); void filterChanged(); void showLocalOnlyChanged(); + void textFilterChanged(); protected: virtual bool filterAcceptsRow( int source_row, const QModelIndex &source_parent ) const override; diff --git a/src/qml/QFieldCloudScreen.qml b/src/qml/QFieldCloudScreen.qml index b02c454b80..a15f301a8c 100644 --- a/src/qml/QFieldCloudScreen.qml +++ b/src/qml/QFieldCloudScreen.qml @@ -180,14 +180,10 @@ Page { } } - SearchBar { + QfSearchBar { + id: searchBar Layout.fillWidth: true Layout.preferredHeight: 41 - color: Theme.mainBackgroundColor - - onValidateFilter: function (filter) { - table.model.setTextFilter(filter); - } } Rectangle { @@ -207,7 +203,7 @@ Page { projectsModel: cloudProjectsModel filter: filterBar.currentIndex === 0 ? QFieldCloudProjectsFilterModel.PrivateProjects : QFieldCloudProjectsFilterModel.PublicProjects showLocalOnly: cloudConnection.status !== QFieldCloudConnection.LoggedIn - + textFilter: searchBar.searchTerm onFilterChanged: { if (cloudConnection.state === QFieldCloudConnection.Idle && cloudProjectsModel.busyProjectIds.length === 0) { refreshProjectsList(filter === QFieldCloudProjectsFilterModel.PublicProjects); diff --git a/src/qml/SearchBar.qml b/src/qml/imports/Theme/QfSearchBar.qml similarity index 86% rename from src/qml/SearchBar.qml rename to src/qml/imports/Theme/QfSearchBar.qml index bd3174f9e0..142a988f69 100644 --- a/src/qml/SearchBar.qml +++ b/src/qml/imports/Theme/QfSearchBar.qml @@ -3,10 +3,8 @@ import QtQuick.Controls import org.qfield import Theme -Rectangle { - z: 20 - - signal validateFilter(string text) +Item { + property alias searchTerm: searchBar.text Rectangle { width: parent.width @@ -56,12 +54,6 @@ Rectangle { placeholderText: (!searchBar.activeFocus && text === "" && displayText === "") ? qsTr("Search for project") : "" background: Item { } - Keys.onEnterPressed: { - validateFilter(searchBar.text); - } - Keys.onReturnPressed: { - validateFilter(searchBar.text); - } } } } diff --git a/src/qml/imports/Theme/qmldir b/src/qml/imports/Theme/qmldir index 290b5bf46a..5d13df0b54 100644 --- a/src/qml/imports/Theme/qmldir +++ b/src/qml/imports/Theme/qmldir @@ -18,3 +18,4 @@ QfTabBar 1.0 QfTabBar.qml QfSwipeAnimator 1.0 QfSwipeAnimator.qml QfProgrerssRing 1.0 QfProgrerssRing.qml QfScrollBar 1.0 QfScrollBar.qml +QfSearchBar 1.0 QfSearchBar.qml diff --git a/src/qml/qml.qrc b/src/qml/qml.qrc index 0165e94152..8ab4112fc9 100644 --- a/src/qml/qml.qrc +++ b/src/qml/qml.qrc @@ -118,6 +118,6 @@ QFieldGuide.qml imports/Theme/QfProgrerssRing.qml imports/Theme/QfScrollBar.qml - SearchBar.qml + imports/Theme/QfSearchBar.qml