allow to configure the additional information of the view inside the viewproperties dialog

svn path=/trunk/KDE/kdebase/apps/; revision=731150
This commit is contained in:
Peter Penz 2007-10-30 20:52:03 +00:00
parent d9f5e191a6
commit 496872dddc
5 changed files with 189 additions and 89 deletions

View file

@ -69,6 +69,7 @@ install(FILES dolphinpart.desktop DESTINATION ${SERVICES_INSTALL_DIR} )
##########################################
set(dolphin_SRCS
additionalinfodialog.cpp
applyviewpropsjob.cpp
columnviewsettingspage.cpp
detailsviewsettingspage.cpp

View file

@ -0,0 +1,104 @@
/***************************************************************************
* Copyright (C) 2007 by Peter Penz (peter.penz@gmx.at) *
* *
* 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 *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
***************************************************************************/
#include "additionalinfodialog.h"
#include <klocale.h>
#include <kvbox.h>
#include <QCheckBox>
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)
{
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);
}
AdditionalInfoDialog::~AdditionalInfoDialog()
{
KConfigGroup dialogConfig(KSharedConfig::openConfig("dolphinrc"),
"AdditionalInfoDialog");
saveDialogSize(dialogConfig, KConfigBase::Persistent);
}
KFileItemDelegate::InformationList AdditionalInfoDialog::additionalInfo() const
{
return m_info;
}
void AdditionalInfoDialog::slotOk()
{
m_info.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);
}
if (m_group->isChecked()) {
m_info.append(KFileItemDelegate::OwnerAndGroup);
}
if (m_type->isChecked()) {
m_info.append(KFileItemDelegate::FriendlyMimeType);
}
}
#include "additionalinfodialog.moc"

View file

@ -0,0 +1,53 @@
/***************************************************************************
* Copyright (C) 2007 by Peter Penz (peter.penz@gmx.at) *
* *
* 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 *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
***************************************************************************/
#ifndef ADDITIONALINFODIALOG_H
#define ADDITIONALINFODIALOG_H
#include <kdialog.h>
#include <kfileitemdelegate.h>
class QCheckBox;
/**
* @brief Dialog for changing the additional information properties of a directory.
*/
class AdditionalInfoDialog : public KDialog
{
Q_OBJECT
public:
explicit AdditionalInfoDialog(QWidget* parent, KFileItemDelegate::InformationList info);
virtual ~AdditionalInfoDialog();
KFileItemDelegate::InformationList additionalInfo() const;
private slots:
void slotOk();
private:
KFileItemDelegate::InformationList m_info;
QCheckBox* m_size;
QCheckBox* m_date;
QCheckBox* m_permissions;
QCheckBox* m_owner;
QCheckBox* m_group;
QCheckBox* m_type;
};
#endif

View file

@ -19,12 +19,14 @@
***************************************************************************/
#include "viewpropertiesdialog.h"
#include "viewpropsprogressinfo.h"
#include "additionalinfodialog.h"
#include "dolphinview.h"
#include "dolphinsettings.h"
#include "dolphinsortfilterproxymodel.h"
#include "dolphin_generalsettings.h"
#include "viewproperties.h"
#include "viewpropsprogressinfo.h"
#include <config-nepomuk.h>
#ifdef HAVE_NEPOMUK
@ -59,10 +61,10 @@ ViewPropertiesDialog::ViewPropertiesDialog(DolphinView* dolphinView) :
m_viewMode(0),
m_sortOrder(0),
m_sorting(0),
m_additionalInfo(0),
m_showPreview(0),
m_showInGroups(0),
m_showHiddenFiles(0),
m_additionalInfo(0),
m_applyToCurrentFolder(0),
m_applyToSubFolders(0),
m_useAsDefault(0)
@ -120,39 +122,23 @@ ViewPropertiesDialog::ViewPropertiesDialog(DolphinView* dolphinView) :
sortingLayout->addWidget(m_sorting);
sortingBox->setLayout(sortingLayout);
QLabel* additionalInfoLabel = new QLabel(i18nc("@label:listbox", "Additional information:"), propsBox);
m_additionalInfo = new QComboBox(propsBox);
m_additionalInfo->addItem(i18nc("@item:inlistbox Additional info",
"No Information"), NoInfo);
m_additionalInfo->addItem(i18nc("@item:inlistbox Additional info",
"Type"), TypeInfo);
m_additionalInfo->addItem(i18nc("@item:inlistbox Additional info",
"Size"), SizeInfo);
m_additionalInfo->addItem(i18nc("@item:inlistbox Additional info",
"Date"), DateInfo);
m_additionalInfo->addItem(i18nc("@item:inlistbox Additional info",
"Type, Size"), TypeInfo | SizeInfo);
m_additionalInfo->addItem(i18nc("@item:inlistbox Additional info",
"Type, Date"), TypeInfo | DateInfo);
m_additionalInfo->addItem(i18nc("@item:inlistbox Additional info",
"Size, Date"), SizeInfo | DateInfo);
m_additionalInfo->addItem(i18nc("@item:inlistbox Additional info",
"Type, Size, Date"),TypeInfo | SizeInfo | DateInfo);
m_showPreview = new QCheckBox(i18nc("@option:check", "Show preview"), propsBox);
m_showInGroups = new QCheckBox(i18nc("@option:check", "Show in Groups"), propsBox);
m_showHiddenFiles = new QCheckBox(i18nc("@option:check", "Show hidden files"), propsBox);
m_additionalInfo = new QPushButton(i18nc("@action:button", "Additional Information"), propsBox);
connect(m_additionalInfo, SIGNAL(clicked()),
this, SLOT(configureAdditionalInfo()));
QGridLayout* propsBoxLayout = new QGridLayout(propsBox);
propsBoxLayout->addWidget(viewModeLabel, 0, 0);
propsBoxLayout->addWidget(m_viewMode, 0, 1);
propsBoxLayout->addWidget(sortingLabel, 1, 0);
propsBoxLayout->addWidget(sortingBox, 1, 1);
propsBoxLayout->addWidget(additionalInfoLabel, 2, 0);
propsBoxLayout->addWidget(m_additionalInfo, 2, 1);
propsBoxLayout->addWidget(m_showPreview, 3, 0);
propsBoxLayout->addWidget(m_showInGroups, 4, 0);
propsBoxLayout->addWidget(m_showHiddenFiles, 5, 0);
propsBoxLayout->addWidget(m_showPreview, 2, 0);
propsBoxLayout->addWidget(m_showInGroups, 3, 0);
propsBoxLayout->addWidget(m_showHiddenFiles, 4, 0);
propsBoxLayout->addWidget(m_additionalInfo, 5, 0);
topLayout->addWidget(propsBox);
@ -250,12 +236,9 @@ void ViewPropertiesDialog::slotViewModeChanged(int index)
m_viewProps->setViewMode(static_cast<DolphinView::Mode>(index));
m_isDirty = true;
const bool iconsViewEnabled = (m_viewProps->viewMode() == DolphinView::IconsView);
m_showInGroups->setEnabled(iconsViewEnabled);
// TODO: a different approach is required now due to having a lot more additional infos
m_additionalInfo->setEnabled(false);
//m_additionalInfo->setEnabled(iconsViewEnabled);
const DolphinView::Mode mode = m_viewProps->viewMode();
m_showInGroups->setEnabled(mode == DolphinView::IconsView);
m_additionalInfo->setEnabled(mode != DolphinView::ColumnView);
}
void ViewPropertiesDialog::slotSortingChanged(int index)
@ -278,25 +261,6 @@ void ViewPropertiesDialog::slotCategorizedSortingChanged()
m_isDirty = true;
}
void ViewPropertiesDialog::slotAdditionalInfoChanged(int index)
{
const int info = m_additionalInfo->itemData(index).toInt();
KFileItemDelegate::InformationList list;
if (info & TypeInfo) {
list.append(KFileItemDelegate::FriendlyMimeType);
}
if (info & SizeInfo) {
list.append(KFileItemDelegate::Size);
}
if (info & DateInfo) {
list.append(KFileItemDelegate::ModificationTime);
}
m_viewProps->setAdditionalInfo(list);
m_isDirty = true;
}
void ViewPropertiesDialog::slotShowPreviewChanged()
{
const bool show = m_showPreview->isChecked();
@ -316,6 +280,16 @@ void ViewPropertiesDialog::markAsDirty()
m_isDirty = true;
}
void ViewPropertiesDialog::configureAdditionalInfo()
{
const KFileItemDelegate::InformationList info = m_viewProps->additionalInfo();
AdditionalInfoDialog dialog(this, info);
if (dialog.exec() == QDialog::Accepted) {
m_viewProps->setAdditionalInfo(dialog.additionalInfo());
m_isDirty = true;
}
}
void ViewPropertiesDialog::applyViewProperties()
{
const bool applyToSubFolders = m_isDirty &&
@ -385,43 +359,19 @@ void ViewPropertiesDialog::loadSettings()
// load view mode
const int index = static_cast<int>(m_viewProps->viewMode());
m_viewMode->setCurrentIndex(index);
const bool iconsViewEnabled = (index == DolphinView::IconsView);
// load sort order and sorting
const int sortOrderIndex = (m_viewProps->sortOrder() == Qt::AscendingOrder) ? 0 : 1;
m_sortOrder->setCurrentIndex(sortOrderIndex);
m_sorting->setCurrentIndex(m_viewProps->sorting());
// load additional info
const KFileItemDelegate::InformationList list = m_viewProps->additionalInfo();
int info = NoInfo;
foreach (KFileItemDelegate::Information currentInfo, list) {
switch (currentInfo) {
case KFileItemDelegate::FriendlyMimeType:
info = info | TypeInfo;
break;
case KFileItemDelegate::Size:
info = info | SizeInfo;
break;
case KFileItemDelegate::ModificationTime:
info = info | DateInfo;
break;
default:
break;
}
}
const int addInfoIndex = m_additionalInfo->findData(info);
m_additionalInfo->setCurrentIndex(addInfoIndex);
// TODO: a different approach is required now due to having a lot more additional infos
m_additionalInfo->setEnabled(false);
//m_additionalInfo->setEnabled(iconsViewEnabled);
m_additionalInfo->setEnabled(index != DolphinView::ColumnView);
// load show preview, show in groups and show hidden files settings
m_showPreview->setChecked(m_viewProps->showPreview());
m_showInGroups->setChecked(m_viewProps->categorizedSorting());
m_showInGroups->setEnabled(iconsViewEnabled); // only the icons view supports categorized sorting
m_showInGroups->setEnabled(index == DolphinView::IconsView); // only the icons view supports categorized sorting
m_showHiddenFiles->setChecked(m_viewProps->showHiddenFiles());
}

View file

@ -25,6 +25,7 @@
class QCheckBox;
class QComboBox;
class QPushButton;
class QRadioButton;
class ViewProperties;
class DolphinView;
@ -51,23 +52,16 @@ private slots:
void slotSortingChanged(int index);
void slotSortOrderChanged(int index);
void slotCategorizedSortingChanged();
void slotAdditionalInfoChanged(int index);
void slotShowPreviewChanged();
void slotShowHiddenFilesChanged();
void markAsDirty();
void configureAdditionalInfo();
private:
void applyViewProperties();
void loadSettings();
private:
enum AdditionalInfoValues
{
NoInfo = 0,
TypeInfo = 1,
SizeInfo = 2,
DateInfo = 4
};
bool m_isDirty;
DolphinView* m_dolphinView;
ViewProperties* m_viewProps;
@ -75,16 +69,14 @@ private:
QComboBox* m_viewMode;
QComboBox* m_sortOrder;
QComboBox* m_sorting;
QComboBox* m_additionalInfo;
QCheckBox* m_showPreview;
QCheckBox* m_showInGroups;
QCheckBox* m_showHiddenFiles;
QPushButton* m_additionalInfo;
QRadioButton* m_applyToCurrentFolder;
QRadioButton* m_applyToSubFolders;
QRadioButton* m_applyToAllFolders;
QCheckBox* m_useAsDefault;
void applyViewProperties();
};
#endif