]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/settings/additionalinfodialog.cpp
Merge remote-tracking branch 'origin/master' into frameworks
[dolphin.git] / src / settings / additionalinfodialog.cpp
index 8899c4861c0007a7db92bcb07dcfeac63ca4147b..db9258ae8a9bf0baefa429708ea870a98d2f2798 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2007 by Peter Penz (peter.penz@gmx.at)                  *
+ *   Copyright (C) 2007-2012 by Peter Penz <peter.penz19@gmail.com>        *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
  *   it under the terms of the GNU General Public License as published by  *
 
 #include "additionalinfodialog.h"
 
-#include "additionalinfoaccessor.h"
-#include <klocale.h>
+#include <config-baloo.h>
 
+#include <KLocale>
+#include "kitemviews/kfileitemmodel.h"
 #include <QCheckBox>
 #include <QLabel>
 #include <QVBoxLayout>
 
+#ifdef HAVE_BALOO
+    #include <baloo/indexerconfig.h>
+#endif
+
 AdditionalInfoDialog::AdditionalInfoDialog(QWidget* parent,
-                                           KFileItemDelegate::InformationList infoList) :
+                                           const QList<QByteArray>& visibleRoles) :
     KDialog(parent),
-    m_infoList(infoList),
-    m_checkBoxes()
+    m_visibleRoles(visibleRoles),
+    m_listWidget(0)
 {
     setCaption(i18nc("@title:window", "Additional Information"));
     setButtons(Ok | Cancel);
@@ -38,56 +43,68 @@ AdditionalInfoDialog::AdditionalInfoDialog(QWidget* parent,
 
     QWidget* mainWidget = new QWidget(this);
     mainWidget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Minimum);
-    QVBoxLayout* layout = new QVBoxLayout(mainWidget);
 
     // Add header
     QLabel* header = new QLabel(mainWidget);
-    header->setText(i18nc("@label", "Select which additional information should be shown."));
+    header->setText(i18nc("@label", "Select which additional information should be shown:"));
     header->setWordWrap(true);
-    layout->addWidget(header);
 
     // Add checkboxes
-    const AdditionalInfoAccessor& infoAccessor = AdditionalInfoAccessor::instance();
-    const KFileItemDelegate::InformationList keys = infoAccessor.keys();
-    foreach (const KFileItemDelegate::Information info, keys) {
-        QCheckBox* checkBox = new QCheckBox(infoAccessor.translation(info), mainWidget);
-        checkBox->setChecked(infoList.contains(info));
-        layout->addWidget(checkBox);
-        m_checkBoxes.append(checkBox);
+    bool indexingEnabled = false;
+#ifdef HAVE_BALOO
+    Baloo::IndexerConfig config;
+    indexingEnabled = config.fileIndexingEnabled();
+#endif
+
+    m_listWidget = new QListWidget(mainWidget);
+    m_listWidget->setSelectionMode(QAbstractItemView::NoSelection);
+    const QList<KFileItemModel::RoleInfo> rolesInfo = KFileItemModel::rolesInformation();
+    foreach (const KFileItemModel::RoleInfo& info, rolesInfo) {
+        QListWidgetItem* item = new QListWidgetItem(info.translation, m_listWidget);
+        item->setCheckState(visibleRoles.contains(info.role) ? Qt::Checked : Qt::Unchecked);
+
+        const bool enable = (!info.requiresBaloo && !info.requiresIndexer) ||
+                            (info.requiresBaloo) ||
+                            (info.requiresIndexer && indexingEnabled);
+
+        if (!enable) {
+            item->setFlags(item->flags() & ~Qt::ItemIsEnabled);
+        }
     }
 
-    layout->addStretch(1);
+    QVBoxLayout* layout = new QVBoxLayout(mainWidget);
+    layout->addWidget(header);
+    layout->addWidget(m_listWidget);
 
     setMainWidget(mainWidget);
 
-    const KConfigGroup dialogConfig(KSharedConfig::openConfig("dolphinrc"),
-                                    "AdditionalInfoDialog");
+    const KConfigGroup dialogConfig(KSharedConfig::openConfig("dolphinrc"), "AdditionalInfoDialog");
     restoreDialogSize(dialogConfig);
 
-    connect(this, SIGNAL(okClicked()), this, SLOT(slotOk()));
+    connect(this, &AdditionalInfoDialog::okClicked, this, &AdditionalInfoDialog::slotOk);
 }
 
 AdditionalInfoDialog::~AdditionalInfoDialog()
 {
-    KConfigGroup dialogConfig(KSharedConfig::openConfig("dolphinrc"),
-                              "AdditionalInfoDialog");
+    KConfigGroup dialogConfig(KSharedConfig::openConfig("dolphinrc"), "AdditionalInfoDialog");
     saveDialogSize(dialogConfig, KConfigBase::Persistent);
 }
 
-KFileItemDelegate::InformationList AdditionalInfoDialog::informationList() const
+QList<QByteArray> AdditionalInfoDialog::visibleRoles() const
 {
-    return m_infoList;
+    return m_visibleRoles;
 }
 
 void AdditionalInfoDialog::slotOk()
 {
-    m_infoList.clear();
+    m_visibleRoles.clear();
 
-    const KFileItemDelegate::InformationList keys = AdditionalInfoAccessor::instance().keys();
     int index = 0;
-    foreach (const KFileItemDelegate::Information info, keys) {
-        if (m_checkBoxes[index]->isChecked()) {
-            m_infoList.append(info);
+    const QList<KFileItemModel::RoleInfo> rolesInfo = KFileItemModel::rolesInformation();
+    foreach (const KFileItemModel::RoleInfo& info, rolesInfo) {
+        const QListWidgetItem* item = m_listWidget->item(index);
+        if (item->checkState() == Qt::Checked) {
+            m_visibleRoles.append(info.role);
         }
         ++index;
     }