diff options
| author | Peter Penz <[email protected]> | 2010-03-22 22:23:02 +0000 |
|---|---|---|
| committer | Peter Penz <[email protected]> | 2010-03-22 22:23:02 +0000 |
| commit | caf017c2fefa8280046b02cfd071a118f2909ced (patch) | |
| tree | a17f5bd569830806d679c7aedf103861ff9b2507 /src/panels/information/kmetadatawidget.cpp | |
| parent | 622acabf23b6c8c3badab6a8c2e93e0ae8963f1b (diff) | |
Use KFileMetaDataWidget from kdelibs. Still open: Provide dialog which wraps KFileMetaDataConfigurationWidget.
svn path=/trunk/KDE/kdebase/apps/; revision=1106465
Diffstat (limited to 'src/panels/information/kmetadatawidget.cpp')
| -rw-r--r-- | src/panels/information/kmetadatawidget.cpp | 791 |
1 files changed, 0 insertions, 791 deletions
diff --git a/src/panels/information/kmetadatawidget.cpp b/src/panels/information/kmetadatawidget.cpp deleted file mode 100644 index 654962aa4..000000000 --- a/src/panels/information/kmetadatawidget.cpp +++ /dev/null @@ -1,791 +0,0 @@ -/***************************************************************************** - * Copyright (C) 2008 by Sebastian Trueg <[email protected]> * - * Copyright (C) 2009-2010 by Peter Penz <[email protected]> * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Library General Public * - * License version 2 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Library General Public License for more details. * - * * - * You should have received a copy of the GNU Library General Public License * - * along with this library; see the file COPYING.LIB. If not, write to * - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * - * Boston, MA 02110-1301, USA. * - *****************************************************************************/ - -#include "kmetadatawidget.h" - -#include <kconfig.h> -#include <kconfiggroup.h> -#include <kfileitem.h> -#include <kglobalsettings.h> -#include <kglobal.h> -#include <klocale.h> -#include "kmetadatamodel.h" -#include "knfotranslator_p.h" - -#include <QEvent> -#include <QFontMetrics> -#include <QGridLayout> -#include <QLabel> -#include <QList> -#include <QString> - -#include <config-nepomuk.h> -#ifdef HAVE_NEPOMUK - #define DISABLE_NEPOMUK_LEGACY - - #include "kcommentwidget_p.h" - #include "ktaggingwidget_p.h" - - #include <nepomuk/kratingwidget.h> - #include <nepomuk/resource.h> - #include <nepomuk/resourcemanager.h> - #include <nepomuk/property.h> - #include <nepomuk/tag.h> - #include "nepomukmassupdatejob_p.h" - - #include <QMutex> - #include <QSpacerItem> - #include <QThread> -#else - namespace Nepomuk - { - typedef int Tag; - } -#endif - -class KMetaDataWidget::Private -{ -public: - struct Row - { - QLabel* label; - QLabel* defaultValueWidget; - QWidget* customValueWidget; - }; - - Private(KMetaDataWidget* parent); - ~Private(); - - void addRow(QLabel* label, QLabel* valueWidget); - void setCustomValueWidget(int rowIndex, QWidget* valueWidget); - void setRowVisible(QWidget* valueWidget, bool visible); - - /** - * Initializes the configuration file "kmetainformationrc" - * with proper default settings for the first start in - * an uninitialized environment. - */ - void initMetaInfoSettings(); - - /** - * Parses the configuration file "kmetainformationrc" and - * updates the visibility of all rows. - */ - void updateRowsVisibility(); - - void slotLoadingFinished(); - - void slotRatingChanged(unsigned int rating); - void slotTagsChanged(const QList<Nepomuk::Tag>& tags); - void slotCommentChanged(const QString& comment); - - void slotMetaDataUpdateDone(); - void slotLinkActivated(const QString& link); - - void slotTagActivated(const Nepomuk::Tag& tag); - -#ifdef HAVE_NEPOMUK - /** - * Disables the metadata widget and starts the job that - * changes the meta data asynchronously. After the job - * has been finished, the metadata widget gets enabled again. - */ - void startChangeDataJob(KJob* job); - - QList<KUrl> sortedKeys(const QHash<KUrl, Nepomuk::Variant>& data) const; - QList<Nepomuk::Resource> resourceList() const; -#endif - - bool m_sizeVisible; - bool m_readOnly; - bool m_nepomukActivated; - int m_fixedRowCount; - MetaDataTypes m_visibleDataTypes; - QList<KFileItem> m_fileItems; - QList<Row> m_rows; - - KMetaDataModel* m_model; - - QGridLayout* m_gridLayout; - - QLabel* m_typeInfo; - QLabel* m_sizeLabel; - QLabel* m_sizeInfo; - QLabel* m_modifiedInfo; - QLabel* m_ownerInfo; - QLabel* m_permissionsInfo; - -#ifdef HAVE_NEPOMUK - KRatingWidget* m_ratingWidget; - KTaggingWidget* m_taggingWidget; - KCommentWidget* m_commentWidget; -#endif - -private: - KMetaDataWidget* const q; -}; - -KMetaDataWidget::Private::Private(KMetaDataWidget* parent) : - m_sizeVisible(true), - m_readOnly(false), - m_nepomukActivated(false), - m_fixedRowCount(0), - m_visibleDataTypes(TypeData | SizeData | ModifiedData | OwnerData | - PermissionsData | RatingData | TagsData | CommentData), - m_fileItems(), - m_rows(), - m_model(0), - m_gridLayout(0), - m_typeInfo(0), - m_sizeLabel(0), - m_sizeInfo(0), - m_modifiedInfo(0), - m_ownerInfo(0), - m_permissionsInfo(0), -#ifdef HAVE_NEPOMUK - m_ratingWidget(0), - m_taggingWidget(0), - m_commentWidget(0), -#endif - q(parent) -{ - const QFontMetrics fontMetrics(KGlobalSettings::smallestReadableFont()); - - m_gridLayout = new QGridLayout(parent); - m_gridLayout->setMargin(0); - m_gridLayout->setSpacing(fontMetrics.height() / 4); - - m_typeInfo = new QLabel(parent); - m_sizeLabel = new QLabel(parent); - m_sizeInfo = new QLabel(parent); - m_modifiedInfo = new QLabel(parent); - m_ownerInfo = new QLabel(parent); - m_permissionsInfo = new QLabel(parent); - -#ifdef HAVE_NEPOMUK - m_nepomukActivated = (Nepomuk::ResourceManager::instance()->init() == 0); - if (m_nepomukActivated) { - m_ratingWidget = new KRatingWidget(parent); - m_ratingWidget->setFixedHeight(fontMetrics.height()); - const Qt::Alignment align = (parent->layoutDirection() == Qt::LeftToRight) ? - Qt::AlignLeft : Qt::AlignRight; - m_ratingWidget->setAlignment(align); - connect(m_ratingWidget, SIGNAL(ratingChanged(unsigned int)), - q, SLOT(slotRatingChanged(unsigned int))); - m_ratingWidget->setVisible(false); - - m_taggingWidget = new KTaggingWidget(parent); - connect(m_taggingWidget, SIGNAL(tagsChanged(const QList<Nepomuk::Tag>&)), - q, SLOT(slotTagsChanged(const QList<Nepomuk::Tag>&))); - connect(m_taggingWidget, SIGNAL(tagActivated(const Nepomuk::Tag&)), - q, SLOT(slotTagActivated(const Nepomuk::Tag&))); - m_taggingWidget->setVisible(false); - - m_commentWidget = new KCommentWidget(parent); - connect(m_commentWidget, SIGNAL(commentChanged(const QString&)), - q, SLOT(slotCommentChanged(const QString&))); - m_commentWidget->setVisible(false); - } -#endif - - initMetaInfoSettings(); -} - -KMetaDataWidget::Private::~Private() -{ -} - -void KMetaDataWidget::Private::addRow(QLabel* label, QLabel* valueWidget) -{ - Row row; - row.label = label; - row.defaultValueWidget = valueWidget; - row.customValueWidget = 0; - m_rows.append(row); - - const QFont smallFont = KGlobalSettings::smallestReadableFont(); - // use a brighter color for the label and a small font size - QPalette palette = label->palette(); - const QPalette::ColorRole role = q->foregroundRole(); - QColor textColor = palette.color(role); - textColor.setAlpha(128); - palette.setColor(role, textColor); - label->setPalette(palette); - label->setForegroundRole(role); - label->setFont(smallFont); - label->setWordWrap(true); - label->setAlignment(Qt::AlignTop | Qt::AlignRight); - - valueWidget->setForegroundRole(role); - valueWidget->setFont(smallFont); - valueWidget->setWordWrap(true); - valueWidget->setAlignment(Qt::AlignTop | Qt::AlignLeft); - - // add the row to grid layout - const int rowIndex = m_rows.count() - 1; - m_gridLayout->addWidget(label, rowIndex, 0, Qt::AlignRight); - const int spacerWidth = QFontMetrics(smallFont).size(Qt::TextSingleLine, " ").width(); - m_gridLayout->addItem(new QSpacerItem(spacerWidth, 1), rowIndex, 1); - m_gridLayout->addWidget(valueWidget, rowIndex, 2, Qt::AlignLeft); -} - -void KMetaDataWidget::Private::setCustomValueWidget(int rowIndex, QWidget* valueWidget) -{ - Row& row = m_rows[rowIndex]; - - if (valueWidget == 0) { - // remove current custom value widget from the grid and replace it - // by the default value widget - if (row.customValueWidget != 0) { - row.customValueWidget->setVisible(false); - m_gridLayout->removeWidget(row.customValueWidget); - } - m_gridLayout->addWidget(row.defaultValueWidget, rowIndex, 2, Qt::AlignLeft); - row.defaultValueWidget->setVisible(true); - } else { - // remove the default value widget from the grid and replace it - // by the custom value widget - row.defaultValueWidget->setVisible(false); - m_gridLayout->removeWidget(row.defaultValueWidget); - m_gridLayout->addWidget(valueWidget, rowIndex, 2, Qt::AlignLeft); - valueWidget->setVisible(true); - } - - row.customValueWidget = valueWidget; -} - -void KMetaDataWidget::Private::setRowVisible(QWidget* valueWidget, bool visible) -{ - foreach (const Row& row, m_rows) { - const bool found = (row.defaultValueWidget == valueWidget) || - (row.customValueWidget == valueWidget); - if (found) { - row.label->setVisible(visible); - if (row.customValueWidget != 0) { - row.customValueWidget->setVisible(visible); - row.defaultValueWidget->setVisible(false); - } else { - row.defaultValueWidget->setVisible(visible); - } - return; - } - } -} - -void KMetaDataWidget::Private::initMetaInfoSettings() -{ - const int currentVersion = 3; // increase version, if the blacklist of disabled - // properties should be updated - - KConfig config("kmetainformationrc", KConfig::NoGlobals); - if (config.group("Misc").readEntry("version", 0) < currentVersion) { - // The resource file is read the first time. Assure - // that some meta information is disabled per default. - - // clear old info - config.deleteGroup("Show"); - KConfigGroup settings = config.group("Show"); - - static const char* const disabledProperties[] = { - "http://www.semanticdesktop.org/ontologies/2007/01/19/nie#comment", - "http://www.semanticdesktop.org/ontologies/2007/01/19/nie#contentSize", - "http://www.semanticdesktop.org/ontologies/2007/01/19/nie#depends", - "http://www.semanticdesktop.org/ontologies/2007/01/19/nie#isPartOf", - "http://www.semanticdesktop.org/ontologies/2007/01/19/nie#lastModified", - "http://www.semanticdesktop.org/ontologies/2007/01/19/nie#mimeType", - "http://www.semanticdesktop.org/ontologies/2007/01/19/nie#plainTextContent", - "http://www.semanticdesktop.org/ontologies/2007/01/19/nie#url", - "http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#averageBitrate", - "http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#channels", - "http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#fileName", - "http://www.semanticdesktop.org/ontologies/2007/05/10/nexif#apertureValue", - "http://www.semanticdesktop.org/ontologies/2007/05/10/nexif#exposureBiasValue", - "http://www.semanticdesktop.org/ontologies/2007/05/10/nexif#exposureTime", - "http://www.semanticdesktop.org/ontologies/2007/05/10/nexif#flash", - "http://www.semanticdesktop.org/ontologies/2007/05/10/nexif#focalLength", - "http://www.semanticdesktop.org/ontologies/2007/05/10/nexif#focalLengthIn35mmFilm", - "http://www.semanticdesktop.org/ontologies/2007/05/10/nexif#isoSpeedRatings", - "http://www.semanticdesktop.org/ontologies/2007/05/10/nexif#make", - "http://www.semanticdesktop.org/ontologies/2007/05/10/nexif#meteringMode", - "http://www.semanticdesktop.org/ontologies/2007/05/10/nexif#model", - "http://www.semanticdesktop.org/ontologies/2007/05/10/nexif#orientation", - "http://www.semanticdesktop.org/ontologies/2007/05/10/nexif#whiteBalance", - "http://www.semanticdesktop.org/ontologies/2007/08/15/nao#description", - "http://www.semanticdesktop.org/ontologies/2007/08/15/nao#hasTag", - "http://www.semanticdesktop.org/ontologies/2007/08/15/nao#lastModified", - "http://www.semanticdesktop.org/ontologies/2007/08/15/nao#numericRating", - "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", - "kfileitem#owner", - "kfileitem#permissions", - 0 // mandatory last entry - }; - - for (int i = 0; disabledProperties[i] != 0; ++i) { - settings.writeEntry(disabledProperties[i], false); - } - - // mark the group as initialized - config.group("Misc").writeEntry("version", currentVersion); - } -} - -void KMetaDataWidget::Private::updateRowsVisibility() -{ - KConfig config("kmetainformationrc", KConfig::NoGlobals); - KConfigGroup settings = config.group("Show"); - - setRowVisible(m_typeInfo, - (m_visibleDataTypes & KMetaDataWidget::TypeData) && - settings.readEntry("kfileitem#type", true)); - - // Cache in m_sizeVisible whether the size should be shown. This - // is necessary as the size is temporary hidden when the target - // file item is a directory. - m_sizeVisible = (m_visibleDataTypes & KMetaDataWidget::SizeData) && - settings.readEntry("kfileitem#size", true); - bool visible = m_sizeVisible; - if (visible && (m_fileItems.count() == 1)) { - // don't show the size information, if one directory is shown - const KFileItem item = m_fileItems.first(); - visible = !item.isNull() && !item.isDir(); - } - setRowVisible(m_sizeInfo, visible); - - setRowVisible(m_modifiedInfo, - (m_visibleDataTypes & KMetaDataWidget::ModifiedData) && - settings.readEntry("kfileitem#modified", true)); - - setRowVisible(m_ownerInfo, - (m_visibleDataTypes & KMetaDataWidget::OwnerData) && - settings.readEntry("kfileitem#owner", true)); - - setRowVisible(m_permissionsInfo, - (m_visibleDataTypes & KMetaDataWidget::PermissionsData) && - settings.readEntry("kfileitem#permissions", true)); - -#ifdef HAVE_NEPOMUK - if (m_nepomukActivated) { - setRowVisible(m_ratingWidget, - (m_visibleDataTypes & KMetaDataWidget::RatingData) && - settings.readEntry("kfileitem#rating", true)); - - setRowVisible(m_taggingWidget, - (m_visibleDataTypes & KMetaDataWidget::TagsData) && - settings.readEntry("kfileitem#tags", true)); - - setRowVisible(m_commentWidget, - (m_visibleDataTypes & KMetaDataWidget::CommentData) && - settings.readEntry("kfileitem#comment", true)); - } -#endif -} - -void KMetaDataWidget::Private::slotLoadingFinished() -{ -#ifdef HAVE_NEPOMUK - // Show the remaining meta information as text. The number - // of required rows may very. Existing rows are reused to - // prevent flickering and to increase the performance. - int rowIndex = m_fixedRowCount; - - 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 = q->label(key); - - const bool valueApplied = q->setValue(key, value); - if (rowIndex >= m_rows.count()) { - // a new row must get created - QLabel* label = new QLabel(itemLabel, q); - QLabel* valueWidget = new QLabel(q); - connect(valueWidget, SIGNAL(linkActivated(QString)), - q, SLOT(slotLinkActivated(QString))); - addRow(label, valueWidget); - } - - Q_ASSERT(m_rows[rowIndex].label != 0); - Q_ASSERT(m_rows[rowIndex].defaultValueWidget != 0); - - // set label - m_rows[rowIndex].label->setText(itemLabel); - - // set value - if (valueApplied) { - setCustomValueWidget(rowIndex, q->valueWidget(key)); - } else { - QLabel* valueWidget = m_rows[rowIndex].defaultValueWidget; - valueWidget->setText(value.toString()); - setCustomValueWidget(rowIndex, 0); - } - ++rowIndex; - } - - // remove rows that are not needed anymore - for (int i = m_rows.count() - 1; i >= rowIndex; --i) { - delete m_rows[i].label; - delete m_rows[i].defaultValueWidget; - m_rows.pop_back(); - } -#endif - - q->updateGeometry(); -} - -void KMetaDataWidget::Private::slotRatingChanged(unsigned int rating) -{ -#ifdef HAVE_NEPOMUK - Nepomuk::MassUpdateJob* job = - Nepomuk::MassUpdateJob::rateResources(resourceList(), rating); - startChangeDataJob(job); -#else - Q_UNUSED(rating); -#endif -} - -void KMetaDataWidget::Private::slotTagsChanged(const QList<Nepomuk::Tag>& tags) -{ -#ifdef HAVE_NEPOMUK - m_taggingWidget->setTags(tags); - - Nepomuk::MassUpdateJob* job = - Nepomuk::MassUpdateJob::tagResources(resourceList(), tags); - startChangeDataJob(job); -#else - Q_UNUSED(tags); -#endif -} - -void KMetaDataWidget::Private::slotCommentChanged(const QString& comment) -{ -#ifdef HAVE_NEPOMUK - Nepomuk::MassUpdateJob* job = - Nepomuk::MassUpdateJob::commentResources(resourceList(), comment); - startChangeDataJob(job); -#else - Q_UNUSED(comment); -#endif -} - -void KMetaDataWidget::Private::slotTagActivated(const Nepomuk::Tag& tag) -{ -#ifdef HAVE_NEPOMUK - emit q->urlActivated(tag.resourceUri()); -#else - Q_UNUSED(tag); -#endif -} - -void KMetaDataWidget::Private::slotMetaDataUpdateDone() -{ -#ifdef HAVE_NEPOMUK - q->setEnabled(true); -#endif -} - -void KMetaDataWidget::Private::slotLinkActivated(const QString& link) -{ - emit q->urlActivated(KUrl(link)); -} - -#ifdef HAVE_NEPOMUK -void KMetaDataWidget::Private::startChangeDataJob(KJob* job) -{ - connect(job, SIGNAL(result(KJob*)), - q, SLOT(slotMetaDataUpdateDone())); - q->setEnabled(false); // no updates during execution - job->start(); -} - -QList<KUrl> KMetaDataWidget::Private::sortedKeys(const QHash<KUrl, Nepomuk::Variant>& data) const -{ - // 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 += q->label(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; - foreach (const KFileItem& item, m_fileItems) { - const KUrl url = item.url(); - list.append(Nepomuk::Resource(url)); - } - return list; -} -#endif - -KMetaDataWidget::KMetaDataWidget(QWidget* parent) : - QWidget(parent), - d(new Private(this)) -{ -} - -KMetaDataWidget::~KMetaDataWidget() -{ - delete d; -} - -void KMetaDataWidget::setItem(const KFileItem& item) -{ - // update values for "type", "size", "modified", - // "owner" and "permissions" synchronously - d->m_sizeLabel->setText(i18nc("@label", "Size")); - if (item.isDir()) { - d->m_typeInfo->setText(i18nc("@label", "Folder")); - d->setRowVisible(d->m_sizeInfo, false); - } else { - d->m_typeInfo->setText(item.mimeComment()); - d->m_sizeInfo->setText(KIO::convertSize(item.size())); - d->setRowVisible(d->m_sizeInfo, d->m_sizeVisible); - } - d->m_modifiedInfo->setText(KGlobal::locale()->formatDateTime(item.time(KFileItem::ModificationTime), KLocale::FancyLongDate)); - d->m_ownerInfo->setText(item.user()); - d->m_permissionsInfo->setText(item.permissionsString()); - - setItems(KFileItemList() << item); -} - -void KMetaDataWidget::setItems(const KFileItemList& items) -{ - d->m_fileItems = items; - if (d->m_model != 0) { - d->m_model->setItems(items); - } - - if (items.count() > 1) { - // calculate the size of all items and show this - // information to the user - d->m_sizeLabel->setText(i18nc("@label", "Total Size:")); - d->setRowVisible(d->m_sizeInfo, d->m_sizeVisible); - - quint64 totalSize = 0; - foreach (const KFileItem& item, items) { - if (!item.isDir() && !item.isLink()) { - totalSize += item.size(); - } - } - d->m_sizeInfo->setText(KIO::convertSize(totalSize)); - } -} - -void KMetaDataWidget::setItem(const KUrl& url) -{ - KFileItem item(KFileItem::Unknown, KFileItem::Unknown, url); - item.refresh(); - setItem(item); -} - -void KMetaDataWidget::setItems(const QList<KUrl>& urls) -{ - KFileItemList items; - foreach (const KUrl& url, urls) { - KFileItem item(KFileItem::Unknown, KFileItem::Unknown, url); - item.refresh(); - items.append(item); - } - setItems(items); -} - -KFileItemList KMetaDataWidget::items() const -{ - return d->m_fileItems; -} - -void KMetaDataWidget::setModel(KMetaDataModel* model) -{ - if (d->m_model != 0) { - disconnect(d->m_model, SIGNAL(loadingFinished())); - } - d->m_model = model; - connect(d->m_model, SIGNAL(loadingFinished()), this, SLOT(slotLoadingFinished())); -} - -KMetaDataModel* KMetaDataWidget::model() const -{ - return d->m_model; -} - -void KMetaDataWidget::setReadOnly(bool readOnly) -{ - d->m_readOnly = readOnly; -#ifdef HAVE_NEPOMUK - // TODO: encapsulate this code as part of a metadata-model for KDE 4.5 - if (d->m_taggingWidget) - d->m_taggingWidget->setReadOnly(readOnly); - if (d->m_commentWidget) - d->m_commentWidget->setReadOnly(readOnly); -#endif -} - -bool KMetaDataWidget::isReadOnly() const -{ - return d->m_readOnly; -} - -void KMetaDataWidget::setVisibleDataTypes(MetaDataTypes data) -{ - d->m_visibleDataTypes = data; - d->updateRowsVisibility(); -} - -KMetaDataWidget::MetaDataTypes KMetaDataWidget::visibleDataTypes() const -{ - return d->m_visibleDataTypes; -} - -QSize KMetaDataWidget::sizeHint() const -{ - const int fixedWidth = 200; - - int height = d->m_gridLayout->margin() * 2 + - d->m_gridLayout->spacing() * (d->m_rows.count() - 1); - - foreach (const Private::Row& row, d->m_rows) { - QWidget* valueWidget = row.defaultValueWidget; - if (valueWidget != 0) { - if (row.customValueWidget != 0) { - valueWidget = row.customValueWidget; - } - - int rowHeight = valueWidget->heightForWidth(fixedWidth / 2); - if (rowHeight <= 0) { - rowHeight = valueWidget->sizeHint().height(); - } - height += rowHeight; - } - } - - return QSize(fixedWidth, height); -} - -QString KMetaDataWidget::label(const KUrl& metaDataUri) const -{ - QString label; - const QString uri = metaDataUri.url(); - if (uri == QLatin1String("kfileitem#rating")) { - label = i18nc("@label", "Rating"); - } else if (uri == QLatin1String("kfileitem#tags")) { - label = i18nc("@label", "Tags"); - } else if (uri == QLatin1String("kfileitem#comment")) { - label = i18nc("@label", "Comment"); - } else { - label = KNfoTranslator::instance().translation(metaDataUri); - } - - return label; -} - -#ifdef HAVE_NEPOMUK -QWidget* KMetaDataWidget::valueWidget(const KUrl& metaDataUri) const -{ - QWidget* widget = 0; - - if (d->m_nepomukActivated) { - const QString uri = metaDataUri.url(); - if (uri == QLatin1String("kfileitem#rating")) { - widget = d->m_ratingWidget; - } else if (uri == QLatin1String("kfileitem#tags")) { - widget = d->m_taggingWidget; - } else if (uri == QLatin1String("kfileitem#comment")) { - widget = d->m_commentWidget; - } - } - - return widget; -} - -bool KMetaDataWidget::setValue(const KUrl& metaDataUri, const Nepomuk::Variant& value) -{ - if (d->m_nepomukActivated) { - QWidget* widget = valueWidget(metaDataUri); - if (widget == d->m_ratingWidget) { - d->m_ratingWidget->setRating(value.toInt()); - return true; - } - - if (widget == d->m_taggingWidget) { - QList<Nepomuk::Variant> variants = value.toVariantList(); - QList<Nepomuk::Tag> tags; - foreach (const Nepomuk::Variant& variant, variants) { - const Nepomuk::Resource resource = variant.toResource(); - tags.append(static_cast<Nepomuk::Tag>(resource)); - } - d->m_taggingWidget->setTags(tags); - return true; - } - - if (widget == d->m_commentWidget) { - d->m_commentWidget->setText(value.toString()); - return true; - } - } - return false; -} -#endif - -bool KMetaDataWidget::event(QEvent* event) -{ - if (event->type() == QEvent::Polish) { - // The adding of rows is not done in the constructor. This allows the - // client of KMetaDataWidget to set a proper foreground role which - // will be respected by the rows. - - d->addRow(new QLabel(i18nc("@label file type", "Type"), this), d->m_typeInfo); - d->addRow(d->m_sizeLabel, d->m_sizeInfo); - d->addRow(new QLabel(i18nc("@label", "Modified"), this), d->m_modifiedInfo); - d->addRow(new QLabel(i18nc("@label", "Owner"), this), d->m_ownerInfo); - d->addRow(new QLabel(i18nc("@label", "Permissions"), this), d->m_permissionsInfo); - - // The current number of rows represents meta data, that will be shown for - // all files. Dynamic meta data will be appended after those rows (see - // slotLoadingFinished()). - d->m_fixedRowCount = d->m_rows.count(); - - d->updateRowsVisibility(); - } - - return QWidget::event(event); -} - -#include "kmetadatawidget.moc" |
