From f57f351cceb9b664d681aad3680998f5bfe2137c Mon Sep 17 00:00:00 2001 From: Peter Penz Date: Sun, 1 Apr 2007 17:57:53 +0000 Subject: [PATCH] integrate column view into settings svn path=/trunk/KDE/kdebase/apps/; revision=648926 --- src/CMakeLists.txt | 4 +- src/columnviewsettingspage.cpp | 135 +++++++++++++++++++++++++++ src/columnviewsettingspage.h | 59 ++++++++++++ src/dolphin_columnmodesettings.kcfg | 29 ++++++ src/dolphin_columnmodesettings.kcfgc | 4 + src/dolphincolumnview.cpp | 59 ++++++++---- src/dolphincolumnview.h | 8 ++ src/dolphinsettings.cpp | 10 +- src/dolphinsettings.h | 9 +- src/dolphinsettingsdialog.cpp | 3 + src/viewpropertiesdialog.cpp | 2 +- src/viewsettingspage.cpp | 14 ++- src/viewsettingspage.h | 6 +- 13 files changed, 313 insertions(+), 29 deletions(-) create mode 100644 src/columnviewsettingspage.cpp create mode 100644 src/columnviewsettingspage.h create mode 100644 src/dolphin_columnmodesettings.kcfg create mode 100644 src/dolphin_columnmodesettings.kcfgc diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 81eaf9452..90a4b121f 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -16,6 +16,7 @@ set(dolphinprivate_LIB_SRCS ) kde4_add_kcfg_files(dolphinprivate_LIB_SRCS + dolphin_columnmodesettings.kcfgc dolphin_directoryviewpropertysettings.kcfgc dolphin_detailsmodesettings.kcfgc dolphin_iconsmodesettings.kcfgc @@ -39,6 +40,7 @@ set(dolphin_SRCS bookmarkselector.cpp bookmarkssettingspage.cpp bookmarkssidebarpage.cpp + columnviewsettingspage.cpp detailsviewsettingspage.cpp dolphinapplication.cpp dolphincolumnview.cpp @@ -103,7 +105,7 @@ install(TARGETS dolphin DESTINATION ${BIN_INSTALL_DIR}) ########### install files ############### install( FILES dolphin.desktop DESTINATION ${XDG_APPS_DIR} ) -install( FILES dolphin_directoryviewpropertysettings.kcfg dolphin_generalsettings.kcfg dolphin_iconsmodesettings.kcfg dolphin_detailsmodesettings.kcfg DESTINATION ${KCFG_INSTALL_DIR} ) +install( FILES dolphin_directoryviewpropertysettings.kcfg dolphin_generalsettings.kcfg dolphin_columnmodesettings.kcfg dolphin_iconsmodesettings.kcfg dolphin_detailsmodesettings.kcfg DESTINATION ${KCFG_INSTALL_DIR} ) install( FILES dolphinui.rc DESTINATION ${DATA_INSTALL_DIR}/dolphin ) kde4_install_icons( ${ICON_INSTALL_DIR} ) diff --git a/src/columnviewsettingspage.cpp b/src/columnviewsettingspage.cpp new file mode 100644 index 000000000..5d9ee34f7 --- /dev/null +++ b/src/columnviewsettingspage.cpp @@ -0,0 +1,135 @@ +/*************************************************************************** + * Copyright (C) 2006 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 * + * 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 "columnviewsettingspage.h" + +#include "dolphinsettings.h" +#include "dolphin_columnmodesettings.h" + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +ColumnViewSettingsPage::ColumnViewSettingsPage(DolphinMainWindow* mainWindow, + QWidget* parent) : + KVBox(parent), + m_mainWindow(mainWindow), + m_smallIconSize(0), + m_mediumIconSize(0), + m_largeIconSize(0), + m_fontRequester(0) +{ + const int spacing = KDialog::spacingHint(); + const int margin = KDialog::marginHint(); + const QSizePolicy sizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); + + setSpacing(spacing); + setMargin(margin); + + ColumnModeSettings* settings = DolphinSettings::instance().columnModeSettings(); + Q_ASSERT(settings != 0); + + // Create "Icon" properties + QGroupBox* iconSizeBox = new QGroupBox(i18n("Icon Size"), this); + iconSizeBox->setSizePolicy(sizePolicy); + + m_smallIconSize = new QRadioButton(i18n("Small"), this); + m_mediumIconSize = new QRadioButton(i18n("Medium"), this); + m_largeIconSize = new QRadioButton(i18n("Large"), this); + switch (settings->iconSize()) { + case K3Icon::SizeLarge: + m_largeIconSize->setChecked(true); + break; + + case K3Icon::SizeMedium: + m_mediumIconSize->setChecked(true); + break; + + case K3Icon::SizeSmall: + default: + m_smallIconSize->setChecked(true); + } + + QButtonGroup* iconSizeGroup = new QButtonGroup(this); + iconSizeGroup->addButton(m_smallIconSize); + iconSizeGroup->addButton(m_mediumIconSize); + iconSizeGroup->addButton(m_largeIconSize); + + QHBoxLayout* iconSizeLayout = new QHBoxLayout(iconSizeBox); + iconSizeLayout->addWidget(m_smallIconSize); + iconSizeLayout->addWidget(m_mediumIconSize); + iconSizeLayout->addWidget(m_largeIconSize); + + // create "Text" properties + QGroupBox* textBox = new QGroupBox(i18n("Text"), this); + textBox->setSizePolicy(sizePolicy); + + QLabel* fontLabel = new QLabel(i18n("Font:"), textBox); + m_fontRequester = new KFontRequester(textBox); + QFont font(settings->fontFamily(), + settings->fontSize()); + font.setItalic(settings->italicFont()); + font.setBold(settings->boldFont()); + m_fontRequester->setFont(font); + + QHBoxLayout* textLayout = new QHBoxLayout(textBox); + textLayout->addWidget(fontLabel); + textLayout->addWidget(m_fontRequester); + + // Add a dummy widget with no restriction regarding + // a vertical resizing. This assures that the dialog layout + // is not stretched vertically. + new QWidget(this); +} + +ColumnViewSettingsPage::~ColumnViewSettingsPage() +{ +} + +void ColumnViewSettingsPage::applySettings() +{ + ColumnModeSettings* settings = DolphinSettings::instance().columnModeSettings(); + Q_ASSERT(settings != 0); + + int iconSize = K3Icon::SizeSmall; + if (m_mediumIconSize->isChecked()) { + iconSize = K3Icon::SizeMedium; + } + else if (m_largeIconSize->isChecked()) { + iconSize = K3Icon::SizeLarge; + } + settings->setIconSize(iconSize); + + const QFont font = m_fontRequester->font(); + settings->setFontFamily(font.family()); + settings->setFontSize(font.pointSize()); + settings->setItalicFont(font.italic()); + settings->setBoldFont(font.bold()); +} + +#include "columnviewsettingspage.moc" diff --git a/src/columnviewsettingspage.h b/src/columnviewsettingspage.h new file mode 100644 index 000000000..270ee5ff4 --- /dev/null +++ b/src/columnviewsettingspage.h @@ -0,0 +1,59 @@ +/*************************************************************************** + * Copyright (C) 2006 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 * + * 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 COLUMNVIEWSETTINGSPAGE_H +#define COLUMNVIEWSETTINGSPAGE_H + +#include + +class DolphinMainWindow; +class KFontRequester; +class QCheckBox; +class QSpinBox; +class QComboBox; +class QRadioButton; + +/** + * @brief Represents the page from the Dolphin Settings which allows + * to modify the settings for the details view. + */ +class ColumnViewSettingsPage : public KVBox +{ + Q_OBJECT + +public: + ColumnViewSettingsPage(DolphinMainWindow* mainWindow, QWidget* parent); + virtual ~ColumnViewSettingsPage(); + + /** + * Applies the settings for the details view. + * The settings are persisted automatically when + * closing Dolphin. + */ + void applySettings(); + +private: + DolphinMainWindow* m_mainWindow; + QRadioButton* m_smallIconSize; + QRadioButton* m_mediumIconSize; + QRadioButton* m_largeIconSize; + KFontRequester* m_fontRequester; +}; + +#endif diff --git a/src/dolphin_columnmodesettings.kcfg b/src/dolphin_columnmodesettings.kcfg new file mode 100644 index 000000000..a7b8c7915 --- /dev/null +++ b/src/dolphin_columnmodesettings.kcfg @@ -0,0 +1,29 @@ + + + + + kiconloader.h + kglobalsettings.h + + + + KGlobalSettings::generalFont().family() + + + + KGlobalSettings::generalFont().pointSize() + + + + false + + + + false + + + + K3Icon::SizeSmall + + + \ No newline at end of file diff --git a/src/dolphin_columnmodesettings.kcfgc b/src/dolphin_columnmodesettings.kcfgc new file mode 100644 index 000000000..55134335a --- /dev/null +++ b/src/dolphin_columnmodesettings.kcfgc @@ -0,0 +1,4 @@ +File=dolphin_columnmodesettings.kcfg +ClassName=ColumnModeSettings +Singleton=false +Mutators=true diff --git a/src/dolphincolumnview.cpp b/src/dolphincolumnview.cpp index b01a85103..baf78f7e2 100644 --- a/src/dolphincolumnview.cpp +++ b/src/dolphincolumnview.cpp @@ -22,7 +22,7 @@ #include "dolphincontroller.h" #include "dolphinsettings.h" -//#include "dolphin_iconsmodesettings.h" +#include "dolphin_columnmodesettings.h" #include #include @@ -48,27 +48,18 @@ DolphinColumnView::DolphinColumnView(QWidget* parent, DolphinController* control connect(controller, SIGNAL(zoomOut()), this, SLOT(zoomOut())); - // apply the icons mode settings to the widget - //const IconsModeSettings* settings = DolphinSettings::instance().iconsModeSettings(); - //Q_ASSERT(settings != 0); + // apply the column mode settings to the widget + const ColumnModeSettings* settings = DolphinSettings::instance().columnModeSettings(); + Q_ASSERT(settings != 0); m_viewOptions = QColumnView::viewOptions(); - /*QFont font(settings->fontFamily(), settings->fontSize()); + QFont font(settings->fontFamily(), settings->fontSize()); font.setItalic(settings->italicFont()); font.setBold(settings->boldFont()); m_viewOptions.font = font; - updateGridSize(controller->showPreview()); - - if (settings->arrangement() == QColumnView::TopToBottom) { - setFlow(QColumnView::LeftToRight); - m_viewOptions.decorationPosition = QStyleOptionViewItem::Top; - } - else { - setFlow(QColumnView::TopToBottom); - m_viewOptions.decorationPosition = QStyleOptionViewItem::Left; - }*/ + updateDecorationSize(); } DolphinColumnView::~DolphinColumnView() @@ -113,20 +104,54 @@ void DolphinColumnView::dropEvent(QDropEvent* event) void DolphinColumnView::zoomIn() { + if (isZoomInPossible()) { + ColumnModeSettings* settings = DolphinSettings::instance().columnModeSettings(); + // TODO: get rid of K3Icon sizes + switch (settings->iconSize()) { + case K3Icon::SizeSmall: settings->setIconSize(K3Icon::SizeMedium); break; + case K3Icon::SizeMedium: settings->setIconSize(K3Icon::SizeLarge); break; + default: Q_ASSERT(false); break; + } + updateDecorationSize(); + } } void DolphinColumnView::zoomOut() { + if (isZoomOutPossible()) { + ColumnModeSettings* settings = DolphinSettings::instance().columnModeSettings(); + // TODO: get rid of K3Icon sizes + switch (settings->iconSize()) { + case K3Icon::SizeLarge: settings->setIconSize(K3Icon::SizeMedium); break; + case K3Icon::SizeMedium: settings->setIconSize(K3Icon::SizeSmall); break; + default: Q_ASSERT(false); break; + } + updateDecorationSize(); + } } bool DolphinColumnView::isZoomInPossible() const { - return false; + ColumnModeSettings* settings = DolphinSettings::instance().columnModeSettings(); + return settings->iconSize() < K3Icon::SizeLarge; } bool DolphinColumnView::isZoomOutPossible() const { - return false; + ColumnModeSettings* settings = DolphinSettings::instance().columnModeSettings(); + return settings->iconSize() > K3Icon::SizeSmall; +} + +void DolphinColumnView::updateDecorationSize() +{ + ColumnModeSettings* settings = DolphinSettings::instance().columnModeSettings(); + const int iconSize = settings->iconSize(); + m_viewOptions.decorationSize = QSize(iconSize, iconSize); + + m_controller->setZoomInPossible(isZoomInPossible()); + m_controller->setZoomOutPossible(isZoomOutPossible()); + + doItemsLayout(); } #include "dolphincolumnview.moc" diff --git a/src/dolphincolumnview.h b/src/dolphincolumnview.h index 649d2a7d4..51b71413c 100644 --- a/src/dolphincolumnview.h +++ b/src/dolphincolumnview.h @@ -53,6 +53,14 @@ private: bool isZoomInPossible() const; bool isZoomOutPossible() const; + /** + * Updates the size of the decoration dependent on the + * icon size of the ColumnModeSettings. The controller + * will get informed about possible zoom in/zoom out + * operations. + */ + void updateDecorationSize(); + private: DolphinController* m_controller; QStyleOptionViewItem m_viewOptions; diff --git a/src/dolphinsettings.cpp b/src/dolphinsettings.cpp index 3d187d40d..0db0ad204 100644 --- a/src/dolphinsettings.cpp +++ b/src/dolphinsettings.cpp @@ -26,9 +26,10 @@ #include #include +#include "dolphin_columnmodesettings.h" +#include "dolphin_detailsmodesettings.h" #include "dolphin_generalsettings.h" #include "dolphin_iconsmodesettings.h" -#include "dolphin_detailsmodesettings.h" DolphinSettings& DolphinSettings::instance() { @@ -41,7 +42,7 @@ DolphinSettings& DolphinSettings::instance() KBookmark DolphinSettings::bookmark(int index) const { - return bookmarkManager()->findByAddress( QString('/')+QString::number(index) ); + return bookmarkManager()->findByAddress(QString('/') + QString::number(index)); } KBookmarkManager* DolphinSettings::bookmarkManager() const @@ -58,6 +59,7 @@ void DolphinSettings::save() m_generalSettings->writeConfig(); m_iconsModeSettings->writeConfig(); m_detailsModeSettings->writeConfig(); + m_columnModeSettings->writeConfig(); QString basePath = KGlobal::mainComponent().componentName(); basePath.append("/bookmarks.xml"); @@ -72,6 +74,7 @@ DolphinSettings::DolphinSettings() m_generalSettings = new GeneralSettings(); m_iconsModeSettings = new IconsModeSettings(); m_detailsModeSettings = new DetailsModeSettings(); + m_columnModeSettings = new ColumnModeSettings(); } DolphinSettings::~DolphinSettings() @@ -84,4 +87,7 @@ DolphinSettings::~DolphinSettings() delete m_detailsModeSettings; m_detailsModeSettings = 0; + + delete m_columnModeSettings; + m_columnModeSettings = 0; } diff --git a/src/dolphinsettings.h b/src/dolphinsettings.h index ada2ce807..2e1e252d1 100644 --- a/src/dolphinsettings.h +++ b/src/dolphinsettings.h @@ -23,11 +23,12 @@ #include -class KBookmark; -class KBookmarkManager; +class ColumnModeSettings; +class DetailsModeSettings; class GeneralSettings; class IconsModeSettings; -class DetailsModeSettings; +class KBookmark; +class KBookmarkManager; /** * @brief Manages and stores all settings from Dolphin. @@ -47,6 +48,7 @@ public: GeneralSettings* generalSettings() const { return m_generalSettings; } IconsModeSettings* iconsModeSettings() const { return m_iconsModeSettings; } DetailsModeSettings* detailsModeSettings() const { return m_detailsModeSettings; } + ColumnModeSettings* columnModeSettings() const { return m_columnModeSettings; } KBookmarkManager* bookmarkManager() const; @@ -66,6 +68,7 @@ private: GeneralSettings* m_generalSettings; IconsModeSettings* m_iconsModeSettings; DetailsModeSettings* m_detailsModeSettings; + ColumnModeSettings* m_columnModeSettings; }; #endif diff --git a/src/dolphinsettingsdialog.cpp b/src/dolphinsettingsdialog.cpp index 55472caaf..a97660787 100644 --- a/src/dolphinsettingsdialog.cpp +++ b/src/dolphinsettingsdialog.cpp @@ -33,6 +33,9 @@ DolphinSettingsDialog::DolphinSettingsDialog(DolphinMainWindow* mainWindow) : KPageDialog(), m_mainWindow(mainWindow) { + const QSize minSize = minimumSize(); + setMinimumSize(QSize(512, minSize.height())); + setFaceType( List); setCaption(i18n("Dolphin Preferences")); setButtons(Ok|Apply|Cancel); diff --git a/src/viewpropertiesdialog.cpp b/src/viewpropertiesdialog.cpp index 58b388893..d36b1025b 100644 --- a/src/viewpropertiesdialog.cpp +++ b/src/viewpropertiesdialog.cpp @@ -81,6 +81,7 @@ ViewPropertiesDialog::ViewPropertiesDialog(DolphinView* dolphinView) : m_viewMode = new QComboBox(propsBox); m_viewMode->addItem(KIcon("view-icon"), i18n("Icons")); m_viewMode->addItem(KIcon("fileview-text"), i18n("Details")); + m_viewMode->addItem(KIcon("view-tree"), i18n("Column")); const int index = static_cast(m_viewProps->viewMode()); m_viewMode->setCurrentIndex(index); @@ -208,7 +209,6 @@ void ViewPropertiesDialog::slotApply() void ViewPropertiesDialog::slotViewModeChanged(int index) { - Q_ASSERT((index >= 0) && (index <= 1)); m_viewProps->setViewMode(static_cast(index)); m_isDirty = true; diff --git a/src/viewsettingspage.cpp b/src/viewsettingspage.cpp index 654a09f28..019c83afe 100644 --- a/src/viewsettingspage.cpp +++ b/src/viewsettingspage.cpp @@ -19,9 +19,11 @@ ***************************************************************************/ #include "viewsettingspage.h" + +#include "columnviewsettingspage.h" +#include "detailsviewsettingspage.h" #include "generalviewsettingspage.h" #include "iconsviewsettingspage.h" -#include "detailsviewsettingspage.h" #include #include @@ -37,7 +39,8 @@ ViewSettingsPage::ViewSettingsPage(DolphinMainWindow* mainWindow, SettingsPageBase(parent), m_generalPage(0), m_iconsPage(0), - m_detailsPage(0) + m_detailsPage(0), + m_columnPage(0) { QVBoxLayout* topLayout = new QVBoxLayout(this); topLayout->setMargin(0); @@ -57,7 +60,11 @@ ViewSettingsPage::ViewSettingsPage(DolphinMainWindow* mainWindow, m_detailsPage = new DetailsViewSettingsPage(mainWindow, tabWidget); tabWidget->addTab(m_detailsPage, KIcon("fileview-text"), i18n("Details")); - topLayout->addWidget(tabWidget, 0, 0 ); + // initialize 'Column' tab + m_columnPage = new ColumnViewSettingsPage(mainWindow, tabWidget); + tabWidget->addTab(m_columnPage, KIcon("view-tree"), i18n("Column")); + + topLayout->addWidget(tabWidget, 0, 0); } ViewSettingsPage::~ViewSettingsPage() @@ -69,6 +76,7 @@ void ViewSettingsPage::applySettings() m_generalPage->applySettings(); m_iconsPage->applySettings(); m_detailsPage->applySettings(); + m_columnPage->applySettings(); } #include "viewsettingspage.moc" diff --git a/src/viewsettingspage.h b/src/viewsettingspage.h index 1b068cd19..012842dc2 100644 --- a/src/viewsettingspage.h +++ b/src/viewsettingspage.h @@ -23,6 +23,7 @@ #include #include +class ColumnViewSettingsPage; class DolphinMainWindow; class GeneralViewSettingsPage; class IconsViewSettingsPage; @@ -31,8 +32,8 @@ class DetailsViewSettingsPage; /** * @brief Page for the 'View' settings of the Dolphin settings dialog. * - * The views settings allow to set the properties for the icons mode and - * the details mode. + * The views settings allow to set the properties for the icons mode, + * the details mode and the column mode. */ class ViewSettingsPage : public SettingsPageBase { @@ -49,6 +50,7 @@ private: GeneralViewSettingsPage* m_generalPage; IconsViewSettingsPage* m_iconsPage; DetailsViewSettingsPage* m_detailsPage; + ColumnViewSettingsPage* m_columnPage; }; #endif -- 2.47.3