┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSebastian Trueg <[email protected]>2009-12-07 16:41:37 +0000
committerSebastian Trueg <[email protected]>2009-12-07 16:41:37 +0000
commit25b9640456c3238a10252691b772caf61f1281b7 (patch)
tree842462e54f1af674af7ae8dbf4d83e7dbc880c3b /src
parentf4067a705af5c0c93dbbecdad51efc5a9062f19a (diff)
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: [email protected] svn path=/trunk/KDE/kdebase/apps/; revision=1059908
Diffstat (limited to 'src')
-rw-r--r--src/panels/information/kmetadatawidget.cpp11
-rw-r--r--src/panels/information/kmetadatawidget.h5
-rw-r--r--src/panels/information/ktaggingwidget.cpp58
-rw-r--r--src/panels/information/ktaggingwidget_p.h1
4 files changed, 52 insertions, 23 deletions
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<Nepomuk::Tag>&)),
q, SLOT(slotTagsChanged(const QList<Nepomuk::Tag>&)));
+ 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 <QList>
#include <QWidget>
+#include <config-nepomuk.h>
+
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 <kglobalsettings.h>
#include <klocale.h>
+#include <kurl.h>
#include <QEvent>
#include <QLabel>
@@ -61,7 +62,15 @@ void KTaggingWidget::setTags(const QList<Nepomuk::Tag>& 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( "<a href=\"%1\">%2</a>" ).arg( KUrl(tag.resourceUri()).url(), tag.genericLabel() );
+ }
+#endif
first = false;
}
@@ -70,7 +79,7 @@ void KTaggingWidget::setTags(const QList<Nepomuk::Tag>& tags)
if (m_readOnly) {
text = "-";
} else {
- text = "<a href=\"addTags\">" + i18nc("@label", "Add Tags...") + "</a>";
+ text = "<a href=\"changeTags\">" + i18nc("@label", "Add Tags...") + "</a>";
}
} 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 ( 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<Nepomuk::Tag> oldTags = m_tags;
- m_tags = dialog.tags();
+ if (dialog.exec() == QDialog::Accepted) {
+ const QList<Nepomuk::Tag> 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 (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<Nepomuk::Tag>& tags);
+ void tagActivated(const Nepomuk::Tag& tag);
protected:
virtual bool event(QEvent* event);