]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Reactivate showing of general meta information. This is also done as part of the...
authorPeter Penz <peter.penz19@gmail.com>
Sat, 10 Oct 2009 21:28:37 +0000 (21:28 +0000)
committerPeter Penz <peter.penz19@gmail.com>
Sat, 10 Oct 2009 21:28:37 +0000 (21:28 +0000)
svn path=/trunk/KDE/kdebase/apps/; revision=1033722

src/panels/information/informationpanelcontent.cpp
src/panels/information/informationpanelcontent.h
src/panels/information/metadatawidget.cpp

index 1d95c00134abc5312b91f11f32a97fd66338edb9..4ddbf656201ab27c3f87a13401ac9f322592a17c 100644 (file)
 #include "phononwidget.h"
 #include "pixmapviewer.h"
 
-#ifdef HAVE_NEPOMUK
-#define DISABLE_NEPOMUK_LEGACY
-#include <Nepomuk/Resource>
-#include <Nepomuk/Types/Property>
-#include <Nepomuk/Variant>
-#endif
-
 /**
  * Helper function for sorting items with qSort() in
  * InformationPanelContent::contextMenu().
@@ -188,30 +181,6 @@ void InformationPanelContent::showItem(const KFileItem& item)
         setNameLabelText(itemUrl.fileName());
     }
 
-/* TODO: move to MetaDataWidget
-    if (!item.isDir() && item.nepomukUri().isValid()) {
-        KConfig config("kmetainformationrc", KConfig::NoGlobals);
-        KConfigGroup settings = config.group("Show");
-        initMetaInfoSettings(settings);
-
-        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());
-            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 until
-                // we get translated labels
-                m_metaTextLabel->add(tunedLabel(prop.label()) + ':', it.value().toString());
-            }
-            ++it;
-        }
-    }
-*/
-
     if (m_metaDataWidget != 0) {
         m_metaDataWidget->setItem(item);
     }
@@ -299,7 +268,6 @@ bool InformationPanelContent::eventFilter(QObject* obj, QEvent* event)
 
 void InformationPanelContent::configureSettings()
 {
-#ifdef HAVE_NEPOMUK
     if (m_item.isNull() ||
         !m_item.nepomukUri().isValid()) {
         return;
@@ -333,13 +301,12 @@ void InformationPanelContent::configureSettings()
 
     KConfig config("kmetainformationrc", KConfig::NoGlobals);
     KConfigGroup settings = config.group("Show");
-    initMetaInfoSettings(settings);
 
     QList<QAction*> actions;
 
     // Get all meta information labels that are available for
     // the currently shown file item and add them to the popup.
-    Nepomuk::Resource res(m_item.url());
+    /*Nepomuk::Resource res(m_item.url());
     QHash<QUrl, Nepomuk::Variant> properties = res.properties();
     QHash<QUrl, Nepomuk::Variant>::const_iterator it = properties.constBegin();
     while (it != properties.constEnd()) {
@@ -375,7 +342,7 @@ void InformationPanelContent::configureSettings()
         }
 
         ++it;
-    }
+    }*/
 
     if (!actions.isEmpty()) {
         popup.addSeparator();
@@ -421,7 +388,6 @@ void InformationPanelContent::configureSettings()
     }*/
 
     showItem(m_item);
-#endif
 }
 
 void InformationPanelContent::showIcon(const KFileItem& item)
@@ -511,52 +477,4 @@ void InformationPanelContent::setNameLabelText(const QString& text)
     m_nameLabel->setText(wrappedText);
 }
 
-void InformationPanelContent::initMetaInfoSettings(KConfigGroup& group)
-{
-    if (!group.readEntry("initialized", false)) {
-        // The resource file is read the first time. Assure
-        // that some meta information is disabled per default.
-
-        static const char* disabledProperties[] = {
-            "asText", "contentSize", "depth", "fileExtension",
-            "fileName", "fileSize", "isPartOf", "mimetype", "name",
-            "parentUrl", "plainTextContent", "sourceModified",
-            "size", "url",
-            0 // mandatory last entry
-        };
-
-        int i = 0;
-        while (disabledProperties[i] != 0) {
-            group.writeEntry(disabledProperties[i], false);
-            ++i;
-        }
-
-        // mark the group as initialized
-        group.writeEntry("initialized", true);
-    }
-}
-
-QString InformationPanelContent::tunedLabel(const QString& label) const
-{
-    QString tunedLabel;
-    const int labelLength = label.length();
-    if (labelLength > 0) {
-        tunedLabel.reserve(labelLength);
-        tunedLabel = label[0].toUpper();
-        for (int i = 1; i < labelLength; ++i) {
-            if (label[i].isUpper() && !label[i - 1].isSpace() && !label[i - 1].isUpper()) {
-                tunedLabel += ' ';
-                tunedLabel += label[i].toLower();
-            } else {
-                tunedLabel += label[i];
-            }
-        }
-    }
-    return tunedLabel;
-}
-
-void InformationPanelContent::init()
-{
-}
-
 #include "informationpanelcontent.moc"
index 3b9fc6dc361231e87fa921025ed9d679fa733563..b39dcc70be18815c5dec418fb2eb3f4963699d38 100644 (file)
@@ -110,21 +110,6 @@ private:
      */
     void setNameLabelText(const QString& text);
 
-    /**
-     * 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
-     * like "fileLocation" by "File Location:".
-     */
-    QString tunedLabel(const QString& label) const;
-
-    void init();
-
 private:
     KFileItem m_item;
 
index 76a6769b181b7fa0f20d96b20b43cb4cba67ef95..30bdb904f3acd13a4897f4a3af88680c7ba65091 100644 (file)
 
 #include <config-nepomuk.h>
 #ifdef HAVE_NEPOMUK
+    #define DISABLE_NEPOMUK_LEGACY
+
     #include "commentwidget_p.h"
     #include "nepomukmassupdatejob_p.h"
     #include "taggingwidget_p.h"
 
-    #include <nepomuk/kratingwidget.h>
-    #include <nepomuk/resource.h>
-    #include <nepomuk/tag.h>
+    #include <kconfig.h>
+    #include <kconfiggroup.h>
+
+    #include <Nepomuk/KRatingWidget>
+    #include <Nepomuk/Resource>
+    #include <Nepomuk/Tag>
+    #include <Nepomuk/Types/Property>
+    #include <Nepomuk/Variant>
+
     #include <Soprano/Vocabulary/Xesam>
     #include <QMutex>
     #include <QThread>
@@ -55,35 +63,38 @@ public:
     ~Private();
 
     void addRow(QLabel* label, QWidget* infoWidget);
+    void removeMetaInfoRows();
     void setRowVisible(QWidget* infoWidget, bool visible);
 
     void slotLoadingFinished();
 
-    QList<Row> rows;
+    QList<Row> m_rows;
 
-    QGridLayout* gridLayout;
+    QGridLayout* m_gridLayout;
 
-    QLabel* typeInfo;
-    QLabel* sizeLabel;
-    QLabel* sizeInfo;
-    QLabel* modifiedInfo;
-    QLabel* ownerInfo;
-    QLabel* permissionsInfo;
+    QLabel* m_typeInfo;
+    QLabel* m_sizeLabel;
+    QLabel* m_sizeInfo;
+    QLabel* m_modifiedInfo;
+    QLabel* m_ownerInfo;
+    QLabel* m_permissionsInfo;
 
 #ifdef HAVE_NEPOMUK
-    KRatingWidget* ratingWidget;
-    TaggingWidget* taggingWidget;
-    CommentWidget* commentWidget;
+    KRatingWidget* m_ratingWidget;
+    TaggingWidget* m_taggingWidget;
+    CommentWidget* m_commentWidget;
 
     // shared data between the GUI-thread and
     // the loader-thread (see LoadFilesThread):
-    QMutex mutex;
+    QMutex m_mutex;
     struct SharedData
     {
         int rating;
         QString comment;
         QList<Nepomuk::Tag> tags;
-    } sharedData;
+        QList<QString> metaInfoLabels;
+        QList<QString> metaInfoValues;
+    } m_sharedData;
 
     /**
      * Loads the meta data of files and writes
@@ -93,19 +104,33 @@ public:
     class LoadFilesThread : public QThread
     {
     public:
-        LoadFilesThread(SharedData* sharedData, QMutex* mutex);
+        LoadFilesThread(SharedData* m_sharedData, QMutex* m_mutex);
         virtual ~LoadFilesThread();
         void loadFiles(const KUrl::List& urls);
         virtual void run();
 
     private:
-        SharedData* m_sharedData;
-        QMutex* m_mutex;
+        /**
+         * 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
+         * like "fileLocation" by "File Location:".
+         */
+        QString tunedLabel(const QString& label) const;
+
+    private:
+        SharedData* m_m_sharedData;
+        QMutex* m_m_mutex;
         KUrl::List m_urls;
         bool m_canceled;
     };
 
-    LoadFilesThread* loadFilesThread;
+    LoadFilesThread* m_loadFilesThread;
 #endif
 
 private:
@@ -113,56 +138,56 @@ private:
 };
 
 MetaDataWidget::Private::Private(MetaDataWidget* parent) :
-    rows(),
-    gridLayout(0),
-    typeInfo(0),
-    sizeLabel(0),
-    sizeInfo(0),
-    modifiedInfo(0),
-    ownerInfo(0),
-    permissionsInfo(0),
+    m_rows(),
+    m_gridLayout(0),
+    m_typeInfo(0),
+    m_sizeLabel(0),
+    m_sizeInfo(0),
+    m_modifiedInfo(0),
+    m_ownerInfo(0),
+    m_permissionsInfo(0),
 #ifdef HAVE_NEPOMUK
-    ratingWidget(0),
-    taggingWidget(0),
-    commentWidget(0),
-    loadFilesThread(0),
+    m_ratingWidget(0),
+    m_taggingWidget(0),
+    m_commentWidget(0),
+    m_loadFilesThread(0),
 #endif
     q(parent)
 {
-    gridLayout = new QGridLayout(parent);
-
-    typeInfo = new QLabel(parent);
-    sizeLabel = new QLabel(parent);
-    sizeInfo = new QLabel(parent);
-    modifiedInfo = new QLabel(parent);
-    ownerInfo = new QLabel(parent);
-    permissionsInfo = new QLabel(parent);
+    m_gridLayout = new QGridLayout(parent);
+
+    m_typeInfo = new QLabel(parent);
+    m_sizeLabel = new QLabel(parent);
+    m_sizeInfo = new QLabel(parent);
+    m_modifiedInfo = new QLabel(parent);
+    m_ownerInfo = new QLabel(parent);
+    m_permissionsInfo = new QLabel(parent);
 #ifdef HAVE_NEPOMUK
-    ratingWidget = new KRatingWidget(parent);
-    taggingWidget = new TaggingWidget(parent);
-    commentWidget = new CommentWidget(parent);
+    m_ratingWidget = new KRatingWidget(parent);
+    m_taggingWidget = new TaggingWidget(parent);
+    m_commentWidget = new CommentWidget(parent);
 #endif
 
-    addRow(new QLabel(i18nc("@label", "Type:"), parent), typeInfo);
-    addRow(sizeLabel, sizeInfo);
-    addRow(new QLabel(i18nc("@label", "Modified:"), parent), modifiedInfo);
-    addRow(new QLabel(i18nc("@label", "Owner:"), parent), ownerInfo);
-    addRow(new QLabel(i18nc("@label", "Permissions:"), parent), permissionsInfo);
+    addRow(new QLabel(i18nc("@label", "Type:"), parent), m_typeInfo);
+    addRow(m_sizeLabel, m_sizeInfo);
+    addRow(new QLabel(i18nc("@label", "Modified:"), parent), m_modifiedInfo);
+    addRow(new QLabel(i18nc("@label", "Owner:"), parent), m_ownerInfo);
+    addRow(new QLabel(i18nc("@label", "Permissions:"), parent), m_permissionsInfo);
 #ifdef HAVE_NEPOMUK
-    addRow(new QLabel(i18nc("@label", "Rating:"), parent), ratingWidget);
-    addRow(new QLabel(i18nc("@label", "Tags:"), parent), taggingWidget);
-    addRow(new QLabel(i18nc("@label", "Comment:"), parent), commentWidget);
+    addRow(new QLabel(i18nc("@label", "Rating:"), parent), m_ratingWidget);
+    addRow(new QLabel(i18nc("@label", "Tags:"), parent), m_taggingWidget);
+    addRow(new QLabel(i18nc("@label", "Comment:"), parent), m_commentWidget);
 
-    sharedData.rating = 0;
-    loadFilesThread = new LoadFilesThread(&sharedData, &mutex);
-    connect(loadFilesThread, SIGNAL(finished()), q, SLOT(slotLoadingFinished()));
+    m_sharedData.rating = 0;
+    m_loadFilesThread = new LoadFilesThread(&m_sharedData, &m_mutex);
+    connect(m_loadFilesThread, SIGNAL(finished()), q, SLOT(slotLoadingFinished()));
 #endif
 }
 
 MetaDataWidget::Private::~Private()
 {
 #ifdef HAVE_NEPOMUK
-    delete loadFilesThread;
+    delete m_loadFilesThread;
 #endif
 }
 
@@ -171,7 +196,7 @@ void MetaDataWidget::Private::addRow(QLabel* label, QWidget* infoWidget)
     Row row;
     row.label = label;
     row.infoWidget = infoWidget;
-    rows.append(row);
+    m_rows.append(row);
 
     // use a brighter color for the label
     QPalette palette = label->palette();
@@ -181,14 +206,14 @@ void MetaDataWidget::Private::addRow(QLabel* label, QWidget* infoWidget)
     label->setPalette(palette);
 
     // add the row to grid layout
-    const int rowIndex = rows.count();
-    gridLayout->addWidget(label, rowIndex, 0, Qt::AlignLeft);
-    gridLayout->addWidget(infoWidget, rowIndex, 1, Qt::AlignRight);
+    const int rowIndex = m_rows.count();
+    m_gridLayout->addWidget(label, rowIndex, 0, Qt::AlignLeft);
+    m_gridLayout->addWidget(infoWidget, rowIndex, 1, Qt::AlignRight);
 }
 
 void MetaDataWidget::Private::setRowVisible(QWidget* infoWidget, bool visible)
 {
-    foreach (const Row& row, rows) {
+    foreach (const Row& row, m_rows) {
         if (row.infoWidget == infoWidget) {
             row.label->setVisible(visible);
             row.infoWidget->setVisible(visible);
@@ -200,19 +225,51 @@ void MetaDataWidget::Private::setRowVisible(QWidget* infoWidget, bool visible)
 void MetaDataWidget::Private::slotLoadingFinished()
 {
 #ifdef HAVE_NEPOMUK
-    QMutexLocker locker(&mutex);
-    ratingWidget->setRating(sharedData.rating);
-    commentWidget->setText(sharedData.comment);
-    taggingWidget->setTags(sharedData.tags);
+    QMutexLocker locker(&m_mutex);
+    m_ratingWidget->setRating(m_sharedData.rating);
+    m_commentWidget->setText(m_sharedData.comment);
+    m_taggingWidget->setTags(m_sharedData.tags);
+
+    // Show the remaining meta information as text. The number
+    // of required rows may very. Existing rows are reused to
+    // prevent flickering.
+    int index = 8;  // TODO: don't hardcode this value here
+    const int rowCount = m_rows.count();
+    Q_ASSERT(rowCount >= index);
+
+    Q_ASSERT(m_sharedData.metaInfoLabels.count() == m_sharedData.metaInfoValues.count());
+    const int metaInfoCount = m_sharedData.metaInfoLabels.count();
+    for (int i = 0; i < metaInfoCount; ++i) {
+        if (index < rowCount) {
+            // adjust texts of the current row
+            m_rows[index].label->setText(m_sharedData.metaInfoLabels[i]);
+            QLabel* infoValueLabel = qobject_cast<QLabel*>(m_rows[index].infoWidget);
+            Q_ASSERT(infoValueLabel != 0);
+            infoValueLabel->setText(m_sharedData.metaInfoValues[i]);
+        } else {
+            // create new row
+            QLabel* infoLabel = new QLabel(m_sharedData.metaInfoLabels[i], q);
+            QLabel* infoValue = new QLabel(m_sharedData.metaInfoValues[i], q);
+            addRow(infoLabel, infoValue);
+        }
+        ++index;
+    }
+
+    // remove rows that are not needed anymore
+    for (int i = rowCount - 1; i > index; --i) {
+        delete m_rows[i].label;
+        delete m_rows[i].infoWidget;
+        m_rows.pop_back();
+    }
 #endif
 }
 
 #ifdef HAVE_NEPOMUK
 MetaDataWidget::Private::LoadFilesThread::LoadFilesThread(
-                            MetaDataWidget::Private::SharedData* sharedData,
-                            QMutex* mutex) :
-    m_sharedData(sharedData),
-    m_mutex(mutex),
+                            MetaDataWidget::Private::SharedData* m_sharedData,
+                            QMutex* m_mutex) :
+    m_m_sharedData(m_sharedData),
+    m_m_mutex(m_mutex),
     m_urls(),
     m_canceled(false)
 {
@@ -228,7 +285,7 @@ MetaDataWidget::Private::LoadFilesThread::~LoadFilesThread()
 
 void MetaDataWidget::Private::LoadFilesThread::loadFiles(const KUrl::List& urls)
 {
-    QMutexLocker locker(m_mutex);
+    QMutexLocker locker(m_m_mutex);
     m_urls = urls;
     m_canceled = false;
     start();
@@ -236,14 +293,20 @@ void MetaDataWidget::Private::LoadFilesThread::loadFiles(const KUrl::List& urls)
 
 void MetaDataWidget::Private::LoadFilesThread::run()
 {
-    QMutexLocker locker(m_mutex);
+    QMutexLocker locker(m_m_mutex);
     const KUrl::List urls = m_urls;
     locker.unlock();
 
+    KConfig config("kmetainformationrc", KConfig::NoGlobals);
+    KConfigGroup settings = config.group("Show");
+    initMetaInfoSettings(settings);
+
     bool first = true;
     unsigned int rating = 0;
     QString comment;
     QList<Nepomuk::Tag> tags;
+    QList<QString> metaInfoLabels;
+    QList<QString> metaInfoValues;
     foreach (const KUrl& url, urls) {
         if (m_canceled) {
             return;
@@ -269,14 +332,80 @@ void MetaDataWidget::Private::LoadFilesThread::run()
             tags = file.tags();
         }
 
+        if (first && (urls.count() == 1)) {
+            // TODO: show shared meta informations instead
+            // of not showing anything on multiple selections
+            QHash<QUrl, Nepomuk::Variant> properties = file.properties();
+            QHash<QUrl, Nepomuk::Variant>::const_iterator it = properties.constBegin();
+            while (it != properties.constEnd()) {
+                Nepomuk::Types::Property prop(it.key());
+                if (true /*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 until
+                    // we get translated labels
+                    metaInfoLabels.append(tunedLabel(prop.label()));
+                    metaInfoValues.append(it.value().toString());
+                }
+                ++it;
+            }
+        }
+
         first = false;
     }
 
     locker.relock();
-    m_sharedData->rating = rating;
-    m_sharedData->comment = comment;
-    m_sharedData->tags = tags;
+    m_m_sharedData->rating = rating;
+    m_m_sharedData->comment = comment;
+    m_m_sharedData->tags = tags;
+    m_m_sharedData->metaInfoLabels = metaInfoLabels;
+    m_m_sharedData->metaInfoValues = metaInfoValues;
 }
+
+void MetaDataWidget::Private::LoadFilesThread::initMetaInfoSettings(KConfigGroup& group)
+{
+    if (!group.readEntry("initialized", false)) {
+        // The resource file is read the first time. Assure
+        // that some meta information is disabled per default.
+
+        static const char* disabledProperties[] = {
+            "asText", "contentSize", "depth", "fileExtension",
+            "fileName", "fileSize", "isPartOf", "mimetype", "name",
+            "parentUrl", "plainTextContent", "sourceModified",
+            "size", "url",
+            0 // mandatory last entry
+        };
+
+        int i = 0;
+        while (disabledProperties[i] != 0) {
+            group.writeEntry(disabledProperties[i], false);
+            ++i;
+        }
+
+        // mark the group as initialized
+        group.writeEntry("initialized", true);
+    }
+}
+
+QString MetaDataWidget::Private::LoadFilesThread::tunedLabel(const QString& label) const
+{
+    QString tunedLabel;
+    const int labelLength = label.length();
+    if (labelLength > 0) {
+        tunedLabel.reserve(labelLength);
+        tunedLabel = label[0].toUpper();
+        for (int i = 1; i < labelLength; ++i) {
+            if (label[i].isUpper() && !label[i - 1].isSpace() && !label[i - 1].isUpper()) {
+                tunedLabel += ' ';
+                tunedLabel += label[i].toLower();
+            } else {
+                tunedLabel += label[i];
+            }
+        }
+    }
+    return tunedLabel + ':';
+}
+
 #endif
 
 MetaDataWidget::MetaDataWidget(QWidget* parent) :
@@ -294,18 +423,18 @@ void MetaDataWidget::setItem(const KFileItem& item)
 {
     // update values for "type", "size", "modified",
     // "owner" and "permissions" synchronously
-    d->sizeLabel->setText(i18nc("@label", "Size:"));
+    d->m_sizeLabel->setText(i18nc("@label", "Size:"));
     if (item.isDir()) {
-        d->typeInfo->setText(i18nc("@label", "Folder"));
-        d->setRowVisible(d->sizeInfo, false);
+        d->m_typeInfo->setText(i18nc("@label", "Folder"));
+        d->setRowVisible(d->m_sizeInfo, false);
     } else {
-        d->typeInfo->setText(item.mimeComment());
-        d->sizeInfo->setText(KIO::convertSize(item.size()));
-        d->setRowVisible(d->sizeInfo, true);
+        d->m_typeInfo->setText(item.mimeComment());
+        d->m_sizeInfo->setText(KIO::convertSize(item.size()));
+        d->setRowVisible(d->m_sizeInfo, true);
     }
-    d->modifiedInfo->setText(item.timeString());
-    d->ownerInfo->setText(item.user());
-    d->permissionsInfo->setText(item.permissionsString());
+    d->m_modifiedInfo->setText(item.timeString());
+    d->m_ownerInfo->setText(item.user());
+    d->m_permissionsInfo->setText(item.permissionsString());
 
     setItems(KFileItemList() << item);
 }
@@ -315,8 +444,8 @@ void MetaDataWidget::setItems(const KFileItemList& items)
     if (items.count() > 1) {
         // calculate the size of all items and show this
         // information to the user
-        d->sizeLabel->setText(i18nc("@label", "Total Size:"));
-        d->setRowVisible(d->sizeInfo, true);
+        d->m_sizeLabel->setText(i18nc("@label", "Total Size:"));
+        d->setRowVisible(d->m_sizeInfo, true);
 
         quint64 totalSize = 0;
         foreach (const KFileItem& item, items) {
@@ -324,7 +453,7 @@ void MetaDataWidget::setItems(const KFileItemList& items)
                 totalSize += item.size();
             }
         }
-        d->sizeInfo->setText(KIO::convertSize(totalSize));
+        d->m_sizeInfo->setText(KIO::convertSize(totalSize));
     }
 
 #ifdef HAVE_NEPOMUK
@@ -335,7 +464,7 @@ void MetaDataWidget::setItems(const KFileItemList& items)
             urls.append(url);
         }
     }
-    d->loadFilesThread->loadFiles(urls);
+    d->m_loadFilesThread->loadFiles(urls);
 #endif
 }