diff --git a/kio/kfile/kfilemetadataconfigurationwidget.cpp b/kio/kfile/kfilemetadataconfigurationwidget.cpp index 7c12f1d5..9dd15658 100644 --- a/kio/kfile/kfilemetadataconfigurationwidget.cpp +++ b/kio/kfile/kfilemetadataconfigurationwidget.cpp @@ -111,7 +111,7 @@ void KFileMetaDataConfigurationWidget::Private::addItem(const KUrl& uri) const QString label = (m_provider == 0) ? KFileMetaInfo::name(key) - : m_provider->label(uri); + : m_provider->label(key); QListWidgetItem* item = new QListWidgetItem(label, m_metaDataList); item->setData(Qt::UserRole, key); @@ -125,10 +125,8 @@ void KFileMetaDataConfigurationWidget::Private::slotLoadingFinished() // the currently shown file item and add them to the list. Q_ASSERT(m_provider != 0); - QHashIterator it(m_provider->data()); - while (it.hasNext()) { - it.next(); - addItem(it.key()); + foreach (const KFileMetaInfoItem &it, m_provider->data()) { + addItem(KUrl(it.key())); } } diff --git a/kio/kfile/kfilemetadataprovider.cpp b/kio/kfile/kfilemetadataprovider.cpp index 5ec3a6aa..fc147d22 100644 --- a/kio/kfile/kfilemetadataprovider.cpp +++ b/kio/kfile/kfilemetadataprovider.cpp @@ -52,24 +52,22 @@ void KFileMetaDataProvider::setItems(const KFileItemList& items) if (item.isDir()) { const int count = subDirectoriesCount(item.url().pathOrUrl()); if (count == -1) { - m_data.insert(KUrl("kfileitem#size"), QString("Unknown")); + m_data.append(KFileMetaInfoItem("kfileitem#size", QString::fromLatin1("Unknown"))); } else { const QString itemCountString = i18ncp("@item:intable", "%1 item", "%1 items", count); - m_data.insert(KUrl("kfileitem#size"), itemCountString); + m_data.append(KFileMetaInfoItem("kfileitem#size", itemCountString)); } } else { const KFileMetaInfo metaInfo(item.url(), KFileMetaInfo::TechnicalInfo); - foreach (const KFileMetaInfoItem& metaInfoItem, metaInfo.items()) { - m_data.insert(metaInfoItem.key(), metaInfoItem.value()); - } + m_data = metaInfo.items(); - m_data.insert(KUrl("kfileitem#size"), KIO::convertSize(item.size())); + m_data.append(KFileMetaInfoItem("kfileitem#size", KIO::convertSize(item.size()))); } - m_data.insert(KUrl("kfileitem#type"), item.mimeComment()); - m_data.insert(KUrl("kfileitem#modified"), KGlobal::locale()->formatDateTime(item.time(KFileItem::ModificationTime), KLocale::FancyLongDate)); - m_data.insert(KUrl("kfileitem#owner"), item.user()); - m_data.insert(KUrl("kfileitem#permissions"), item.permissionsString()); - m_data.insert(KUrl("kfileitem#mimetype"), item.mimetype()); + m_data.append(KFileMetaInfoItem("kfileitem#type", item.mimeComment())); + m_data.append(KFileMetaInfoItem("kfileitem#modified", KGlobal::locale()->formatDateTime(item.time(KFileItem::ModificationTime), KLocale::FancyLongDate))); + m_data.append(KFileMetaInfoItem("kfileitem#owner", item.user())); + m_data.append(KFileMetaInfoItem("kfileitem#permissions", item.permissionsString())); + m_data.append(KFileMetaInfoItem("kfileitem#mimetype", item.mimetype())); } else if (m_fileItems.count() > 1) { // Calculate the size of all items quint64 totalSize = 0; @@ -78,15 +76,17 @@ void KFileMetaDataProvider::setItems(const KFileItemList& items) totalSize += item.size(); } } - m_data.insert(KUrl("kfileitem#totalSize"), KIO::convertSize(totalSize)); + m_data.append(KFileMetaInfoItem("kfileitem#totalSize", KIO::convertSize(totalSize))); } + qSort(m_data); + emit loadingFinished(); } -QString KFileMetaDataProvider::label(const KUrl& metaDataUri) const +QString KFileMetaDataProvider::label(const QString& metaDataUri) const { - return KFileMetaInfo::name(metaDataUri.prettyUrl()); + return KFileMetaInfo::name(metaDataUri); } KFileItemList KFileMetaDataProvider::items() const @@ -94,12 +94,12 @@ KFileItemList KFileMetaDataProvider::items() const return m_fileItems; } -QHash KFileMetaDataProvider::data() const +KFileMetaInfoItemList KFileMetaDataProvider::data() const { return m_data; } -QWidget* KFileMetaDataProvider::createValueWidget(const KUrl& metaDataUri, +QWidget* KFileMetaDataProvider::createValueWidget(const QString& metaDataUri, const QString& value, QWidget* parent) const { diff --git a/kio/kfile/kfilemetadataprovider_p.h b/kio/kfile/kfilemetadataprovider_p.h index 817991ad..0acf1442 100644 --- a/kio/kfile/kfilemetadataprovider_p.h +++ b/kio/kfile/kfilemetadataprovider_p.h @@ -20,7 +20,6 @@ #ifndef KFILEMETADATAMODEL_H #define KFILEMETADATAMODEL_H -#include #include #include @@ -57,7 +56,7 @@ public: * @return Translated string for the label of the meta data represented * by \p metaDataUri. */ - QString label(const KUrl& metaDataUri) const; + QString label(const QString& metaDataUri) const; /** * @return Meta data for the items that have been set by @@ -65,14 +64,14 @@ public: * be invoked after the signal loadingFinished() has * been received (otherwise no data will be returned). */ - QHash data() const; + KFileMetaInfoItemList data() const; /** * @return Factory method that returns a widget that should be used * to show the meta data represented by \p metaDataUri. A * QLabel will be returned. */ - QWidget* createValueWidget(const KUrl& metaDataUri, + QWidget* createValueWidget(const QString& metaDataUri, const QString& value, QWidget* parent) const; @@ -95,7 +94,7 @@ private: static int subDirectoriesCount(const QString &path); QList m_fileItems; - QHash m_data; + KFileMetaInfoItemList m_data; }; #endif // KFILEMETADATAMODEL_H diff --git a/kio/kfile/kfilemetadatawidget.cpp b/kio/kfile/kfilemetadatawidget.cpp index 60af7abb..3781638f 100644 --- a/kio/kfile/kfilemetadatawidget.cpp +++ b/kio/kfile/kfilemetadatawidget.cpp @@ -168,15 +168,14 @@ void KFileMetaDataWidget::Private::slotLoadingFinished() m_gridLayout->setSpacing(q->fontMetrics().height() / 4); } - QHash data = m_provider->data(); + KFileMetaInfoItemList data = m_provider->data(); // Remove all items, that are marked as hidden in kmetainformationrc KConfig config("kmetainformationrc", KConfig::NoGlobals); KConfigGroup settings = config.group("Show"); - QHash::iterator it = data.begin(); + KFileMetaInfoItemList::iterator it = data.begin(); while (it != data.end()) { - const QString uriString = it.key().prettyUrl(); - if (!settings.readEntry(uriString, true)) { + if (!settings.readEntry(it->key(), true)) { it = data.erase(it); } else { ++it; @@ -186,9 +185,9 @@ void KFileMetaDataWidget::Private::slotLoadingFinished() // Iterate through all remaining items embed the label // and the value as new row in the widget int rowIndex = 0; - const QList keys = data.keys(); - foreach (const KUrl& key, keys) { - const QString value = data.value(key); + foreach (const KFileMetaInfoItem& item, data) { + const QString key = item.key(); + const QString value = item.value(); if (value.isEmpty()) { continue; } diff --git a/kio/kio/kfilemetainfoitem.cpp b/kio/kio/kfilemetainfoitem.cpp index b78da4d2..2e2b474c 100644 --- a/kio/kio/kfilemetainfoitem.cpp +++ b/kio/kio/kfilemetainfoitem.cpp @@ -25,8 +25,8 @@ KFileMetaInfoItem::KFileMetaInfoItem() { } -KFileMetaInfoItem::KFileMetaInfoItem(const KFileMetaInfoItem& item) - : d(item.d) +KFileMetaInfoItem::KFileMetaInfoItem(const KFileMetaInfoItem &other) + : d(other.d) { } @@ -42,10 +42,10 @@ KFileMetaInfoItem::~KFileMetaInfoItem() { } -const KFileMetaInfoItem& KFileMetaInfoItem::operator=(const KFileMetaInfoItem& item) +const KFileMetaInfoItem& KFileMetaInfoItem::operator=(const KFileMetaInfoItem& other) { - d = item.d; - return item; + d = other.d; + return other; } const QString& KFileMetaInfoItem::key() const @@ -53,17 +53,22 @@ const QString& KFileMetaInfoItem::key() const return d->key; } -const QString& KFileMetaInfoItem::name() const -{ - return d->name; -} - const QString& KFileMetaInfoItem::value() const { return d->value; } +const QString& KFileMetaInfoItem::name() const +{ + return d->name; +} + bool KFileMetaInfoItem::isValid() const { return (!d->key.isEmpty() && !d->value.isEmpty()); } + +bool KFileMetaInfoItem::operator<(const KFileMetaInfoItem &other) const +{ + return d->name < other.d->name; +} diff --git a/kio/kio/kfilemetainfoitem.h b/kio/kio/kfilemetainfoitem.h index 415c19db..49647320 100644 --- a/kio/kio/kfilemetainfoitem.h +++ b/kio/kio/kfilemetainfoitem.h @@ -38,7 +38,7 @@ public: /** * @brief Copy constructor **/ - KFileMetaInfoItem(const KFileMetaInfoItem& item); + KFileMetaInfoItem(const KFileMetaInfoItem& other); /** * @brief Constructor used by plugins **/ @@ -50,7 +50,7 @@ public: /** * @brief Copy operator **/ - const KFileMetaInfoItem& operator=(const KFileMetaInfoItem& item); + const KFileMetaInfoItem& operator=(const KFileMetaInfoItem& other); /** * @brief Retrieve the key of this item **/ @@ -59,14 +59,18 @@ public: * @brief Retrieve the value of this item **/ const QString& value() const; + /** + * @brief Returns localized name of the key + **/ + const QString& name() const; /** * @brief Is this a valid item. **/ bool isValid() const; /** - * @brief Returns localized name of the key + * @brief Returns if item is less than other item **/ - const QString& name() const; + bool operator<(const KFileMetaInfoItem &other) const; private: QSharedDataPointer d; };