/***************************************************************************
- * 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 "kitemviews/kfileitemmodel.h"
+
+#include <KConfigGroup>
+#include <KLocalizedString>
+#include <KSharedConfig>
+#include <KWindowConfig>
+#include <config-baloo.h>
#include <QCheckBox>
+#include <QDialogButtonBox>
#include <QLabel>
+#include <QPushButton>
#include <QVBoxLayout>
+#ifdef HAVE_BALOO
+ #include <Baloo/IndexerConfig>
+#endif
+
AdditionalInfoDialog::AdditionalInfoDialog(QWidget* parent,
- KFileItemDelegate::InformationList infoList) :
- KDialog(parent),
- m_infoList(infoList),
- m_checkBoxes()
+ const QList<QByteArray>& visibleRoles) :
+ QDialog(parent),
+ m_visibleRoles(visibleRoles),
+ m_listWidget(nullptr)
{
- setCaption(i18nc("@title:window", "Additional Information"));
- setButtons(Ok | Cancel);
- setDefaultButton(Ok);
+ setWindowTitle(i18nc("@title:window", "Additional Information"));
+ setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Minimum);
- QWidget* mainWidget = new QWidget(this);
- mainWidget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Minimum);
- QVBoxLayout* layout = new QVBoxLayout(mainWidget);
+ auto layout = new QVBoxLayout(this);
+ setLayout(layout);
// Add header
- QLabel* header = new QLabel(mainWidget);
- header->setText(i18nc("@label", "Select which additional information should be shown."));
+ auto header = new QLabel(this);
+ 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(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)) && info.role != "text";
+
+ if (!enable) {
+ item->setFlags(item->flags() & ~Qt::ItemIsEnabled);
+ }
}
+ layout->addWidget(m_listWidget);
- layout->addStretch(1);
+ 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);
- setMainWidget(mainWidget);
+ auto okButton = buttonBox->button(QDialogButtonBox::Ok);
+ okButton->setShortcut(Qt::CTRL + Qt::Key_Return);
+ okButton->setDefault(true);
- const KConfigGroup dialogConfig(KSharedConfig::openConfig("dolphinrc"),
- "AdditionalInfoDialog");
- restoreDialogSize(dialogConfig);
-
- connect(this, SIGNAL(okClicked()), this, SLOT(slotOk()));
+ 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::informationList() const
+QList<QByteArray> AdditionalInfoDialog::visibleRoles() const
{
- return m_infoList;
+ return m_visibleRoles;
}
-void AdditionalInfoDialog::slotOk()
+void AdditionalInfoDialog::accept()
{
- 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;
}
-}
-#include "additionalinfodialog.moc"
+ QDialog::accept();
+}