diff options
| author | Peter Penz <[email protected]> | 2010-02-26 22:03:32 +0000 |
|---|---|---|
| committer | Peter Penz <[email protected]> | 2010-02-26 22:03:32 +0000 |
| commit | 77d9413d075104a797569d56d2a97016daa6540c (patch) | |
| tree | cdb27b8e1fca716c027df60e9702c15e3655252f /src/panels/information/kmetadataconfigurationdialog.cpp | |
| parent | 65106c30375b026fa3c759b684f25af8d2cc31c2 (diff) | |
Meta data configuration cleanups:
- Use RDF labels internally.
- Provide better default settings, which meta data are hidden.
- Allow to configure which meta data is shown also if Nepomuk is turned off.
svn path=/trunk/KDE/kdebase/apps/; revision=1096571
Diffstat (limited to 'src/panels/information/kmetadataconfigurationdialog.cpp')
| -rw-r--r-- | src/panels/information/kmetadataconfigurationdialog.cpp | 142 |
1 files changed, 67 insertions, 75 deletions
diff --git a/src/panels/information/kmetadataconfigurationdialog.cpp b/src/panels/information/kmetadataconfigurationdialog.cpp index e614a35fe..4b791af5a 100644 --- a/src/panels/information/kmetadataconfigurationdialog.cpp +++ b/src/panels/information/kmetadataconfigurationdialog.cpp @@ -17,6 +17,11 @@ *****************************************************************************/ #include "kmetadataconfigurationdialog.h" + +#include "nfotranslator.h" + +#include <kfilemetainfo.h> +#include <kfilemetainfoitem.h> #include "kmetadatawidget.h" #include <klocale.h> @@ -41,7 +46,7 @@ public: void init(); void loadMetaData(); - QString tunedLabel(const QString& label) const; + void addItem(const QUrl& uri); int m_visibleDataTypes; QLabel* m_descriptionLabel; @@ -99,13 +104,13 @@ void KMetaDataConfigurationDialog::Private::loadMetaData() // Add fixed meta data items where the visibility does not // depend on the currently used URL. KMetaDataWidget::MetaDataTypes visibleDataTypes = KMetaDataWidget::TypeData | - KMetaDataWidget::SizeData | - KMetaDataWidget::ModifiedData | - KMetaDataWidget::OwnerData | - KMetaDataWidget::PermissionsData | - KMetaDataWidget::RatingData | - KMetaDataWidget::TagsData | - KMetaDataWidget::CommentData; + KMetaDataWidget::SizeData | + KMetaDataWidget::ModifiedData | + KMetaDataWidget::OwnerData | + KMetaDataWidget::PermissionsData | + KMetaDataWidget::RatingData | + KMetaDataWidget::TagsData | + KMetaDataWidget::CommentData; if (m_metaDataWidget != 0) { visibleDataTypes = m_metaDataWidget->visibleDataTypes(); } @@ -113,30 +118,30 @@ void KMetaDataConfigurationDialog::Private::loadMetaData() typedef QPair<QString, QString> FixedItem; QList<FixedItem> fixedItems; if (visibleDataTypes & KMetaDataWidget::TypeData) { - fixedItems.append(FixedItem("type", i18nc("@item::inlistbox", "Type"))); + fixedItems.append(FixedItem("kfileitem#type", i18nc("@item::inlistbox", "Type"))); } if (visibleDataTypes & KMetaDataWidget::SizeData) { - fixedItems.append(FixedItem("size", i18nc("@item::inlistbox", "Size"))); + fixedItems.append(FixedItem("kfileitem#size", i18nc("@item::inlistbox", "Size"))); } if (visibleDataTypes & KMetaDataWidget::ModifiedData) { - fixedItems.append(FixedItem("modified", i18nc("@item::inlistbox", "Modified"))); + fixedItems.append(FixedItem("kfileitem#modified", i18nc("@item::inlistbox", "Modified"))); } if (visibleDataTypes & KMetaDataWidget::OwnerData) { - fixedItems.append(FixedItem("owner", i18nc("@item::inlistbox", "Owner"))); + fixedItems.append(FixedItem("kfileitem#owner", i18nc("@item::inlistbox", "Owner"))); } if (visibleDataTypes & KMetaDataWidget::PermissionsData) { - fixedItems.append(FixedItem("permissions", i18nc("@item::inlistbox", "Permissions"))); + fixedItems.append(FixedItem("kfileitem#permissions", i18nc("@item::inlistbox", "Permissions"))); } #ifdef HAVE_NEPOMUK if (Nepomuk::ResourceManager::instance()->init() == 0) { if (visibleDataTypes & KMetaDataWidget::RatingData) { - fixedItems.append(FixedItem("rating", i18nc("@item::inlistbox", "Rating"))); + fixedItems.append(FixedItem("kfileitem#rating", i18nc("@item::inlistbox", "Rating"))); } if (visibleDataTypes & KMetaDataWidget::TagsData) { - fixedItems.append(FixedItem("tags", i18nc("@item::inlistbox", "Tags"))); + fixedItems.append(FixedItem("kfileitem#tags", i18nc("@item::inlistbox", "Tags"))); } if (visibleDataTypes & KMetaDataWidget::CommentData) { - fixedItems.append(FixedItem("comment", i18nc("@item::inlistbox", "Comment"))); + fixedItems.append(FixedItem("kfileitem#comment", i18nc("@item::inlistbox", "Comment"))); } } #endif @@ -151,10 +156,6 @@ void KMetaDataConfigurationDialog::Private::loadMetaData() } #ifdef HAVE_NEPOMUK - if (Nepomuk::ResourceManager::instance()->init() != 0) { - return; - } - // Get all meta information labels that are available for // the currently shown file item and add them to the list. if (m_metaDataWidget == 0) { @@ -168,73 +169,64 @@ void KMetaDataConfigurationDialog::Private::loadMetaData() // TODO: handle als usecases for more than one item: return; } - Nepomuk::Resource res(items.first().nepomukUri()); + Nepomuk::Resource res(items.first().nepomukUri()); QHash<QUrl, Nepomuk::Variant> properties = res.properties(); - QHash<QUrl, Nepomuk::Variant>::const_iterator it = properties.constBegin(); - while (it != properties.constEnd()) { - Nepomuk::Types::Property prop(it.key()); - const QString key = prop.name(); - - // Meta information provided by Nepomuk that is already - // available from KFileItem as "fixed item" (see above) - // should not be shown as second entry. - static const char* const hiddenProperties[] = { - "contentSize", // = fixed item "size" - "description", // = fixed item "comment" - "fileExtension", // ~ fixed item "type" - "hasTag", // = fixed item "tags" - "name", // not shown as part of the meta data widget - "lastModified", // = fixed item "modified" - "size", // = fixed item "size" - "mimeType", // = fixed item "type" - "numericRating", // = fixed item "rating" - 0 // mandatory last entry - }; - bool skip = false; - int i = 0; - while (hiddenProperties[i] != 0) { - if (key == hiddenProperties[i]) { - skip = true; - break; - } - ++i; + if (properties.isEmpty()) { + // the file is not indexed or Nepomuk is disabled + KFileMetaInfo metaInfo(items.first().url()); + const QHash<QString, KFileMetaInfoItem> metaInfoItems = metaInfo.items(); + foreach (const KFileMetaInfoItem& metaInfoItem, metaInfoItems) { + addItem(metaInfoItem.name()); } - if (!skip) { - // TODO #1: use Nepomuk::formatValue(res, prop) if available - // instead of it.value().toString() - // TODO #2: using tunedLabel() is a workaround for KDE 4.3 (4.4?) until - // we get translated labels - const QString label = tunedLabel(prop.label()); - QListWidgetItem* item = new QListWidgetItem(label, m_metaDataList); - item->setData(Qt::UserRole, key); - const bool show = settings.readEntry(key, true); - item->setCheckState(show ? Qt::Checked : Qt::Unchecked); + } else { + // show meta information provided by Nepomuk + QHash<QUrl, Nepomuk::Variant>::const_iterator it = properties.constBegin(); + while (it != properties.constEnd()) { + Nepomuk::Types::Property prop(it.key()); + addItem(prop.uri()); + ++it; } - - ++it; } #endif } -QString KMetaDataConfigurationDialog::Private::tunedLabel(const QString& label) const +void KMetaDataConfigurationDialog::Private::addItem(const QUrl& uri) { - QString tunedLabel; - const int labelLength = label.length(); - if (labelLength > 0) { - tunedLabel.reserve(labelLength); - tunedLabel = label[0].toUpper(); - for (int i = 1; i < labelLength; ++i) { - if (label[i].isUpper() && !label[i - 1].isSpace() && !label[i - 1].isUpper()) { - tunedLabel += ' '; - tunedLabel += label[i].toLower(); - } else { - tunedLabel += label[i]; - } + // Meta information provided by Nepomuk that is already + // available from KFileItem as "fixed item" (see above) + // should not be shown as second entry. + static const char* const hiddenProperties[] = { + "http://www.semanticdesktop.org/ontologies/2007/01/19/nie#comment", // = fixed item kfileitem#comment + "http://www.semanticdesktop.org/ontologies/2007/01/19/nie#contentSize", // = fixed item kfileitem#size + "http://www.semanticdesktop.org/ontologies/2007/01/19/nie#lastModified", // = fixed item kfileitem#modified + "http://www.semanticdesktop.org/ontologies/2007/01/19/nie#plainTextContent" // hide this property always + "http://www.semanticdesktop.org/ontologies/2007/01/19/nie#mimeType", // = fixed item kfileitem#type + "http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#fileName", // hide this property always + "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", // = fixed item kfileitem#type + 0 // mandatory last entry + }; + + int i = 0; + const QString key = uri.toString(); + while (hiddenProperties[i] != 0) { + if (key == QLatin1String(hiddenProperties[i])) { + // the item is hidden + return; } + ++i; } - return tunedLabel; + + // the item is not hidden, add it to the list + KConfig config("kmetainformationrc", KConfig::NoGlobals); + KConfigGroup settings = config.group("Show"); + + const QString label = NfoTranslator::instance().translation(uri); + QListWidgetItem* item = new QListWidgetItem(label, m_metaDataList); + item->setData(Qt::UserRole, key); + const bool show = settings.readEntry(key, true); + item->setCheckState(show ? Qt::Checked : Qt::Unchecked); } KMetaDataConfigurationDialog::KMetaDataConfigurationDialog(QWidget* parent, |
