┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Penz <[email protected]>2010-03-13 15:32:48 +0000
committerPeter Penz <[email protected]>2010-03-13 15:32:48 +0000
commit6b9c4f7b45e07e93afadd50b4a0350ef901e8683 (patch)
tree232e1ff1b5bf9f8e2746c4c2806e1d19399b0d41
parent54a1499586d5395f0f4589ce6deb6431d02eb866 (diff)
Allow to specify a group for a meta data item.
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
-rw-r--r--src/panels/information/kloadmetadatathread.cpp2
-rw-r--r--src/panels/information/kloadmetadatathread_p.h4
-rw-r--r--src/panels/information/kmetadatamodel.cpp22
-rw-r--r--src/panels/information/kmetadatamodel.h16
-rw-r--r--src/panels/information/kmetadatawidget.cpp57
-rw-r--r--src/panels/information/kmetadatawidget.h2
6 files changed, 76 insertions, 27 deletions
diff --git a/src/panels/information/kloadmetadatathread.cpp b/src/panels/information/kloadmetadatathread.cpp
index ba4ebeda5..374cded70 100644
--- a/src/panels/information/kloadmetadatathread.cpp
+++ b/src/panels/information/kloadmetadatathread.cpp
@@ -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;
}
diff --git a/src/panels/information/kloadmetadatathread_p.h b/src/panels/information/kloadmetadatathread_p.h
index be03d262f..d61d6012b 100644
--- a/src/panels/information/kloadmetadatathread_p.h
+++ b/src/panels/information/kloadmetadatathread_p.h
@@ -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;
};
diff --git a/src/panels/information/kmetadatamodel.cpp b/src/panels/information/kmetadatamodel.cpp
index 452156893..6a1898b1f 100644
--- a/src/panels/information/kmetadatamodel.cpp
+++ b/src/panels/information/kmetadatamodel.cpp
@@ -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
diff --git a/src/panels/information/kmetadatamodel.h b/src/panels/information/kmetadatamodel.h
index 4b12563d3..ad8099dad 100644
--- a/src/panels/information/kmetadatamodel.h
+++ b/src/panels/information/kmetadatamodel.h
@@ -21,11 +21,10 @@
#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:
diff --git a/src/panels/information/kmetadatawidget.cpp b/src/panels/information/kmetadatawidget.cpp
index 996238509..d44637432 100644
--- a/src/panels/information/kmetadatawidget.cpp
+++ b/src/panels/information/kmetadatawidget.cpp
@@ -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;
diff --git a/src/panels/information/kmetadatawidget.h b/src/panels/information/kmetadatawidget.h
index 858f1998a..6f5c66041 100644
--- a/src/panels/information/kmetadatawidget.h
+++ b/src/panels/information/kmetadatawidget.h
@@ -25,8 +25,6 @@
#include <QList>
#include <QWidget>
-#include <config-nepomuk.h>
-
class KMetaDataModel;
class KUrl;