kis_preset_chooser_cpp filter improvements

s_suelzer at lavabit.com s_suelzer at lavabit.com
Sun Apr 28 20:05:13 UTC 2013


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.
-------------- next part --------------
>From 0c0dfa0e8631b5d535e4b205544645afdeb9a832 Mon Sep 17 00:00:00 2001
From: Sascha Suelzer <s.suelzer at lavabit.com>
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<KoResource*>();
 
         QList<KisPaintOpPreset*> serverResources = resourceServer()->resources();
-
         QList<KoResource*> 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 <s.suelzer at lavabit.com>
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 <s.suelzer at lavabit.com>
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<KoResource*>();
@@ -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



More information about the kimageshop mailing list