X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/307285e9635a4bf584d6e5d7478876b90ef870f0..5454283008f2:/src/settings/additionalinfodialog.cpp diff --git a/src/settings/additionalinfodialog.cpp b/src/settings/additionalinfodialog.cpp index 2f735fffe..4589b5d44 100644 --- a/src/settings/additionalinfodialog.cpp +++ b/src/settings/additionalinfodialog.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2007 by Peter Penz (peter.penz@gmx.at) * + * Copyright (C) 2007-2012 by Peter Penz * * * * 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 * @@ -19,84 +19,103 @@ #include "additionalinfodialog.h" -#include -#include +#include + +#include +#include +#include "kitemviews/kfileitemmodel.h" +#include +#include #include +#include +#include +#include +#include + +#ifdef HAVE_BALOO + #include +#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& 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 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); + + 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 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 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(); +}