From: Peter Penz Date: Thu, 7 Dec 2006 20:51:05 +0000 (+0000) Subject: Apply the view properties to sub directories without using a modal window. This allow... X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/31d14571959f1bf750ccc43c15d71ca9338baaaf Apply the view properties to sub directories without using a modal window. This allows the user to proceed with the work during the view properties are applied. svn path=/trunk/playground/utils/dolphin/; revision=611369 --- diff --git a/src/viewproperties.cpp b/src/viewproperties.cpp index d099b3b22..e3e219b24 100644 --- a/src/viewproperties.cpp +++ b/src/viewproperties.cpp @@ -50,9 +50,9 @@ ViewProperties::ViewProperties(const KUrl& url) : return; } - // 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 + // 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); diff --git a/src/viewproperties.h b/src/viewproperties.h index 7f57f2eed..bdc052ed8 100644 --- a/src/viewproperties.h +++ b/src/viewproperties.h @@ -30,23 +30,21 @@ class QFile; /** - * @short Maintains the view properties like 'view mode' or 'show hidden files' for a directory. + * @brief Maintains the view properties like 'view mode' or 'show hidden files' for a directory. * * The view properties are automatically stored inside * the directory as hidden file called '.dolphinview'. To read out the view properties * just construct an instance by passing the Url of the directory: + * * \code * ViewProperties props(KUrl("/home/peter/Documents")); * const DolphinView::Mode mode = props.viewMode(); * const bool showHiddenFiles = props.isShowHiddenFilesEnabled(); * \endcode + * * When modifying a view property, the '.dolphinview' file is automatically updated * inside the destructor. - * - * @author Peter Penz */ -// TODO: provide detailed design description, as mapping the user model to -// the physical modal is not trivial. class ViewProperties { public: @@ -71,7 +69,6 @@ public: void updateTimeStamp(); void save(); - private: bool m_changedProps; bool m_autoSave; diff --git a/src/viewpropertiesdialog.cpp b/src/viewpropertiesdialog.cpp index de5c74a01..b13b3d4a6 100644 --- a/src/viewpropertiesdialog.cpp +++ b/src/viewpropertiesdialog.cpp @@ -99,22 +99,9 @@ ViewPropertiesDialog::ViewPropertiesDialog(DolphinView* dolphinView) : propsBoxLayout->addWidget(m_sortOrder, 2, 1); propsBoxLayout->addWidget(m_showHiddenFiles, 3, 0); - // create 'Apply view properties to:' group - QGroupBox* buttonBox = new QGroupBox(i18n("Apply view properties to:"), main); - m_applyToCurrentFolder = new QRadioButton(i18n("Current folder"), buttonBox); - m_applyToSubFolders = new QRadioButton(i18n("Current folder including all sub folders"), buttonBox); - m_applyToAllFolders = new QRadioButton(i18n("All folders"), buttonBox); - - QVBoxLayout* buttonBoxLayout = new QVBoxLayout(); - buttonBoxLayout->addWidget(m_applyToCurrentFolder); - buttonBoxLayout->addWidget(m_applyToSubFolders); - buttonBoxLayout->addWidget(m_applyToAllFolders); - buttonBox->setLayout(buttonBoxLayout); - - m_applyToCurrentFolder->setChecked(true); - + m_applyToSubFolders = new QCheckBox(i18n("Apply changes to all sub folders"), main); topLayout->addWidget(propsBox); - topLayout->addWidget(buttonBox); + topLayout->addWidget(m_applyToSubFolders); connect(m_viewMode, SIGNAL(activated(int)), this, SLOT(slotViewModeChanged(int))); @@ -124,12 +111,9 @@ ViewPropertiesDialog::ViewPropertiesDialog(DolphinView* dolphinView) : this, SLOT(slotSortOrderChanged(int))); connect(m_showHiddenFiles, SIGNAL(clicked()), this, SLOT(slotShowHiddenFilesChanged())); - connect(m_applyToCurrentFolder, SIGNAL(clicked()), - this, SLOT(markAsDirty())); + connect(m_applyToSubFolders, SIGNAL(clicked()), this, SLOT(markAsDirty())); - connect(m_applyToAllFolders, SIGNAL(clicked()), - this, SLOT(markAsDirty())); connect(this, SIGNAL(okClicked()), this, SLOT(slotOk())); connect(this, SIGNAL(applyClicked()), this, SLOT(slotApply())); @@ -196,29 +180,17 @@ void ViewPropertiesDialog::markAsDirty() void ViewPropertiesDialog::applyViewProperties() { - if (m_applyToAllFolders->isChecked()) { - if (m_isDirty) { - const QString text(i18n("The view properties of all folders will be replaced. Do you want to continue?")); - if (KMessageBox::questionYesNo(this, text) == KMessageBox::No) { - return; - } - } - - //ViewProperties props(QDir::homePath()); - //props.setViewMode(m_viewProps->viewMode()); - //props.setSorting(m_viewProps->sorting()); - //props.setSortOrder(m_viewProps->sortOrder()); - //props.setShowHiddenFilesEnabled(m_viewProps->isShowHiddenFilesEnabled()); - //props.setValidForSubDirs(true); - } - else if (m_applyToSubFolders->isChecked() && m_isDirty) { - const QString text(i18n("The view properties of all sub folders will be replaced. Do you want to continue?")); + if (m_applyToSubFolders->isChecked() && m_isDirty) { + const QString text(i18n("The view properties of all sub folders will be changed. Do you want to continue?")); if (KMessageBox::questionYesNo(this, text) == KMessageBox::No) { return; } - ViewPropsProgressInfo dlg(this, m_dolphinView->url(), m_viewProps); - dlg.exec(); + ViewPropsProgressInfo* info = new ViewPropsProgressInfo(m_dolphinView, + m_dolphinView->url(), + *m_viewProps); + info->setWindowModality(Qt::NonModal); + info->show(); } m_viewProps->save(); diff --git a/src/viewpropertiesdialog.h b/src/viewpropertiesdialog.h index 24accfed0..d3cca8616 100644 --- a/src/viewpropertiesdialog.h +++ b/src/viewpropertiesdialog.h @@ -34,8 +34,6 @@ class DolphinView; * It is possible to specify the view mode and whether hidden files * should be shown. The properties can be assigned to the current folder, * recursively to all sub folders or to all folders. - * - * @author Peter Penz */ class ViewPropertiesDialog : public KDialog { @@ -63,9 +61,7 @@ private: QComboBox* m_sorting; QComboBox* m_sortOrder; QCheckBox* m_showHiddenFiles; - QRadioButton* m_applyToCurrentFolder; - QRadioButton* m_applyToSubFolders; - QRadioButton* m_applyToAllFolders; + QCheckBox* m_applyToSubFolders; void applyViewProperties(); }; diff --git a/src/viewpropsprogressinfo.cpp b/src/viewpropsprogressinfo.cpp index 610a6912c..b04e107d5 100644 --- a/src/viewpropsprogressinfo.cpp +++ b/src/viewpropsprogressinfo.cpp @@ -34,10 +34,10 @@ ViewPropsProgressInfo::ViewPropsProgressInfo(QWidget* parent, const KUrl& dir, - const ViewProperties* viewProps) : + const ViewProperties& viewProps) : KDialog(parent), m_dir(dir), - m_viewProps(viewProps), + m_viewProps(0), m_label(0), m_progressBar(0), m_dirSizeJob(0), @@ -47,6 +47,16 @@ ViewPropsProgressInfo::ViewPropsProgressInfo(QWidget* parent, setCaption(i18n("Applying view properties")); setButtons(KDialog::Cancel); + m_viewProps = new ViewProperties(dir); + m_viewProps->setViewMode(viewProps.viewMode()); + m_viewProps->setShowHiddenFilesEnabled(viewProps.isShowHiddenFilesEnabled()); + m_viewProps->setSorting(viewProps.sorting()); + m_viewProps->setSortOrder(viewProps.sortOrder()); + + // the view properties are stored by the ViewPropsApplierJob, so prevent + // that the view properties are saved twice: + m_viewProps->setAutoSaveEnabled(false); + QWidget* main = new QWidget(); QVBoxLayout* topLayout = new QVBoxLayout(); @@ -78,8 +88,16 @@ ViewPropsProgressInfo::ViewPropsProgressInfo(QWidget* parent, } ViewPropsProgressInfo::~ViewPropsProgressInfo() +{ + delete m_viewProps; + m_viewProps = 0; +} + +void ViewPropsProgressInfo::closeEvent(QCloseEvent* event) { m_timer->stop(); + m_applyViewPropsJob = 0; + KDialog::closeEvent(event); } void ViewPropsProgressInfo::updateProgress() @@ -88,8 +106,8 @@ void ViewPropsProgressInfo::updateProgress() const int subdirs = m_dirSizeJob->totalSubdirs(); m_label->setText(i18n("Counting folders: %1", subdirs)); } - else { - assert(m_applyViewPropsJob != 0); + + if (m_applyViewPropsJob != 0) { const int progress = m_applyViewPropsJob->progress(); m_progressBar->setValue(progress); } @@ -117,8 +135,8 @@ void ViewPropsProgressInfo::cancelApplying() if (m_dirSizeJob != 0) { m_dirSizeJob->doKill(); } - else { - assert(m_applyViewPropsJob != 0); + + if (m_applyViewPropsJob != 0) { m_applyViewPropsJob->doKill(); } } diff --git a/src/viewpropsprogressinfo.h b/src/viewpropsprogressinfo.h index ac591e6bc..b355ef597 100644 --- a/src/viewpropsprogressinfo.h +++ b/src/viewpropsprogressinfo.h @@ -52,10 +52,13 @@ public: */ ViewPropsProgressInfo(QWidget* parent, const KUrl& dir, - const ViewProperties* viewProps); + const ViewProperties& viewProps); virtual ~ViewPropsProgressInfo(); +protected: + virtual void closeEvent(QCloseEvent* event); + private slots: void updateProgress(); void applyViewProperties(); @@ -63,7 +66,7 @@ private slots: private: const KUrl& m_dir; - const ViewProperties* m_viewProps; + ViewProperties* m_viewProps; QLabel* m_label; QProgressBar* m_progressBar;