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;
#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
#include <kurl.h>
+#include <QHash>
#include <QObject>
-#include <QMap>
#include <QString>
-
#include <config-nepomuk.h>
#ifdef HAVE_NEPOMUK
#define DISABLE_NEPOMUK_LEGACY
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
* 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:
/**
* 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:
#include <nepomuk/resourcemanager.h>
#include <nepomuk/property.h>
#include <nepomuk/tag.h>
- #include <nepomuk/variant.h>
#include "nepomukmassupdatejob_p.h"
#include <QMutex>
*/
void startChangeDataJob(KJob* job);
+ QList<KUrl> sortedKeys(const QHash<KUrl, Nepomuk::Variant>& data) const;
QList<Nepomuk::Resource> resourceList() const;
#endif
// 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) {
}
++rowIndex;
}
-
- ++it;
}
// remove rows that are not needed anymore
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;