From: Peter Penz Date: Wed, 11 Nov 2009 18:59:29 +0000 (+0000) Subject: * don't show the "Add Tags..." and "Add Comments..." links for the meta data inside... X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/36ae0b6185e310113e0e31e247919da866d7f91b * don't show the "Add Tags..." and "Add Comments..." links for the meta data inside a tooltip * minor cleanup of thread-interface to allow a proper sorting/merging on client side svn path=/trunk/KDE/kdebase/apps/; revision=1047662 --- diff --git a/src/panels/information/kcommentwidget.cpp b/src/panels/information/kcommentwidget.cpp index 770b6c10c..c1f7ab757 100644 --- a/src/panels/information/kcommentwidget.cpp +++ b/src/panels/information/kcommentwidget.cpp @@ -29,6 +29,7 @@ KCommentWidget::KCommentWidget(QWidget* parent) : QWidget(parent), + m_readOnly(false), m_label(0), m_comment() { @@ -51,11 +52,22 @@ KCommentWidget::~KCommentWidget() void KCommentWidget::setText(const QString& comment) { - if (comment.isEmpty()) { - m_label->setText("" + i18nc("@label", "Add Comment...") + ""); + QString text; + if (comment.isEmpty()) { + if (m_readOnly) { + text = "-"; + } else { + text = "" + i18nc("@label", "Add Comment...") + ""; + } } else { - m_label->setText("

" + comment + " " + i18nc("@label", "Change...") + "

"); + if (m_readOnly) { + text = comment; + } else { + text = "

" + comment + " " + i18nc("@label", "Change...") + "

"; + } } + + m_label->setText(text); m_comment = comment; } @@ -64,6 +76,17 @@ QString KCommentWidget::text() const return m_comment; } +void KCommentWidget::setReadOnly(bool readOnly) +{ + m_readOnly = readOnly; + setText(m_comment); +} + +bool KCommentWidget::isReadOnly() const +{ + return m_readOnly; +} + void KCommentWidget::slotLinkActivated(const QString& link) { KDialog dialog(this, Qt::Dialog); diff --git a/src/panels/information/kcommentwidget_p.h b/src/panels/information/kcommentwidget_p.h index 977531372..cd895223f 100644 --- a/src/panels/information/kcommentwidget_p.h +++ b/src/panels/information/kcommentwidget_p.h @@ -39,6 +39,14 @@ public: void setText(const QString& comment); QString text() const; + /** + * If set to true, the comment cannot be changed by the user. + * Per default read-only is disabled. + */ + // TODO: provide common interface class for metadatawidgets + void setReadOnly(bool readOnly); + bool isReadOnly() const; + signals: void commentChanged(const QString& comment); @@ -46,6 +54,7 @@ private slots: void slotLinkActivated(const QString& link); private: + bool m_readOnly; QLabel* m_label; QString m_comment; }; diff --git a/src/panels/information/kloadmetadatathread.cpp b/src/panels/information/kloadmetadatathread.cpp index ca908f6dd..14aba2079 100644 --- a/src/panels/information/kloadmetadatathread.cpp +++ b/src/panels/information/kloadmetadatathread.cpp @@ -24,15 +24,13 @@ #include #include -#include #include KLoadMetaDataThread::KLoadMetaDataThread() : m_rating(0), m_comment(), m_tags(), - m_metaInfoLabels(), - m_metaInfoValues(), + m_items(), m_files(), m_urls(), m_canceled(false) @@ -95,17 +93,16 @@ void KLoadMetaDataThread::run() if (first && (m_urls.count() == 1)) { // TODO: show shared meta information instead // of not showing anything on multiple selections - QHash properties = file.properties(); - QHash::const_iterator it = properties.constBegin(); - while (it != properties.constEnd()) { + QHash variants = file.properties(); + QHash::const_iterator it = variants.constBegin(); + while (it != variants.constEnd()) { Nepomuk::Types::Property prop(it.key()); if (settings.readEntry(prop.name(), true)) { - // 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 - m_metaInfoLabels.append(tunedLabel(prop.label())); - m_metaInfoValues.append(formatValue(it.value())); + Item item; + item.name = prop.name(); + item.label = tunedLabel(prop.label()); + item.value = formatValue(it.value()); + m_items.append(item); } ++it; } @@ -130,14 +127,9 @@ QList KLoadMetaDataThread::tags() const return m_tags; } -QList KLoadMetaDataThread::metaInfoLabels() const +QList KLoadMetaDataThread::items() const { - return m_metaInfoLabels; -} - -QList KLoadMetaDataThread::metaInfoValues() const -{ - return m_metaInfoValues; + return m_items; } QMap KLoadMetaDataThread::files() const @@ -150,7 +142,7 @@ void KLoadMetaDataThread::slotFinished() deleteLater(); } -QString KLoadMetaDataThread::tunedLabel(const QString& label) const +QString KLoadMetaDataThread::tunedLabel(const QString& label) const { QString tunedLabel; const int labelLength = label.length(); @@ -169,26 +161,19 @@ QString KLoadMetaDataThread::tunedLabel(const QString& label) const return tunedLabel + ':'; } - -// This is a short hack until we have a proper formatting facility in Nepomuk -// here we simply handle the most common formatting situations that do not look nice -// when using Nepomuk::Variant::toString() -QString KLoadMetaDataThread::formatValue(const Nepomuk::Variant& value) +QString KLoadMetaDataThread::formatValue(const Nepomuk::Variant& value) { if (value.isDateTime()) { - return KGlobal::locale()->formatDateTime( value.toDateTime(), KLocale::FancyLongDate ); - } - else if (value.isResource()) { + return KGlobal::locale()->formatDateTime(value.toDateTime(), KLocale::FancyLongDate); + } else if (value.isResource()) { return value.toResource().genericLabel(); - } - else if (value.isResourceList()) { - QStringList ll; + } else if (value.isResourceList()) { + QStringList list; foreach(const Nepomuk::Resource& res, value.toResourceList()) { - ll << res.genericLabel(); + list << res.genericLabel(); } - return ll.join(QLatin1String(";\n")); - } - else { + return list.join(QLatin1String(";\n")); + } else { return value.toString(); } } diff --git a/src/panels/information/kloadmetadatathread_p.h b/src/panels/information/kloadmetadatathread_p.h index 296b2192f..ea1a5cceb 100644 --- a/src/panels/information/kloadmetadatathread_p.h +++ b/src/panels/information/kloadmetadatathread_p.h @@ -22,6 +22,7 @@ #define DISABLE_NEPOMUK_LEGACY #include #include +#include #include #include @@ -36,6 +37,13 @@ class KLoadMetaDataThread : public QThread Q_OBJECT public: + struct Item + { + QString name; + QString label; + QString value; + }; + KLoadMetaDataThread(); virtual ~KLoadMetaDataThread(); @@ -62,8 +70,7 @@ public: int rating() const; QString comment() const; QList tags() const; - QList metaInfoLabels() const; - QList metaInfoValues() const; + QList items() const; QMap files() const; private slots: @@ -71,21 +78,16 @@ private slots: private: /** - * Assures that the settings for the meta information - * are initialized with proper default values. - */ - void initMetaInfoSettings(KConfigGroup& group); - - /** - * Temporary helper method for KDE 4.3 as we currently don't get - * translated labels for Nepmok literals: Replaces camelcase labels + * Temporary helper method there is a way to get translated + * labels for Nepmok literals: Replaces camelcase labels * like "fileLocation" by "File Location:". */ QString tunedLabel(const QString& label) const; /** - * Temporary helper method which tries to pretty print - * values. + * Temporary helper method until there is a proper formatting facility in Nepomuk. + * Here we simply handle the most common formatting situations that do not look nice + * when using Nepomuk::Variant::toString(). */ QString formatValue(const Nepomuk::Variant& value); @@ -93,8 +95,7 @@ private: int m_rating; QString m_comment; QList m_tags; - QList m_metaInfoLabels; - QList m_metaInfoValues; + QList m_items; QMap m_files; KUrl::List m_urls; diff --git a/src/panels/information/kmetadatawidget.cpp b/src/panels/information/kmetadatawidget.cpp index 09b58dbea..f1b0965af 100644 --- a/src/panels/information/kmetadatawidget.cpp +++ b/src/panels/information/kmetadatawidget.cpp @@ -102,7 +102,8 @@ public: */ void startChangeDataJob(KJob* job); - bool m_isSizeVisible; + bool m_sizeVisible; + bool m_readOnly; MetaDataTypes m_visibleDataTypes; QList m_fileItems; QList m_rows; @@ -131,7 +132,8 @@ private: }; KMetaDataWidget::Private::Private(KMetaDataWidget* parent) : - m_isSizeVisible(true), + m_sizeVisible(true), + m_readOnly(false), m_visibleDataTypes(TypeData | SizeData | ModifiedData | OwnerData | PermissionsData | RatingData | TagsData | CommentData), m_fileItems(), @@ -288,12 +290,12 @@ void KMetaDataWidget::Private::updateRowsVisibility() (m_visibleDataTypes & KMetaDataWidget::TypeData) && settings.readEntry("type", true)); - // Cache in m_isSizeVisible whether the size should be shown. This + // 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_isSizeVisible = (m_visibleDataTypes & KMetaDataWidget::SizeData) && + m_sizeVisible = (m_visibleDataTypes & KMetaDataWidget::SizeData) && settings.readEntry("size", true); - setRowVisible(m_sizeInfo, m_isSizeVisible); + setRowVisible(m_sizeInfo, m_sizeVisible); setRowVisible(m_modifiedInfo, (m_visibleDataTypes & KMetaDataWidget::ModifiedData) && @@ -339,31 +341,28 @@ void KMetaDataWidget::Private::slotLoadingFinished() const int rowCount = m_rows.count(); Q_ASSERT(rowCount >= index); - Q_ASSERT(m_loadMetaDataThread->metaInfoLabels().count() == m_loadMetaDataThread->metaInfoValues().count()); - const int metaInfoCount = m_loadMetaDataThread->metaInfoLabels().count(); - for (int i = 0; i < metaInfoCount; ++i) { - const QList metaInfoLabels = m_loadMetaDataThread->metaInfoLabels(); - const QList metaInfoValues = m_loadMetaDataThread->metaInfoValues(); + const QList items = m_loadMetaDataThread->items(); + foreach (const KLoadMetaDataThread::Item& item, items) { if (index < rowCount) { // adjust texts of the current row - m_rows[index].label->setText(metaInfoLabels[i]); + m_rows[index].label->setText(item.label); QLabel* infoValueLabel = qobject_cast(m_rows[index].infoWidget); Q_ASSERT(infoValueLabel != 0); - infoValueLabel->setText(metaInfoValues[i]); + infoValueLabel->setText(item.value); } else { // create new row - QLabel* infoLabel = new QLabel(metaInfoLabels[i], q); - QLabel* infoValue = new QLabel(metaInfoValues[i], q); + QLabel* infoLabel = new QLabel(item.label, q); + QLabel* infoValue = new QLabel(item.value, q); addRow(infoLabel, infoValue); } ++index; } - if (metaInfoCount > 0) { + if (items.count() > 0) { --index; } // remove rows that are not needed anymore - for (int i = rowCount - 1; i > index; --i) { + for (int i = m_rows.count() - 1; i > index; --i) { delete m_rows[i].label; delete m_rows[i].infoWidget; m_rows.pop_back(); @@ -452,7 +451,7 @@ void KMetaDataWidget::setItem(const KFileItem& item) } else { d->m_typeInfo->setText(item.mimeComment()); d->m_sizeInfo->setText(KIO::convertSize(item.size())); - d->setRowVisible(d->m_sizeInfo, d->m_isSizeVisible); + 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()); @@ -469,7 +468,7 @@ void KMetaDataWidget::setItems(const KFileItemList& items) // 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_isSizeVisible); + d->setRowVisible(d->m_sizeInfo, d->m_sizeVisible); quint64 totalSize = 0; foreach (const KFileItem& item, items) { @@ -525,6 +524,21 @@ KFileItemList KMetaDataWidget::items() const return d->m_fileItems; } +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 + d->m_taggingWidget->setReadOnly(readOnly); + d->m_commentWidget->setReadOnly(readOnly); +#endif +} + +bool KMetaDataWidget::isReadOnly() const +{ + return d->m_readOnly; +} + void KMetaDataWidget::setVisibleDataTypes(MetaDataTypes data) { d->m_visibleDataTypes = data; diff --git a/src/panels/information/kmetadatawidget.h b/src/panels/information/kmetadatawidget.h index 182d3a0c8..9d1232cf2 100644 --- a/src/panels/information/kmetadatawidget.h +++ b/src/panels/information/kmetadatawidget.h @@ -99,6 +99,13 @@ public: KFileItemList items() const; + /** + * If set to true, data like comment, tag or rating cannot be changed by the user. + * Per default read-only is disabled. + */ + void setReadOnly(bool readOnly); + bool isReadOnly() const; + /** * Specifies which kind of data types should be shown (@see KMetaDataWidget::Data). * Example: metaDataWidget->setVisibleDataTypes(KMetaDataWidget::TypeData | KMetaDataWidget::ModifiedData); diff --git a/src/panels/information/ktaggingwidget.cpp b/src/panels/information/ktaggingwidget.cpp index 3fc3b0026..1dff1278f 100644 --- a/src/panels/information/ktaggingwidget.cpp +++ b/src/panels/information/ktaggingwidget.cpp @@ -28,6 +28,7 @@ KTaggingWidget::KTaggingWidget(QWidget* parent) : QWidget(parent), + m_readOnly(false), m_label(0), m_tags(), m_tagsText() @@ -63,11 +64,21 @@ void KTaggingWidget::setTags(const QList& tags) first = false; } + QString text; if (m_tagsText.isEmpty()) { - m_label->setText("" + i18nc("@label", "Add Tags...") + ""); + if (m_readOnly) { + text = "-"; + } else { + text = "" + i18nc("@label", "Add Tags...") + ""; + } } else { - m_label->setText("

" + m_tagsText + " " + i18nc("@label", "Change...") + "

"); + if (m_readOnly) { + text = m_tagsText; + } else { + text = "

" + m_tagsText + " " + i18nc("@label", "Change...") + "

"; + } } + m_label->setText(text); } QList KTaggingWidget::tags() const @@ -75,6 +86,17 @@ QList KTaggingWidget::tags() const return m_tags; } +void KTaggingWidget::setReadOnly(bool readOnly) +{ + m_readOnly = readOnly; + setTags(m_tags); +} + +bool KTaggingWidget::isReadOnly() const +{ + return m_readOnly; +} + void KTaggingWidget::slotLinkActivated(const QString& link) { Q_UNUSED(link); diff --git a/src/panels/information/ktaggingwidget_p.h b/src/panels/information/ktaggingwidget_p.h index b26bdca49..c82df8735 100644 --- a/src/panels/information/ktaggingwidget_p.h +++ b/src/panels/information/ktaggingwidget_p.h @@ -39,6 +39,14 @@ public: void setTags(const QList& tags); QList tags() const; + /** + * If set to true, the tags cannot be changed by the user. + * Per default read-only is disabled. + */ + // TODO: provide common interface class for metadatawidgets + void setReadOnly(bool readOnly); + bool isReadOnly() const; + signals: void tagsChanged(const QList& tags); @@ -46,6 +54,7 @@ private slots: void slotLinkActivated(const QString& link); private: + bool m_readOnly; QLabel* m_label; QList m_tags; QString m_tagsText; diff --git a/src/tooltips/tooltipmanager.cpp b/src/tooltips/tooltipmanager.cpp index baefee095..957fdc079 100644 --- a/src/tooltips/tooltipmanager.cpp +++ b/src/tooltips/tooltipmanager.cpp @@ -250,6 +250,7 @@ QWidget* ToolTipManager::createTipContent(const QPixmap& pixmap) const KMetaDataWidget* metaDataWidget = new KMetaDataWidget(tipContent); metaDataWidget->setItem(m_item); metaDataWidget->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + metaDataWidget->setReadOnly(true); QHBoxLayout* tipLayout = new QHBoxLayout(tipContent); tipLayout->setMargin(0);