From kde-kimageshop Sun Apr 28 20:05:13 2013 From: s_suelzer () lavabit ! com Date: Sun, 28 Apr 2013 20:05:13 +0000 To: kde-kimageshop Subject: kis_preset_chooser_cpp filter improvements Message-Id: <20130428200513.GA13155 () antares ! fritz ! box> X-MARC-Message: https://marc.info/?l=kde-kimageshop&m=136718007121860 MIME-Version: 1 Content-Type: multipart/mixed; boundary="--mP3DRpeJDSE+ciuQ" --mP3DRpeJDSE+ciuQ Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Improved kis_preset_chooser.cpp preset filtering. Now supports multiple filter strings. Results are updated live. Incrementally for searches based on preset names. Tags only match on their whole word but are queried every time the search string changes. --mP3DRpeJDSE+ciuQ Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="kis_preset_chooser_filtering.patch" From 0c0dfa0e8631b5d535e4b205544645afdeb9a832 Mon Sep 17 00:00:00 2001 From: Sascha Suelzer Date: Sun, 28 Apr 2013 21:45:03 +0200 Subject: [PATCH 1/3] Improved kis_preset_chooser.cpp filtering Now supports multiple preset filters. Filtering of preset names is reflected live, on typing. Tags are supported, too, but only filter after live full match. --- krita/ui/widgets/kis_preset_chooser.cpp | 57 ++++++++++++++++++++++++--------- 1 file changed, 42 insertions(+), 15 deletions(-) diff --git a/krita/ui/widgets/kis_preset_chooser.cpp b/krita/ui/widgets/kis_preset_chooser.cpp index 01f1b7b..068270e 100644 --- a/krita/ui/widgets/kis_preset_chooser.cpp +++ b/krita/ui/widgets/kis_preset_chooser.cpp @@ -124,31 +124,48 @@ public: } virtual ~KisPresetProxyAdapter() {} + virtual QList< KoResource* > resources() { if( ! resourceServer() ) return QList(); QList serverResources = resourceServer()->resources(); - QList resources; + foreach( KisPaintOpPreset* resource, serverResources ) { - if(filterAcceptsPreset(resource) || (m_filterNames && m_filteredNames.contains(resource->filename())) ) { + if(filterAcceptsPreset(resource)) { resources.append( resource ); } } - qSort(resources.begin(), resources.end(), KisPresetProxyAdapter::compareKoResources); return resources; } + bool presetMatchesSearch(KisPaintOpPreset* resource) const + { + QString resourceName = resource->name().toLower(); + + QStringListIterator names(m_filteredNames); + + while (names.hasNext()){ + QString name = names.next(); + + if (resourceName.indexOf(name) >= 0){ + return true; + } + QString resourceFileName = resource->filename(); + if (resourceFileName.indexOf(name) >= 0){ + return true; + } + } + return false; + } bool filterAcceptsPreset(KisPaintOpPreset* preset) const { - if(m_paintopID.id().isEmpty()) + if(m_paintopID.id().isEmpty() || !m_filterNames) return true; + return ((preset->paintOp() == m_paintopID || m_showAll) && presetMatchesSearch(preset)); - return ((preset->paintOp() == m_paintopID || m_showAll) && - preset->name().contains(m_nameFilter, Qt::CaseInsensitive) && - (!m_filterNames || m_filteredNames.contains(preset->name()))); } ///Set id for paintop to be accept by the proxy model, if not filter is set all @@ -244,7 +261,8 @@ void KisPresetChooser::setPresetFilter(const KoID& paintopID) void KisPresetChooser::setFilteredNames(const QStringList filteredNames) { - m_presetProxy->setFilterNames(true); + + m_presetProxy->setFilterNames(!filteredNames.empty()); m_presetProxy->setFilteredNames(filteredNames); m_presetProxy->invalidate(); updateViewSettings(); @@ -252,18 +270,27 @@ void KisPresetChooser::setFilteredNames(const QStringList filteredNames) void KisPresetChooser::searchTextChanged(const QString& searchString) { - if(searchString.isEmpty()) { - m_presetProxy->setFilterNames(false); + QString search = searchString; + search = search.replace(QRegExp("\\s*,+\\s*"),","); + + QStringList filteredNames = search.split(","); + + + filteredNames.removeAll(""); + QStringListIterator names(filteredNames); + + while (names.hasNext()){ + QStringList tags; + QString name = names.next(); + + tags = m_chooser->getTaggedResourceFileNames(name); + filteredNames = filteredNames + tags; } - m_presetProxy->setPresetNameFilter(searchString); - m_presetProxy->invalidate(); - updateViewSettings(); + setFilteredNames(filteredNames); } void KisPresetChooser::returnKeyPressed(QString lineEditText) { - m_presetProxy->setFilterNames(true); - m_presetProxy->setFilteredNames(m_chooser->getTaggedResourceFileNames(lineEditText)); m_presetProxy->invalidate(); updateViewSettings(); } -- 1.8.2 From 1f3b616398abd95055495ce51db5ac2534c41586 Mon Sep 17 00:00:00 2001 From: Sascha Suelzer Date: Sun, 28 Apr 2013 21:50:42 +0200 Subject: [PATCH 2/3] Improved kis_preset_chooser.cpp preset filtering. Now supports multiple filter strings. Results are updated live. Incrementally for searches based on preset names. Tags only match on their whole word. --- krita/ui/widgets/kis_preset_chooser.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/krita/ui/widgets/kis_preset_chooser.cpp b/krita/ui/widgets/kis_preset_chooser.cpp index 068270e..074dfa3 100644 --- a/krita/ui/widgets/kis_preset_chooser.cpp +++ b/krita/ui/widgets/kis_preset_chooser.cpp @@ -275,7 +275,6 @@ void KisPresetChooser::searchTextChanged(const QString& searchString) QStringList filteredNames = search.split(","); - filteredNames.removeAll(""); QStringListIterator names(filteredNames); -- 1.8.2 From c35595192c13f7f56c6303d16cd4467effce0387 Mon Sep 17 00:00:00 2001 From: Sascha Suelzer Date: Sun, 28 Apr 2013 21:55:04 +0200 Subject: [PATCH 3/3] Improved kis_preset_chooser.cpp preset filtering. Now supports multiple filter strings. Results are updated live. Incrementally for searches based on preset names. Tags only match on their whole word. --- krita/ui/widgets/kis_preset_chooser.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/krita/ui/widgets/kis_preset_chooser.cpp b/krita/ui/widgets/kis_preset_chooser.cpp index 074dfa3..e50c98d 100644 --- a/krita/ui/widgets/kis_preset_chooser.cpp +++ b/krita/ui/widgets/kis_preset_chooser.cpp @@ -124,7 +124,6 @@ public: } virtual ~KisPresetProxyAdapter() {} - virtual QList< KoResource* > resources() { if( ! resourceServer() ) return QList(); @@ -140,6 +139,7 @@ public: qSort(resources.begin(), resources.end(), KisPresetProxyAdapter::compareKoResources); return resources; } + bool presetMatchesSearch(KisPaintOpPreset* resource) const { @@ -160,6 +160,7 @@ public: } return false; } + bool filterAcceptsPreset(KisPaintOpPreset* preset) const { if(m_paintopID.id().isEmpty() || !m_filterNames) -- 1.8.2 --mP3DRpeJDSE+ciuQ Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Krita mailing list kimageshop@kde.org https://mail.kde.org/mailman/listinfo/kimageshop --mP3DRpeJDSE+ciuQ--