┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/panels
diff options
context:
space:
mode:
authorPeter Penz <[email protected]>2009-11-19 19:38:34 +0000
committerPeter Penz <[email protected]>2009-11-19 19:38:34 +0000
commit2b6cceb0f6a46c47ad55f36379e38cb143f28d36 (patch)
treeb44bbd50bbaf676077dfd7a22a666bfeee77c8c8 /src/panels
parentf2c315a147ff4ec9c76e28e0636a02f81fba9548 (diff)
Provide clickable resources for the Information Panel. Thanks to Sebastian Trüg für the patch!
CCMAIL: [email protected] svn path=/trunk/KDE/kdebase/apps/; revision=1051553
Diffstat (limited to 'src/panels')
-rw-r--r--src/panels/information/informationpanel.cpp3
-rw-r--r--src/panels/information/informationpanel.h3
-rw-r--r--src/panels/information/informationpanelcontent.cpp1
-rw-r--r--src/panels/information/kloadmetadatathread.cpp6
-rw-r--r--src/panels/information/kloadmetadatathread_p.h1
-rw-r--r--src/panels/information/kmetadatawidget.cpp31
-rw-r--r--src/panels/information/kmetadatawidget.h4
7 files changed, 46 insertions, 3 deletions
diff --git a/src/panels/information/informationpanel.cpp b/src/panels/information/informationpanel.cpp
index 028f0ae0c..05b1f89de 100644
--- a/src/panels/information/informationpanel.cpp
+++ b/src/panels/information/informationpanel.cpp
@@ -255,7 +255,7 @@ void InformationPanel::slotLeftDirectory(const QString& directory)
// The signal 'leftDirectory' is also emitted when a media
// has been unmounted. In this case no directory change will be
// done in Dolphin, but the Information Panel must be updated to
- // indicate an invalid directory.
+ // indicate an invalid directory.
markUrlAsInvalid();
}
}
@@ -313,6 +313,7 @@ void InformationPanel::init()
connect(dirNotify, SIGNAL(leftDirectory(QString)), SLOT(slotLeftDirectory(QString)));
m_content = new InformationPanelContent(this);
+ connect(m_content, SIGNAL(urlActivated(KUrl)), this, SIGNAL(urlActivated(KUrl)));
m_initialized = true;
}
diff --git a/src/panels/information/informationpanel.h b/src/panels/information/informationpanel.h
index b83db7f70..0622a79a2 100644
--- a/src/panels/information/informationpanel.h
+++ b/src/panels/information/informationpanel.h
@@ -38,6 +38,9 @@ public:
/** @see QWidget::sizeHint() */
virtual QSize sizeHint() const;
+signals:
+ void urlActivated(const KUrl& url);
+
public slots:
/** @see Panel::setUrl() */
virtual void setUrl(const KUrl& url);
diff --git a/src/panels/information/informationpanelcontent.cpp b/src/panels/information/informationpanelcontent.cpp
index 16876e302..bd24e568d 100644
--- a/src/panels/information/informationpanelcontent.cpp
+++ b/src/panels/information/informationpanelcontent.cpp
@@ -103,6 +103,7 @@ InformationPanelContent::InformationPanelContent(QWidget* parent) :
m_metaDataWidget = new KMetaDataWidget(parent);
m_metaDataWidget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Minimum);
+ connect(m_metaDataWidget, SIGNAL(urlActivated(KUrl)), this, SIGNAL(urlActivated(KUrl)));
// Encapsulate the MetaDataWidget inside a container that has a dummy widget
// at the bottom. This prevents that the meta data widget gets vertically stretched
diff --git a/src/panels/information/kloadmetadatathread.cpp b/src/panels/information/kloadmetadatathread.cpp
index b1083be91..b942c2038 100644
--- a/src/panels/information/kloadmetadatathread.cpp
+++ b/src/panels/information/kloadmetadatathread.cpp
@@ -100,7 +100,11 @@ void KLoadMetaDataThread::run()
Item item;
item.name = prop.name();
item.label = tunedLabel(prop.label());
- item.value = formatValue(it.value());
+ if (it.value().isResource() || it.value().isResourceList()) {
+ item.resources = it.value().toResourceList();
+ } else {
+ item.value = formatValue(it.value());
+ }
m_items.append(item);
}
++it;
diff --git a/src/panels/information/kloadmetadatathread_p.h b/src/panels/information/kloadmetadatathread_p.h
index 08e4b0855..885e975fc 100644
--- a/src/panels/information/kloadmetadatathread_p.h
+++ b/src/panels/information/kloadmetadatathread_p.h
@@ -42,6 +42,7 @@ public:
QString name;
QString label;
QString value;
+ QList<Nepomuk::Resource> resources;
};
KLoadMetaDataThread();
diff --git a/src/panels/information/kmetadatawidget.cpp b/src/panels/information/kmetadatawidget.cpp
index 73ba3d078..7e99c45ff 100644
--- a/src/panels/information/kmetadatawidget.cpp
+++ b/src/panels/information/kmetadatawidget.cpp
@@ -94,6 +94,7 @@ public:
void slotCommentChanged(const QString& comment);
void slotMetaDataUpdateDone();
+ void slotLinkActivated(const QString& link);
#ifdef HAVE_NEPOMUK
/**
@@ -107,6 +108,12 @@ public:
* Merges items like 'width' and 'height' as one item.
*/
QList<KLoadMetaDataThread::Item> mergedItems(const QList<KLoadMetaDataThread::Item>& items);
+
+ /**
+ * Returns a (clickable) text for the given item, that can be used for
+ * the information value widget.
+ */
+ QString labelText(const KLoadMetaDataThread::Item& item) const;
#endif
bool m_sizeVisible;
@@ -365,7 +372,9 @@ void KMetaDataWidget::Private::slotLoadingFinished()
} else {
// create new row
QLabel* infoLabel = new QLabel(item.label, q);
- QLabel* infoValue = new QLabel(item.value, q);
+ QLabel* infoValue = new QLabel(labelText(item), q);
+ connect(infoValue, SIGNAL(linkActivated(QString)),
+ q, SLOT(slotLinkActivated(QString)));
addRow(infoLabel, infoValue);
}
++index;
@@ -432,6 +441,11 @@ void KMetaDataWidget::Private::slotMetaDataUpdateDone()
#endif
}
+void KMetaDataWidget::Private::slotLinkActivated(const QString& link)
+{
+ emit q->urlActivated(KUrl(link));
+}
+
#ifdef HAVE_NEPOMUK
void KMetaDataWidget::Private::startChangeDataJob(KJob* job)
{
@@ -489,6 +503,21 @@ QList<KLoadMetaDataThread::Item>
return mergedItems;
}
+
+QString KMetaDataWidget::Private::labelText(const KLoadMetaDataThread::Item& item) const
+{
+ if (item.resources.isEmpty()) {
+ return item.value;
+ }
+
+ QStringList links;
+ foreach(const Nepomuk::Resource& res, item.resources) {
+ links << QString::fromLatin1("<a href=\"%1\">%2</a>")
+ .arg(KUrl(res.resourceUri()).url())
+ .arg(res.genericLabel());
+ }
+ return QLatin1String("<p>") + links.join(QLatin1String(";\n"));
+}
#endif
KMetaDataWidget::KMetaDataWidget(QWidget* parent) :
diff --git a/src/panels/information/kmetadatawidget.h b/src/panels/information/kmetadatawidget.h
index 9d1232cf2..2618913b8 100644
--- a/src/panels/information/kmetadatawidget.h
+++ b/src/panels/information/kmetadatawidget.h
@@ -122,6 +122,9 @@ public:
/** @see QWidget::sizeHint() */
virtual QSize sizeHint() const;
+Q_SIGNALS:
+ void urlActivated(const KUrl& url);
+
private:
class Private;
Private* d;
@@ -131,6 +134,7 @@ private:
Q_PRIVATE_SLOT(d, void slotTagsChanged(const QList<Nepomuk::Tag>& tags))
Q_PRIVATE_SLOT(d, void slotCommentChanged(const QString& comment))
Q_PRIVATE_SLOT(d, void slotMetaDataUpdateDone())
+ Q_PRIVATE_SLOT(d, void slotLinkActivated(const QString& link))
};
Q_DECLARE_OPERATORS_FOR_FLAGS(KMetaDataWidget::MetaDataTypes)