From: Peter Penz Date: Sun, 7 Jan 2007 09:47:05 +0000 (+0000) Subject: Allow that Dolphin can also be used with global view properties. Per default Dolphin... X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/445f0b64bdd34e39f0565ef870937ebd3d5dfa61?ds=sidebyside Allow that Dolphin can also be used with global view properties. Per default Dolphin remembers the view properties for each directory, but from the feedback I've got there is a not ignorable amount of people who prefer having global view properties instead. svn path=/trunk/playground/utils/dolphin/; revision=620774 --- diff --git a/src/applyviewpropsjob.cpp b/src/applyviewpropsjob.cpp index 0be8f4d47..cddc4d653 100644 --- a/src/applyviewpropsjob.cpp +++ b/src/applyviewpropsjob.cpp @@ -23,6 +23,7 @@ #include "applyviewpropsjob.h" #include "viewproperties.h" +#include #include ApplyViewPropsJob::ApplyViewPropsJob(const KUrl& dir, @@ -74,12 +75,10 @@ void ApplyViewPropsJob::slotEntries(KIO::Job*, const KIO::UDSEntryList& list) KUrl url(m_dir); url.addPath(name); + assert(m_viewProps != 0); + ViewProperties props(url); - props.setViewMode(m_viewProps->viewMode()); - props.setShowPreview(m_viewProps->showPreview()); - props.setShowHiddenFiles(m_viewProps->showHiddenFiles()); - props.setSorting(m_viewProps->sorting()); - props.setSortOrder(m_viewProps->sortOrder()); + props.setDirProperties(*m_viewProps); } } } diff --git a/src/bookmarkssettingspage.cpp b/src/bookmarkssettingspage.cpp index 43aa87c58..89caede0c 100644 --- a/src/bookmarkssettingspage.cpp +++ b/src/bookmarkssettingspage.cpp @@ -42,8 +42,10 @@ #include "dolphinsettings.h" #include "editbookmarkdialog.h" -BookmarksSettingsPage::BookmarksSettingsPage(QWidget*parent) : +BookmarksSettingsPage::BookmarksSettingsPage(DolphinMainWindow* mainWindow, + QWidget*parent) : SettingsPageBase(parent), + m_mainWindow(mainWindow), m_addButton(0), m_removeButton(0), m_moveUpButton(0), diff --git a/src/bookmarkssettingspage.h b/src/bookmarkssettingspage.h index 336c85e17..a76b85d46 100644 --- a/src/bookmarkssettingspage.h +++ b/src/bookmarkssettingspage.h @@ -24,6 +24,7 @@ #include #include +class DolphinMainWindow; class K3ListView; class KPushButton; class Q3ListViewItem; @@ -37,7 +38,7 @@ class BookmarksSettingsPage : public SettingsPageBase Q_OBJECT public: - BookmarksSettingsPage(QWidget* parent); + BookmarksSettingsPage(DolphinMainWindow* mainWindow, QWidget* parent); virtual ~BookmarksSettingsPage(); @@ -70,6 +71,7 @@ private: IconIdx = 3 }; + DolphinMainWindow* m_mainWindow; K3ListView* m_listView; KPushButton* m_addButton; KPushButton* m_editButton; diff --git a/src/detailsviewsettingspage.cpp b/src/detailsviewsettingspage.cpp index 81b930071..8a8d158c9 100644 --- a/src/detailsviewsettingspage.cpp +++ b/src/detailsviewsettingspage.cpp @@ -37,8 +37,10 @@ #include "detailsmodesettings.h" #include "dolphindetailsview.h" -DetailsViewSettingsPage::DetailsViewSettingsPage(QWidget *parent) : +DetailsViewSettingsPage::DetailsViewSettingsPage(DolphinMainWindow* mainWindow, + QWidget* parent) : KVBox(parent), + m_mainWindow(mainWindow), m_dateBox(0), m_permissionsBox(0), m_ownerBox(0), diff --git a/src/detailsviewsettingspage.h b/src/detailsviewsettingspage.h index 89cb7258e..95f611b85 100644 --- a/src/detailsviewsettingspage.h +++ b/src/detailsviewsettingspage.h @@ -23,6 +23,7 @@ #include +class DolphinMainWindow; class QCheckBox; class QFontComboBox; class QSpinBox; @@ -32,15 +33,13 @@ class QRadioButton; /** * @brief Represents the page from the Dolphin Settings which allows * to modify the settings for the details view. - * - * @author Peter Penz */ class DetailsViewSettingsPage : public KVBox { Q_OBJECT public: - DetailsViewSettingsPage(QWidget* parent); + DetailsViewSettingsPage(DolphinMainWindow* mainWindow, QWidget* parent); virtual ~DetailsViewSettingsPage(); /** @@ -51,6 +50,7 @@ public: void applySettings(); private: + DolphinMainWindow* m_mainWindow; QCheckBox* m_dateBox; QCheckBox* m_permissionsBox; QCheckBox* m_ownerBox; diff --git a/src/dolphinsettingsdialog.cpp b/src/dolphinsettingsdialog.cpp index 7f440fc6c..cf66af3b2 100644 --- a/src/dolphinsettingsdialog.cpp +++ b/src/dolphinsettingsdialog.cpp @@ -42,11 +42,11 @@ DolphinSettingsDialog::DolphinSettingsDialog(DolphinMainWindow* mainWindow) : KPageWidgetItem* generalSettingsFrame = addPage(m_generalSettingsPage, i18n("General")); generalSettingsFrame->setIcon(KIcon("exec")); - m_viewSettingsPage = new ViewSettingsPage(this); + m_viewSettingsPage = new ViewSettingsPage(mainWindow, this); KPageWidgetItem* viewSettingsFrame = addPage(m_viewSettingsPage, i18n("View Modes")); viewSettingsFrame->setIcon(KIcon("view_choose")); - m_bookmarksSettingsPage = new BookmarksSettingsPage(this); + m_bookmarksSettingsPage = new BookmarksSettingsPage(mainWindow, this); KPageWidgetItem* bookmarksSettingsFrame = addPage(m_bookmarksSettingsPage, i18n("Bookmarks")); bookmarksSettingsFrame->setIcon(KIcon("bookmark")); } diff --git a/src/generalsettingspage.h b/src/generalsettingspage.h index 99ec49600..0cffc3f69 100644 --- a/src/generalsettingspage.h +++ b/src/generalsettingspage.h @@ -21,18 +21,17 @@ #define GENERALSETTINGSPAGE_H #include + +class DolphinMainWindow; class QLineEdit; class QRadioButton; class QCheckBox; -class DolphinMainWindow; /** * @brief Page for the 'General' settings of the Dolphin settings dialog. * * The general settings allow to set the home Url, the default view mode * and the split view mode. - * - * @author Peter Penz */ class GeneralSettingsPage : public SettingsPageBase { @@ -40,7 +39,6 @@ class GeneralSettingsPage : public SettingsPageBase public: GeneralSettingsPage(DolphinMainWindow* mainWindow, QWidget* parent); - virtual ~GeneralSettingsPage(); /** @see SettingsPageBase::applySettings */ @@ -52,7 +50,7 @@ private slots: void useDefaulLocation(); private: - DolphinMainWindow *m_mainWindow; + DolphinMainWindow* m_mainWindow; QLineEdit* m_homeUrl; QCheckBox* m_startSplit; QCheckBox* m_startEditable; diff --git a/src/generalviewsettingspage.cpp b/src/generalviewsettingspage.cpp index 97a8af905..bdaa681a6 100644 --- a/src/generalviewsettingspage.cpp +++ b/src/generalviewsettingspage.cpp @@ -19,8 +19,10 @@ ***************************************************************************/ #include "generalviewsettingspage.h" +#include "dolphinmainwindow.h" #include "dolphinsettings.h" #include "generalsettings.h" +#include "viewproperties.h" #include @@ -32,8 +34,10 @@ #include #include -GeneralViewSettingsPage::GeneralViewSettingsPage(QWidget* parent) : +GeneralViewSettingsPage::GeneralViewSettingsPage(DolphinMainWindow* mainWindow, + QWidget* parent) : KVBox(parent), + m_mainWindow(mainWindow), m_localProps(0), m_globalProps(0) { @@ -77,9 +81,23 @@ GeneralViewSettingsPage::~GeneralViewSettingsPage() void GeneralViewSettingsPage::applySettings() { + const KUrl& url = m_mainWindow->activeView()->url(); + ViewProperties props(url); // read current view properties + + const bool useGlobalProps = m_globalProps->isChecked(); + GeneralSettings* settings = DolphinSettings::instance().generalSettings(); assert(settings != 0); - settings->setGlobalViewProps(m_globalProps->isChecked()); + settings->setGlobalViewProps(useGlobalProps); + + if (useGlobalProps) { + // Remember the global view properties by applying the current view properties. + // It is important that GeneralSettings::globalViewProps() is set before + // the class ViewProperties is used, as ViewProperties uses this setting + // to find the destination folder for storing the view properties. + ViewProperties globalProps(url); + globalProps.setDirProperties(props); + } } #include "generalviewsettingspage.moc" diff --git a/src/generalviewsettingspage.h b/src/generalviewsettingspage.h index 8f6f7ada6..0d065a572 100644 --- a/src/generalviewsettingspage.h +++ b/src/generalviewsettingspage.h @@ -23,20 +23,19 @@ #include +class DolphinMainWindow; class QRadioButton; /** * @brief Represents the page from the Dolphin Settings which allows * to modify general settings for the view modes. - * - * @author Peter Penz */ class GeneralViewSettingsPage : public KVBox { Q_OBJECT public: - GeneralViewSettingsPage(QWidget* parent); + GeneralViewSettingsPage(DolphinMainWindow* mainWindow, QWidget* parent); virtual ~GeneralViewSettingsPage(); /** @@ -47,6 +46,7 @@ public: void applySettings(); private: + DolphinMainWindow* m_mainWindow; QRadioButton* m_localProps; QRadioButton* m_globalProps; }; diff --git a/src/iconsviewsettingspage.cpp b/src/iconsviewsettingspage.cpp index 7e63cf0f5..872047246 100644 --- a/src/iconsviewsettingspage.cpp +++ b/src/iconsviewsettingspage.cpp @@ -41,8 +41,10 @@ #define GRID_SPACING_BASE 8 #define GRID_SPACING_INC 12 -IconsViewSettingsPage::IconsViewSettingsPage(QWidget* parent) : +IconsViewSettingsPage::IconsViewSettingsPage(DolphinMainWindow* mainWindow, + QWidget* parent) : KVBox(parent), + m_mainWindow(mainWindow), m_iconSizeSlider(0), m_previewSizeSlider(0), m_textWidthBox(0), diff --git a/src/iconsviewsettingspage.h b/src/iconsviewsettingspage.h index 7d67bc79c..aa106ef27 100644 --- a/src/iconsviewsettingspage.h +++ b/src/iconsviewsettingspage.h @@ -21,10 +21,10 @@ #ifndef ICONSVIEWSETTINGSPAGE_H #define ICONSVIEWSETTINGSPAGE_H - #include #include +class DolphinMainWindow; class QSlider; class QComboBox; class QCheckBox; @@ -48,14 +48,13 @@ class PixmapViewer; * - arrangement * * @see DolphinIconsViewSettings - * @author Peter Penz */ class IconsViewSettingsPage : public KVBox { Q_OBJECT public: - IconsViewSettingsPage(QWidget* parent); + IconsViewSettingsPage(DolphinMainWindow* mainWindow, QWidget* parent); virtual ~IconsViewSettingsPage(); /** @@ -70,6 +69,7 @@ private slots: void slotPreviewSizeChanged(int value); private: + DolphinMainWindow* m_mainWindow; QSlider* m_iconSizeSlider; PixmapViewer* m_iconSizeViewer; QSlider* m_previewSizeSlider; diff --git a/src/viewproperties.cpp b/src/viewproperties.cpp index cd66519fd..9316a6d5a 100644 --- a/src/viewproperties.cpp +++ b/src/viewproperties.cpp @@ -40,7 +40,6 @@ ViewProperties::ViewProperties(const KUrl& url) : m_node(0) { KUrl cleanUrl(url); - cleanUrl.cleanPath(); m_filepath = cleanUrl.path(); @@ -52,22 +51,18 @@ ViewProperties::ViewProperties(const KUrl& url) : // We try and save it to a file in the directory being viewed. // If the directory is not writable by the user or the directory is not local, // we store the properties information in a local file. - QString rootDir("/"); // TODO: should this be set to the root of the bookmark, if any? - if (cleanUrl.isLocalFile()) { - QFileInfo info(m_filepath); - + const bool useGlobalViewProps = DolphinSettings::instance().generalSettings()->globalViewProps(); + if (useGlobalViewProps) { + m_filepath = destinationDir("global"); + } + else if (cleanUrl.isLocalFile()) { + const QFileInfo info(m_filepath); if (!info.isWritable()) { - QString basePath = KGlobal::instance()->instanceName(); - basePath.append("/view_properties/local"); - rootDir = KStandardDirs::locateLocal("data", basePath); - m_filepath = rootDir + m_filepath; + m_filepath = destinationDir("local") + m_filepath; } } else { - QString basePath = KGlobal::instance()->instanceName(); - basePath.append("/view_properties/remote/").append(cleanUrl.host()); - rootDir = KStandardDirs::locateLocal("data", basePath); - m_filepath = rootDir + m_filepath; + m_filepath = destinationDir("remote") + m_filepath; } m_node = new ViewPropertySettings(KSharedConfig::openConfig(m_filepath + FILE_NAME)); @@ -149,6 +144,15 @@ Qt::SortOrder ViewProperties::sortOrder() const return static_cast(m_node->sortOrder()); } +void ViewProperties::setDirProperties(const ViewProperties& props) +{ + setViewMode(props.viewMode()); + setShowPreview(props.showPreview()); + setShowHiddenFiles(props.showHiddenFiles()); + setSorting(props.sorting()); + setSortOrder(props.sortOrder()); +} + void ViewProperties::setAutoSaveEnabled(bool autoSave) { m_autoSave = autoSave; @@ -167,12 +171,16 @@ void ViewProperties::updateTimeStamp() void ViewProperties::save() { - const bool rememberSettings = !DolphinSettings::instance().generalSettings()->globalViewProps(); - if (rememberSettings) { - KStandardDirs::makeDir(m_filepath); - m_node->writeConfig(); - m_changedProps = false; - } + KStandardDirs::makeDir(m_filepath); + m_node->writeConfig(); + m_changedProps = false; +} + +QString ViewProperties::destinationDir(const QString& subDir) const +{ + QString basePath = KGlobal::instance()->instanceName(); + basePath.append("/view_properties/").append(subDir); + return KStandardDirs::locateLocal("data", basePath); } ViewProperties::ViewProperties(const ViewProperties& props) diff --git a/src/viewproperties.h b/src/viewproperties.h index 992429241..1681b7890 100644 --- a/src/viewproperties.h +++ b/src/viewproperties.h @@ -66,6 +66,13 @@ public: void setSortOrder(Qt::SortOrder sortOrder); Qt::SortOrder sortOrder() const; + /** + * Sets the directory properties view mode, show preview, + * show hidden files, sorting and sort order like + * set in \a props. + */ + void setDirProperties(const ViewProperties& props); + /** * If \a autoSave is true, the properties are automatically * saved when the destructor is called. Per default autosaving @@ -80,23 +87,27 @@ public: * Saves the view properties for the directory specified * in the constructor. The method is automatically * invoked in the destructor, if - * ViewProperties::isAutoSaveEnabled() returns true. - * - * Note that the saving of the properties will be ignored - * if GeneralSettings::globalViewProps() returns true: in - * this case view properties may not be remembered for - * each directory. + * ViewProperties::isAutoSaveEnabled() returns true and + * at least one property has been changed. */ void save(); +private: + /** + * Returns the destination directory path where the view + * properties are stored. \a subDir specifies the used sub + * directory. + */ + QString destinationDir(const QString& subDir) const; + + ViewProperties(const ViewProperties& props); + ViewProperties& operator= (const ViewProperties& props); + private: bool m_changedProps; bool m_autoSave; QString m_filepath; ViewPropertySettings* m_node; - - ViewProperties(const ViewProperties& props); - ViewProperties& operator= (const ViewProperties& props); }; #endif diff --git a/src/viewpropsprogressinfo.cpp b/src/viewpropsprogressinfo.cpp index 2d0b1a8f8..887dfa2c7 100644 --- a/src/viewpropsprogressinfo.cpp +++ b/src/viewpropsprogressinfo.cpp @@ -48,10 +48,7 @@ ViewPropsProgressInfo::ViewPropsProgressInfo(QWidget* parent, setButtons(KDialog::Cancel); m_viewProps = new ViewProperties(dir); - m_viewProps->setViewMode(viewProps.viewMode()); - m_viewProps->setShowHiddenFiles(viewProps.showHiddenFiles()); - m_viewProps->setSorting(viewProps.sorting()); - m_viewProps->setSortOrder(viewProps.sortOrder()); + m_viewProps->setDirProperties(viewProps); // the view properties are stored by the ViewPropsApplierJob, so prevent // that the view properties are saved twice: diff --git a/src/viewsettingspage.cpp b/src/viewsettingspage.cpp index 837aed835..859f479a8 100644 --- a/src/viewsettingspage.cpp +++ b/src/viewsettingspage.cpp @@ -32,7 +32,8 @@ #include #include -ViewSettingsPage::ViewSettingsPage(QWidget *parent) : +ViewSettingsPage::ViewSettingsPage(DolphinMainWindow* mainWindow, + QWidget* parent) : SettingsPageBase(parent), m_generalPage(0), m_iconsPage(0), @@ -43,15 +44,15 @@ ViewSettingsPage::ViewSettingsPage(QWidget *parent) : QTabWidget* tabWidget = new QTabWidget(this); // initialize 'General' tab - m_generalPage = new GeneralViewSettingsPage(tabWidget); + m_generalPage = new GeneralViewSettingsPage(mainWindow, tabWidget); tabWidget->addTab(m_generalPage, SmallIcon("view_choose"), i18n("General")); // initialize 'Icons' tab - m_iconsPage = new IconsViewSettingsPage(tabWidget); + m_iconsPage = new IconsViewSettingsPage(mainWindow, tabWidget); tabWidget->addTab(m_iconsPage, SmallIcon("view_icon"), i18n("Icons")); // initialize 'Details' tab - m_detailsPage = new DetailsViewSettingsPage(tabWidget); + m_detailsPage = new DetailsViewSettingsPage(mainWindow, tabWidget); tabWidget->addTab(m_detailsPage, SmallIcon("view_text"), i18n("Details")); topLayout->addWidget(tabWidget, 0, 0 ); diff --git a/src/viewsettingspage.h b/src/viewsettingspage.h index f41238733..f2949bbc3 100644 --- a/src/viewsettingspage.h +++ b/src/viewsettingspage.h @@ -23,6 +23,7 @@ #include #include +class DolphinMainWindow; class GeneralViewSettingsPage; class IconsViewSettingsPage; class DetailsViewSettingsPage; @@ -32,16 +33,13 @@ class DetailsViewSettingsPage; * * The views settings allow to set the properties for the icons mode and * the details mode. - * - * @author Peter Penz */ class ViewSettingsPage : public SettingsPageBase { Q_OBJECT public: - ViewSettingsPage(QWidget* parent); - + ViewSettingsPage(DolphinMainWindow* mainWindow, QWidget* parent); virtual ~ViewSettingsPage(); /** @see SettingsPageBase::applySettings */