]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/settings/additionalinfodialog.cpp
Merge branch 'Applications/17.08'
[dolphin.git] / src / settings / additionalinfodialog.cpp
index 2f735fffec6afd20b5661b2f7bc446ac2486b0e7..23a65b5ac0a96e7f5a1d6812848ef898aa5650a1 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 <klocale.h>
-#include <kvbox.h>
+#include <config-baloo.h>
+
+#include <KSharedConfig>
+#include <KLocalizedString>
+#include "kitemviews/kfileitemmodel.h"
+#include <KConfigGroup>
+#include <KWindowConfig>
 
 #include <QCheckBox>
+#include <QLabel>
+#include <QVBoxLayout>
+#include <QDialogButtonBox>
+#include <QPushButton>
+
+#ifdef HAVE_BALOO
+    #include <Baloo/IndexerConfig>
+#endif
 
 AdditionalInfoDialog::AdditionalInfoDialog(QWidget* parent,
-                                           KFileItemDelegate::InformationList info) :
-    KDialog(parent),
-    m_info(info),
-    m_size(0),
-    m_date(0),
-    m_permissions(0),
-    m_owner(0),
-    m_group(0),
-    m_type(0)
+                                           const QList<QByteArray>& visibleRoles) :
+    QDialog(parent),
+    m_visibleRoles(visibleRoles),
+    m_listWidget(0)
 {
-    setCaption(i18nc("@title:window", "Additional Information"));
-    setButtons(Ok | Cancel);
-    setDefaultButton(Ok);
-
-    KVBox* box = new KVBox(this);
-
-    m_size = new QCheckBox(i18nc("@option:check Additional Information", "Size"), box);
-    m_date = new QCheckBox(i18nc("@option:check Additional Information", "Date"), box);
-    m_permissions = new QCheckBox(i18nc("@option:check Additional Information", "Permissions"), box);
-    m_owner = new QCheckBox(i18nc("@option:check Additional Information", "Owner"), box);
-    m_group = new QCheckBox(i18nc("@option:check Additional Information", "Group"), box);
-    m_type = new QCheckBox(i18nc("@option:check Additional Information", "Type"), box);
-    connect(this, SIGNAL(okClicked()), this, SLOT(slotOk()));
-
-    m_size->setChecked(info.contains(KFileItemDelegate::Size));
-    m_date->setChecked(info.contains(KFileItemDelegate::ModificationTime));
-    m_permissions->setChecked(info.contains(KFileItemDelegate::Permissions));
-    m_owner->setChecked(info.contains(KFileItemDelegate::Owner));
-    m_group->setChecked(info.contains(KFileItemDelegate::OwnerAndGroup));
-    m_type->setChecked(info.contains(KFileItemDelegate::FriendlyMimeType));
-
-    setMainWidget(box);
-
-    const KConfigGroup dialogConfig(KSharedConfig::openConfig("dolphinrc"),
-                                    "AdditionalInfoDialog");
-    restoreDialogSize(dialogConfig);
+    setWindowTitle(i18nc("@title:window", "Additional Information"));
+    setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Minimum);
+
+    auto layout = new QVBoxLayout(this);
+    setLayout(layout);
+
+    // Add header
+    auto header = new QLabel(this);
+    header->setText(i18nc("@label", "Select which additional information should be shown:"));
+    header->setWordWrap(true);
+    layout->addWidget(header);
+
+    // Add checkboxes
+    bool indexingEnabled = false;
+#ifdef HAVE_BALOO
+    Baloo::IndexerConfig config;
+    indexingEnabled = config.fileIndexingEnabled();
+#endif
+
+    m_listWidget = new QListWidget(this);
+    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->addWidget(m_listWidget);
+
+    auto buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, this);
+    connect(buttonBox, &QDialogButtonBox::accepted, this, &AdditionalInfoDialog::accept);
+    connect(buttonBox, &QDialogButtonBox::rejected, this, &AdditionalInfoDialog::reject);
+    layout->addWidget(buttonBox);
+
+    auto okButton = buttonBox->button(QDialogButtonBox::Ok);
+    okButton->setShortcut(Qt::CTRL | Qt::Key_Return);
+    okButton->setDefault(true);
+
+    const KConfigGroup dialogConfig(KSharedConfig::openConfig(QStringLiteral("dolphinrc")), "AdditionalInfoDialog");
+    KWindowConfig::restoreWindowSize(windowHandle(), dialogConfig);
 }
 
 AdditionalInfoDialog::~AdditionalInfoDialog()
 {
-    KConfigGroup dialogConfig(KSharedConfig::openConfig("dolphinrc"),
-                              "AdditionalInfoDialog");
-    saveDialogSize(dialogConfig, KConfigBase::Persistent);
+    KConfigGroup dialogConfig(KSharedConfig::openConfig(QStringLiteral("dolphinrc")), "AdditionalInfoDialog");
+    KWindowConfig::saveWindowSize(windowHandle(), dialogConfig);
 }
 
-KFileItemDelegate::InformationList AdditionalInfoDialog::additionalInfo() const
+QList<QByteArray> AdditionalInfoDialog::visibleRoles() const
 {
-    return m_info;
+    return m_visibleRoles;
 }
 
-void AdditionalInfoDialog::slotOk()
+void AdditionalInfoDialog::accept()
 {
-    m_info.clear();
+    m_visibleRoles.clear();
 
-    if (m_size->isChecked()) {
-        m_info.append(KFileItemDelegate::Size);
-    }
-    if (m_date->isChecked()) {
-        m_info.append(KFileItemDelegate::ModificationTime);
-    }
-    if (m_permissions->isChecked()) {
-        m_info.append(KFileItemDelegate::Permissions);
-    }
-    if (m_owner->isChecked()) {
-        m_info.append(KFileItemDelegate::Owner);
+    int index = 0;
+    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;
     }
-    if (m_group->isChecked()) {
-        m_info.append(KFileItemDelegate::OwnerAndGroup);
-    }
-    if (m_type->isChecked()) {
-        m_info.append(KFileItemDelegate::FriendlyMimeType);
-    }
-}
 
-#include "additionalinfodialog.moc"
+    QDialog::accept();
+}