From: Sebastian Trueg Date: Mon, 7 Dec 2009 16:41:37 +0000 (+0000) Subject: Added all code necessary for clickable tags in the KTaggingWidget. As soon as we... X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/25b9640456c3238a10252691b772caf61f1281b7 Added all code necessary for clickable tags in the KTaggingWidget. As soon as we figured out how to only show links on hover we are good to go. This is actually a fix as resources in the rest of the info view are already clickable. CCMAIL: peter.penz@gmx.at svn path=/trunk/KDE/kdebase/apps/; revision=1059908 --- diff --git a/src/panels/information/kmetadatawidget.cpp b/src/panels/information/kmetadatawidget.cpp index 819e9f26d..8b658a03f 100644 --- a/src/panels/information/kmetadatawidget.cpp +++ b/src/panels/information/kmetadatawidget.cpp @@ -98,6 +98,8 @@ public: void slotLinkActivated(const QString& link); #ifdef HAVE_NEPOMUK + void slotTagActivated(const Nepomuk::Tag& tag); + /** * Disables the metadata widget and starts the job that * changes the meta data asynchronously. After the job @@ -189,6 +191,8 @@ KMetaDataWidget::Private::Private(KMetaDataWidget* parent) : m_taggingWidget = new KTaggingWidget(parent); connect(m_taggingWidget, SIGNAL(tagsChanged(const QList&)), q, SLOT(slotTagsChanged(const QList&))); + connect(m_taggingWidget, SIGNAL(tagActivated(const Nepomuk::Tag&)), + q, SLOT(slotTagActivated(const Nepomuk::Tag&))); m_commentWidget = new KCommentWidget(parent); connect(m_commentWidget, SIGNAL(commentChanged(const QString&)), @@ -425,6 +429,13 @@ void KMetaDataWidget::Private::slotCommentChanged(const QString& comment) #endif } +#ifdef HAVE_NEPOMUK +void KMetaDataWidget::Private::slotTagActivated(const Nepomuk::Tag& tag) +{ + emit q->urlActivated(tag.resourceUri()); +} +#endif + void KMetaDataWidget::Private::slotMetaDataUpdateDone() { #ifdef HAVE_NEPOMUK diff --git a/src/panels/information/kmetadatawidget.h b/src/panels/information/kmetadatawidget.h index 060b82c73..a7d131e14 100644 --- a/src/panels/information/kmetadatawidget.h +++ b/src/panels/information/kmetadatawidget.h @@ -25,6 +25,8 @@ #include #include +#include + class KUrl; /** @@ -138,6 +140,9 @@ private: Q_PRIVATE_SLOT(d, void slotCommentChanged(const QString& comment)) Q_PRIVATE_SLOT(d, void slotMetaDataUpdateDone()) Q_PRIVATE_SLOT(d, void slotLinkActivated(const QString& link)) +#ifdef HAVE_NEPOMUK + Q_PRIVATE_SLOT(d, void slotTagActivated(const Nepomuk::Tag& tag)) +#endif }; Q_DECLARE_OPERATORS_FOR_FLAGS(KMetaDataWidget::MetaDataTypes) diff --git a/src/panels/information/ktaggingwidget.cpp b/src/panels/information/ktaggingwidget.cpp index d33b9f6de..4c0ab98be 100644 --- a/src/panels/information/ktaggingwidget.cpp +++ b/src/panels/information/ktaggingwidget.cpp @@ -22,6 +22,7 @@ #include #include +#include #include #include @@ -61,7 +62,15 @@ void KTaggingWidget::setTags(const QList& tags) if (!first) { m_tagsText += ", "; } - m_tagsText += tag.genericLabel(); +#ifdef DOLPHIN_ENABLE_CLICKABLE_TAGS + if (m_readOnly) { +#endif + m_tagsText += tag.genericLabel(); +#ifdef DOLPHIN_ENABLE_CLICKABLE_TAGS + } else { + m_tagsText += QString::fromLatin1( "%2" ).arg( KUrl(tag.resourceUri()).url(), tag.genericLabel() ); + } +#endif first = false; } @@ -70,7 +79,7 @@ void KTaggingWidget::setTags(const QList& tags) if (m_readOnly) { text = "-"; } else { - text = "" + i18nc("@label", "Add Tags...") + ""; + text = "" + i18nc("@label", "Add Tags...") + ""; } } else { if (m_readOnly) { @@ -108,33 +117,36 @@ bool KTaggingWidget::event(QEvent* event) void KTaggingWidget::slotLinkActivated(const QString& link) { - Q_UNUSED(link); - - KEditTagsDialog dialog(m_tags, this, Qt::Dialog); - KConfigGroup dialogConfig(KGlobal::config(), "Nepomuk KEditTagsDialog"); - dialog.restoreDialogSize(dialogConfig); - - if (dialog.exec() == QDialog::Accepted) { - const QList oldTags = m_tags; - m_tags = dialog.tags(); - - if (oldTags.count() != m_tags.count()) { - emit tagsChanged(m_tags); - } else { - // The number of tags is equal. Check whether the - // content of the tags are also equal: - const int tagsCount = m_tags.count(); - for (int i = 0; i < tagsCount; ++i) { - if (oldTags[i].genericLabel() != m_tags[i].genericLabel()) { - // at least one tag has been changed - emit tagsChanged(m_tags); - break; + if ( link == QLatin1String( "changeTags" ) ) { + KEditTagsDialog dialog(m_tags, this, Qt::Dialog); + KConfigGroup dialogConfig(KGlobal::config(), "Nepomuk KEditTagsDialog"); + dialog.restoreDialogSize(dialogConfig); + + if (dialog.exec() == QDialog::Accepted) { + const QList oldTags = m_tags; + m_tags = dialog.tags(); + + if (oldTags.count() != m_tags.count()) { + emit tagsChanged(m_tags); + } else { + // The number of tags is equal. Check whether the + // content of the tags are also equal: + const int tagsCount = m_tags.count(); + for (int i = 0; i < tagsCount; ++i) { + if (oldTags[i].genericLabel() != m_tags[i].genericLabel()) { + // at least one tag has been changed + emit tagsChanged(m_tags); + break; + } } } } - } - dialog.saveDialogSize(dialogConfig, KConfigBase::Persistent); + dialog.saveDialogSize(dialogConfig, KConfigBase::Persistent); + } + else { + emit tagActivated(Nepomuk::Tag(KUrl(link))); + } } #include "ktaggingwidget_p.moc" diff --git a/src/panels/information/ktaggingwidget_p.h b/src/panels/information/ktaggingwidget_p.h index 1a4589a62..dfa23ea3b 100644 --- a/src/panels/information/ktaggingwidget_p.h +++ b/src/panels/information/ktaggingwidget_p.h @@ -49,6 +49,7 @@ public: signals: void tagsChanged(const QList& tags); + void tagActivated(const Nepomuk::Tag& tag); protected: virtual bool event(QEvent* event);