[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: KDE/kdebase/apps/dolphin/src/panels/information
From: Peter Penz <peter.penz () gmx ! at>
Date: 2009-02-17 20:37:34
Message-ID: 1234903054.995517.14987.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 927542 by ppenz:
* Use Nepomuk for getting the meta data instead of KFileMetaInfo.
* Use a QScrollArea widget to embedd the meta data, as Nepomuk provides so much meta \
information that it might not fit into the panel.
Open issues:
* Add the possibility to configure which kind of meta information should be shown.
* Check whether the receiving of the meta data for one file also might block the UI \
like when using KFileMetaInfo in combination with strigi.
CCMAIL: sebastian@trueg.de
BUG: 180742
BUG: 181592
M +46 -67 informationpanel.cpp
M +6 -7 informationpanel.h
--- trunk/KDE/kdebase/apps/dolphin/src/panels/information/informationpanel.cpp \
#927541:927542 @@ -34,6 +34,12 @@
#include <kseparator.h>
#include <kiconloader.h>
+#ifdef HAVE_NEPOMUK
+#include <Nepomuk/Resource>
+#include <Nepomuk/Types/Property>
+#include <Nepomuk/Variant>
+#endif
+
#include <Phonon/BackendCapabilities>
#include <Phonon/MediaObject>
#include <Phonon/SeekSlider>
@@ -44,9 +50,11 @@
#include <QPainter>
#include <QPixmap>
#include <QResizeEvent>
+#include <QScrollArea>
#include <QTextLayout>
#include <QTextLine>
#include <QTimer>
+#include <QScrollBar>
#include <QVBoxLayout>
#include "settings/dolphinsettings.h"
@@ -69,6 +77,7 @@
m_preview(0),
m_phononWidget(0),
m_metaDataWidget(0),
+ m_metaTextArea(0),
m_metaTextLabel(0)
{
}
@@ -184,10 +193,21 @@
m_urlCandidate = m_shownUrl; // reset the URL candidate if a resizing is \
done m_infoTimer->start();
}
-
Panel::resizeEvent(event);
}
+#include <kdebug.h>
+bool InformationPanel::eventFilter(QObject* obj, QEvent* event)
+{
+ // Check whether the size of the meta text area has changed and adjust
+ // the fixed width in a way that no horizontal scrollbar needs to be shown.
+ if ((obj == m_metaTextArea->viewport()) && (event->type() == QEvent::Resize)) {
+ QResizeEvent* resizeEvent = static_cast<QResizeEvent*>(event);
+ m_metaTextLabel->setFixedWidth(resizeEvent->size().width());
+ }
+ return Panel::eventFilter(obj, event);
+}
+
void InformationPanel::showItemInfo()
{
if (!isVisible()) {
@@ -391,29 +411,19 @@
m_metaTextLabel->add(i18nc("@label", "Size:"), \
KIO::convertSize(item.size()));
m_metaTextLabel->add(i18nc("@label", "Modified:"), item.timeString());
- if (item.isLocalFile()) {
- // TODO: See convertMetaInfo below, find a way to display only \
interesting information
- // in a readable way
- const KFileMetaInfo::WhatFlags flags = KFileMetaInfo::Fastest |
- KFileMetaInfo::TechnicalInfo \
|
- KFileMetaInfo::ContentInfo;
- const QString path = item.url().path();
- const KFileMetaInfo fileMetaInfo(path, QString(), flags);
- if (fileMetaInfo.isValid()) {
- const QHash<QString, KFileMetaInfoItem>& items = \
fileMetaInfo.items();
- QHash<QString, KFileMetaInfoItem>::const_iterator it = \
items.constBegin();
- const QHash<QString, KFileMetaInfoItem>::const_iterator end = \
items.constEnd();
- QString labelText;
- while (it != end) {
- const KFileMetaInfoItem& metaInfoItem = it.value();
- const QVariant& value = metaInfoItem.value();
- if (value.isValid() && convertMetaInfo(metaInfoItem.name(), \
labelText)) {
- m_metaTextLabel->add(labelText, value.toString());
- }
- ++it;
- }
- }
+#ifdef HAVE_NEPOMUK
+ Nepomuk::Resource res(item.url());
+
+ QHash<QUrl, Nepomuk::Variant> properties = res.properties();
+ QHash<QUrl, Nepomuk::Variant>::const_iterator it = \
properties.constBegin(); + while (it != properties.constEnd()) {
+ Nepomuk::Types::Property prop(it.key());
+ // TODO: use Nepomuk::formatValue(res, prop) if available
+ // instead of it.value().toString()
+ m_metaTextLabel->add(prop.label(), it.value().toString());
+ ++it;
}
+#endif
}
if (m_metaDataWidget != 0) {
@@ -436,45 +446,6 @@
}
}
-bool InformationPanel::convertMetaInfo(const QString& key, QString& text) const
-{
- struct MetaKey {
- const char* key;
- QString text;
- };
-
- // sorted list of keys, where its data should be shown
- static const MetaKey keys[] = {
- { "http://freedesktop.org/standards/xesam/1.0/core#album", \
i18nc("@label", "Album:") },
- { "http://freedesktop.org/standards/xesam/1.0/core#artist", \
i18nc("@label", "Artist:") },
- { "http://freedesktop.org/standards/xesam/1.0/core#genre", \
i18nc("@label", "Genre:") },
- { "http://freedesktop.org/standards/xesam/1.0/core#height", \
i18nc("@label", "Height:") },
- { "http://freedesktop.org/standards/xesam/1.0/core#lineCount", \
i18nc("@label", "Lines:") },
- { "http://freedesktop.org/standards/xesam/1.0/core#title", \
i18nc("@label", "Title:") },
- { "http://freedesktop.org/standards/xesam/1.0/core#type", \
i18nc("@label", "Type:") },
- { "http://freedesktop.org/standards/xesam/1.0/core#trackNumber", \
i18nc("@label", "Track:") },
- { "http://freedesktop.org/standards/xesam/1.0/core#width", \
i18nc("@label", "Width:") }
- };
-
- // do a binary search for the key...
- int top = 0;
- int bottom = sizeof(keys) / sizeof(MetaKey) - 1;
- while (top <= bottom) {
- const int middle = (top + bottom) / 2;
- const int result = key.compare(keys[middle].key);
- if (result < 0) {
- bottom = middle - 1;
- } else if (result > 0) {
- top = middle + 1;
- } else {
- text = keys[middle].text;
- return true;
- }
- }
-
- return false;
-}
-
KFileItem InformationPanel::fileItem() const
{
if (!m_fileItem.isNull()) {
@@ -575,9 +546,20 @@
// general meta text information
m_metaTextLabel = new MetaTextLabel(this);
- m_metaTextLabel->setMinimumWidth(spacing);
m_metaTextLabel->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
+ m_metaTextArea = new QScrollArea(this);
+ m_metaTextArea->setWidget(m_metaTextLabel);
+ m_metaTextArea->setWidgetResizable(true);
+ m_metaTextArea->setFrameShape(QFrame::NoFrame);
+
+ QWidget* viewport = m_metaTextArea->viewport();
+ viewport->installEventFilter(this);
+
+ QPalette palette = viewport->palette();
+ palette.setColor(viewport->backgroundRole(), QColor(Qt::transparent));
+ viewport->setPalette(palette);
+
layout->addWidget(m_nameLabel);
layout->addWidget(new KSeparator(this));
layout->addWidget(m_preview);
@@ -586,10 +568,7 @@
layout->addWidget(m_metaDataWidget);
layout->addWidget(new KSeparator(this));
}
- layout->addWidget(m_metaTextLabel);
-
- // ensure that widgets in the information side bar are aligned towards the top
- layout->addStretch(1);
+ layout->addWidget(m_metaTextArea);
setLayout(layout);
org::kde::KDirNotify* dirNotify = new org::kde::KDirNotify(QString(), QString(),
--- trunk/KDE/kdebase/apps/dolphin/src/panels/information/informationpanel.h \
#927541:927542 @@ -37,6 +37,7 @@
class QString;
class KFileItem;
class QLabel;
+class QScrollArea;
class PhononWidget;
class PixmapViewer;
class MetaDataWidget;
@@ -81,6 +82,9 @@
/** @see QWidget::resizeEvent() */
virtual void resizeEvent(QResizeEvent* event);
+ /** @see QObject::eventFilter() */
+ virtual bool eventFilter(QObject* obj, QEvent* event);
+
private slots:
/**
* Shows the information for the item of the URL which has been provided by
@@ -138,13 +142,6 @@
void showMetaInfo();
/**
- * Converts the meta key \a key to a readable format into \a text.
- * Returns true, if the string \a key represents a meta information
- * that should be shown. If false is returned, \a text is not modified.
- */
- bool convertMetaInfo(const QString& key, QString& text) const;
-
- /**
* Returns the item for file where the preview and meta information
* should be received, if InformationPanel::showMultipleSelectionInfo()
* returns false.
@@ -190,6 +187,8 @@
PixmapViewer* m_preview;
PhononWidget* m_phononWidget;
MetaDataWidget* m_metaDataWidget;
+
+ QScrollArea* m_metaTextArea;
MetaTextLabel* m_metaTextLabel;
};
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic