]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Allow to specify a group for a meta data item.
authorPeter Penz <peter.penz19@gmail.com>
Sat, 13 Mar 2010 15:32:48 +0000 (15:32 +0000)
committerPeter Penz <peter.penz19@gmail.com>
Sat, 13 Mar 2010 15:32:48 +0000 (15:32 +0000)
The sorting of the meta data items is now done by the group. Within the group the sorting is done by their translated labels.

svn path=/trunk/KDE/kdebase/apps/; revision=1102778

src/panels/information/kloadmetadatathread.cpp
src/panels/information/kloadmetadatathread_p.h
src/panels/information/kmetadatamodel.cpp
src/panels/information/kmetadatamodel.h
src/panels/information/kmetadatawidget.cpp
src/panels/information/kmetadatawidget.h

index ba4ebeda55ee4f121bc6341282c2aca4a6be9bdb..374cded70779fa02caae76573dab63050bbb81ab 100644 (file)
@@ -51,7 +51,7 @@ void KLoadMetaDataThread::load(const KUrl::List& urls)
     start();
 }
 
-QMap<KUrl, Nepomuk::Variant> KLoadMetaDataThread::data() const
+QHash<KUrl, Nepomuk::Variant> KLoadMetaDataThread::data() const
 {
     return m_data;
 }
index be03d262f30be69ba9455e9c447021d36431fae5..d61d6012ba8954ecc0446f85a4433c1b5e3056d8 100644 (file)
@@ -56,7 +56,7 @@ public:
      * valid results after the signal finished() has been
      * emitted.
      */
-    QMap<KUrl, Nepomuk::Variant> data() const;
+    QHash<KUrl, Nepomuk::Variant> data() const;
 
     /**
      * Tells the thread that it should cancel as soon
@@ -90,7 +90,7 @@ private:
 
 private:
     KMetaDataModel* m_model;
-    QMap<KUrl, Nepomuk::Variant> m_data;
+    QHash<KUrl, Nepomuk::Variant> m_data;
     KUrl::List m_urls;
     bool m_canceled;
 };
index 452156893f310545c975c70a58b60619c7ba03bb..6a1898b1f65c024bb55db3d5994a5d326341b4b1 100644 (file)
@@ -33,7 +33,7 @@ public:
 
     QList<KFileItem> m_fileItems;
 #ifdef HAVE_NEPOMUK
-    QMap<KUrl, Nepomuk::Variant> m_data;
+    QHash<KUrl, Nepomuk::Variant> m_data;
 
     QList<KLoadMetaDataThread*> m_metaDataThreads;
     KLoadMetaDataThread* m_latestMetaDataThread;
@@ -122,20 +122,34 @@ void KMetaDataModel::setItems(const KFileItemList& items)
 #endif
 }
 
+QString KMetaDataModel::group(const KUrl& metaDataUri) const
+{
+    QString group; // return value
+
+    const QString uri = metaDataUri.url();
+    if (uri == QLatin1String("http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#width")) {
+        group = QLatin1String("0sizeA");
+    } else if (uri == QLatin1String("http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#height")) {
+        group = QLatin1String("0sizeB");
+    }
+
+    return group;
+}
+
 KFileItemList KMetaDataModel::items() const
 {
     return d->m_fileItems;
 }
 
 #ifdef HAVE_NEPOMUK
-QMap<KUrl, Nepomuk::Variant> KMetaDataModel::data() const
+QHash<KUrl, Nepomuk::Variant> KMetaDataModel::data() const
 {
     return d->m_data;
 }
 
-QMap<KUrl, Nepomuk::Variant> KMetaDataModel::loadData() const
+QHash<KUrl, Nepomuk::Variant> KMetaDataModel::loadData() const
 {
-    return QMap<KUrl, Nepomuk::Variant>();
+    return QHash<KUrl, Nepomuk::Variant>();
 }
 #endif
 
index 4b12563d330e079a360a8b934a59ff9b0114a04e..ad8099dade31739f84ab72073614635ed6960fdd 100644 (file)
 
 #include <kurl.h>
 
+#include <QHash>
 #include <QObject>
-#include <QMap>
 #include <QString>
 
-
 #include <config-nepomuk.h>
 #ifdef HAVE_NEPOMUK
     #define DISABLE_NEPOMUK_LEGACY
@@ -64,6 +63,15 @@ public:
     void setItems(const KFileItemList& items);
     KFileItemList items() const;
 
+    /**
+     * @return Returns the name of the group the meta data indicated
+     *         by \p metaDataUri belongs to. All meta data items are
+     *         sorted by the group. Items within the group are sorted
+     *         by their translated labels. The group name is not shown
+     *         to the user interface and does not need to get translated.
+     */
+    virtual QString group(const KUrl& metaDataUri) const;
+
 #ifdef HAVE_NEPOMUK
     /**
      * @return Meta data for the items that have been set by
@@ -71,7 +79,7 @@ public:
      *         be invoked after the signal loadingFinished() has
      *         been received (otherwise no data will be returned).
      */
-    QMap<KUrl, Nepomuk::Variant> data() const;
+    QHash<KUrl, Nepomuk::Variant> data() const;
 
 protected:
     /**
@@ -83,7 +91,7 @@ protected:
      * blocked if the operation takes longer. The default implementation
      * returns an empty list.
      */
-    virtual QMap<KUrl, Nepomuk::Variant> loadData() const;
+    virtual QHash<KUrl, Nepomuk::Variant> loadData() const;
 #endif
 
 signals:
index 996238509c6b257e5cbe4a747b1c5418bff26524..d44637432aeeead2bb746eae3d16b2926adf43f9 100644 (file)
@@ -47,7 +47,6 @@
     #include <nepomuk/resourcemanager.h>
     #include <nepomuk/property.h>
     #include <nepomuk/tag.h>
-    #include <nepomuk/variant.h>
     #include "nepomukmassupdatejob_p.h"
 
     #include <QMutex>
@@ -108,6 +107,7 @@ public:
      */
     void startChangeDataJob(KJob* job);
 
+    QList<KUrl> sortedKeys(const QHash<KUrl, Nepomuk::Variant>& data) const;
     QList<Nepomuk::Resource> resourceList() const;
 #endif
 
@@ -369,27 +369,26 @@ void KMetaDataWidget::Private::slotLoadingFinished()
     // Show the remaining meta information as text. The number
     // of required rows may very. Existing rows are reused to
     // prevent flickering.
-
     const KNfoTranslator& nfo = KNfoTranslator::instance();
     int rowIndex = m_fixedRowCount;
 
-    QMap<KUrl, Nepomuk::Variant> data = m_model->data();
-    QMap<KUrl, Nepomuk::Variant>::const_iterator it = data.constBegin();
-    while (it != data.constEnd()) {
-        const KUrl key = it.key();
-        const Nepomuk::Variant value = it.value();
-        const QString itemLabel = nfo.translation(it.key());
+    const QHash<KUrl, Nepomuk::Variant> data = m_model->data();
+    const QList<KUrl> keys = sortedKeys(data);
+
+    foreach (const KUrl& key, keys) {
+        const Nepomuk::Variant value = data[key];
+        const QString itemLabel = nfo.translation(key);
 
         bool appliedData = false;
         if (m_nepomukActivated) {
-            const QString key = it.key().url();
-            if (key == QLatin1String("kfileitem#rating")) {
+            const QString keyString = key.url();
+            if (keyString == QLatin1String("kfileitem#rating")) {
                 m_ratingWidget->setRating(value.toInt());
                 appliedData = true;
-            } else if (key == QLatin1String("kfileitem#comment")) {
+            } else if (keyString == QLatin1String("kfileitem#comment")) {
                 m_commentWidget->setText(value.toString());
                 appliedData = true;
-            } else if (key == QLatin1String("kfileitem#tags")) {
+            } else if (keyString == QLatin1String("kfileitem#tags")) {
                 QList<Nepomuk::Variant> variants = value.toVariantList();
                 QList<Nepomuk::Tag> tags;
                 foreach (const Nepomuk::Variant& variant, variants) {
@@ -423,8 +422,6 @@ void KMetaDataWidget::Private::slotLoadingFinished()
             }
             ++rowIndex;
         }
-
-        ++it;
     }
 
     // remove rows that are not needed anymore
@@ -503,6 +500,38 @@ void KMetaDataWidget::Private::startChangeDataJob(KJob* job)
     job->start();
 }
 
+QList<KUrl> KMetaDataWidget::Private::sortedKeys(const QHash<KUrl, Nepomuk::Variant>& data) const
+{
+    const KNfoTranslator& nfo = KNfoTranslator::instance();
+
+    // Create a map, where the translated label prefixed with the
+    // sort priority acts as key. The data of each entry is the URI
+    // of the data. By this the all URIs are sorted by the sort priority
+    // and sub sorted by the translated labels.
+    QMap<QString, KUrl> map;
+    QHash<KUrl, Nepomuk::Variant>::const_iterator hashIt = data.constBegin();
+    while (hashIt != data.constEnd()) {
+        const KUrl uri = hashIt.key();
+
+        QString key = q->model()->group(uri);
+        key += nfo.translation(uri);
+
+        map.insert(key, uri);
+        ++hashIt;
+    }
+
+    // Apply the URIs from the map to the list that will get returned.
+    // The list will then be alphabetically ordered by the translated labels of the URIs.
+    QList<KUrl> list;
+    QMap<QString, KUrl>::const_iterator mapIt = map.constBegin();
+    while (mapIt != map.constEnd()) {
+        list.append(mapIt.value());
+        ++mapIt;
+    }
+
+    return list;
+}
+
 QList<Nepomuk::Resource> KMetaDataWidget::Private::resourceList() const
 {
     QList<Nepomuk::Resource> list;
index 858f1998a35ff12c725ad85ff268ddcb8ef1a182..6f5c66041f4aa0232f397bac4880f295f674393b 100644 (file)
@@ -25,8 +25,6 @@
 #include <QList>
 #include <QWidget>
 
-#include <config-nepomuk.h>
-
 class KMetaDataModel;
 class KUrl;