mirror of
https://invent.kde.org/system/dolphin
synced 2024-09-17 15:31:20 +00:00
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
This commit is contained in:
parent
54a1499586
commit
6b9c4f7b45
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -25,8 +25,6 @@
|
|||
#include <QList>
|
||||
#include <QWidget>
|
||||
|
||||
#include <config-nepomuk.h>
|
||||
|
||||
class KMetaDataModel;
|
||||
class KUrl;
|
||||
|
||||
|
|
Loading…
Reference in a new issue