[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [digikam/frameworks] libs/database/utils: Add tagsContaining / tagsStartingWith
From:       Marcel Wiesweg <marcel.wiesweg () gmx ! de>
Date:       2015-09-20 15:55:03
Message-ID: E1ZdgxD-0004Wq-VA () scm ! kde ! org
[Download RAW message or body]

Git commit 9e3a43e1c77d8100e3c65bc13a0b454aa48d504b by Marcel Wiesweg.
Committed on 20/09/2015 at 15:47.
Pushed by mwiesweg into branch 'frameworks'.

Add tagsContaining / tagsStartingWith

M  +41   -0    libs/database/utils/tagscache.cpp
M  +10   -0    libs/database/utils/tagscache.h

http://commits.kde.org/digikam/9e3a43e1c77d8100e3c65bc13a0b454aa48d504b

diff --git a/libs/database/utils/tagscache.cpp b/libs/database/utils/tagscache.cpp
index fa78978..f544587 100644
--- a/libs/database/utils/tagscache.cpp
+++ b/libs/database/utils/tagscache.cpp
@@ -224,6 +224,9 @@ public:
             pickLabelsTags      = pickTags;
         }
     }
+
+    QList<int> tagsForFragment(bool (QString::*stringFunction)(const QString &, \
Qt::CaseSensitivity cs) const, +                               const QString& \
fragment, Qt::CaseSensitivity caseSensitivity, HiddenTagsPolicy hiddenTagsPolicy);  \
};  
 // ------------------------------------------------------------------------------------------
 @@ -1079,4 +1082,42 @@ QStringList TagsCache::shortenedTagPaths(const QList<int>& \
                ids,
     return ImagePropertiesTab::shortenedTagPaths(tagPaths(ids, slashPolicy, \
hiddenTagsPolicy));  }
 
+QList<int> TagsCache::TagsCachePriv::tagsForFragment(bool \
(QString::*stringFunction)(const QString &, Qt::CaseSensitivity cs) const, +          \
const QString& fragment, +                                                     \
Qt::CaseSensitivity caseSensitivity, +                                                \
HiddenTagsPolicy hiddenTagsPolicy) +{
+    checkNameHash();
+    QList<int> ids;
+    QMultiHash<QString, int>::const_iterator it;
+    const bool excludeHiddenTags = hiddenTagsPolicy == NoHiddenTags;
+
+    if (excludeHiddenTags)
+    {
+        checkProperties();
+    }
+
+    QReadLocker locker(&lock);
+    for (it = nameHash.constBegin(); it != nameHash.constEnd(); ++it)
+    {
+        if ( (!excludeHiddenTags || !internalTags.contains(it.value())) && \
(it.key().*stringFunction)(fragment, caseSensitivity)) +        {
+            ids << it.value();
+        }
+    }
+    return ids;
+}
+
+QList<int> TagsCache::tagsStartingWith(const QString& fragment, Qt::CaseSensitivity \
caseSensitivity, +                                      HiddenTagsPolicy \
hiddenTagsPolicy) +{
+    return d->tagsForFragment(&QString::startsWith, fragment, caseSensitivity, \
hiddenTagsPolicy); +}
+
+QList<int> TagsCache::tagsContaining(const QString& fragment, Qt::CaseSensitivity \
caseSensitivity, +                                      HiddenTagsPolicy \
hiddenTagsPolicy) +{
+    return d->tagsForFragment(&QString::contains, fragment, caseSensitivity, \
hiddenTagsPolicy); +}
+
 } // namespace Digikam
diff --git a/libs/database/utils/tagscache.h b/libs/database/utils/tagscache.h
index 4ca5ac7..a09e46d 100644
--- a/libs/database/utils/tagscache.h
+++ b/libs/database/utils/tagscache.h
@@ -254,6 +254,16 @@ public:
      */
     int pickLabelFromTags(QList<int> tagIds);
 
+    /**
+     * Returns a list of tag ids whose tag name (not path) starts with /  contains \
the given fragment +     */
+    QList<int> tagsContaining(const QString& fragment,
+                               Qt::CaseSensitivity caseSensitivity = \
Qt::CaseInsensitive, +                               HiddenTagsPolicy \
hiddenTagsPolicy = NoHiddenTags); +    QList<int> tagsStartingWith(const QString& \
begin, +                                Qt::CaseSensitivity caseSensitivity = \
Qt::CaseInsensitive, +                                HiddenTagsPolicy \
hiddenTagsPolicy = NoHiddenTags); +
     static QLatin1String tagPathOfDigikamInternalTags(LeadingSlashPolicy slashPolicy \
= IncludeLeadingSlash);  static QLatin1String propertyNameDigikamInternalTag();
     static QLatin1String propertyNameExcludedFromWriting();


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic