┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/viewpropsapplier.cpp
diff options
context:
space:
mode:
authorPeter Penz <[email protected]>2006-12-05 22:48:35 +0000
committerPeter Penz <[email protected]>2006-12-05 22:48:35 +0000
commit8c7e12b1f7ae0699c85c4a0cbf29265a13766d43 (patch)
treec23180df0ebc85ca438bae49a30da35c9e3496c0 /src/viewpropsapplier.cpp
parentd567bc3aea444ff3bc70e4180faaaa1f124be93b (diff)
Applying view properties recursively to sub directories works again (TODO: rewrite ViewPropsApplier completely as KJob implementation).
svn path=/trunk/playground/utils/dolphin/; revision=610887
Diffstat (limited to 'src/viewpropsapplier.cpp')
-rw-r--r--src/viewpropsapplier.cpp114
1 files changed, 114 insertions, 0 deletions
diff --git a/src/viewpropsapplier.cpp b/src/viewpropsapplier.cpp
new file mode 100644
index 000000000..f9992a619
--- /dev/null
+++ b/src/viewpropsapplier.cpp
@@ -0,0 +1,114 @@
+/***************************************************************************
+ * 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., *
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ ***************************************************************************/
+
+#include "viewpropsapplier.h"
+#include "viewproperties.h"
+
+#include <assert.h>
+#include <kurl.h>
+#include <kfileitem.h>
+
+ViewPropsApplier::ViewPropsApplier(const KUrl& dir, const ViewProperties* viewProps)
+{
+ m_rootData = new RootData();
+ m_rootData->refCount = 0;
+ m_rootData->viewProps = viewProps;
+ m_rootData->rootApplier = this;
+
+ start(dir);
+}
+
+ViewPropsApplier::~ViewPropsApplier()
+{
+ assert(m_rootData != 0);
+ if (m_rootData->refCount == 0) {
+ m_rootData->rootApplier->emitCompleted();
+ delete m_rootData;
+ m_rootData = 0;
+ }
+
+ delete m_dirLister;
+ m_dirLister = 0;
+}
+
+void ViewPropsApplier::slotCompleted(const KUrl& /*dir*/)
+{
+ QTimer::singleShot(0, this, SLOT(countSubDirs()));
+}
+
+void ViewPropsApplier::countSubDirs()
+{
+ KFileItemList list = m_dirLister->items();
+ const int dirCount = list.count();
+ if (dirCount > 0) {
+ m_rootData->rootApplier->emitProgress(m_dirLister->url(), dirCount);
+
+ KFileItemList::const_iterator end = list.end();
+ for (KFileItemList::const_iterator it = list.begin(); it != end; ++it) {
+ assert((*it)->isDir());
+ const KUrl& subDir = (*it)->url();
+ if (m_rootData->viewProps != 0) {
+ // TODO: provide copy constructor in ViewProperties
+ ViewProperties props(subDir);
+ props.setViewMode(m_rootData->viewProps->viewMode());
+ props.setShowHiddenFilesEnabled(m_rootData->viewProps->sorting());
+ props.setSorting(m_rootData->viewProps->sorting());
+ props.setSortOrder(m_rootData->viewProps->sortOrder());
+ }
+ new ViewPropsApplier(subDir, m_rootData);
+ }
+ }
+
+ --(m_rootData->refCount);
+ if ((m_rootData->refCount == 0) || (m_rootData->rootApplier != this)) {
+ delete this;
+ }
+}
+
+ViewPropsApplier::ViewPropsApplier(const KUrl& dir,
+ RootData* rootData)
+{
+ m_rootData = rootData;
+ assert(m_rootData != 0);
+ start(dir);
+}
+
+void ViewPropsApplier::start(const KUrl& dir)
+{
+ m_dirLister = new KDirLister();
+ m_dirLister->setDirOnlyMode(true);
+ m_dirLister->setAutoUpdate(false);
+ connect(m_dirLister, SIGNAL(completed(const KUrl&)),
+ this, SLOT(slotCompleted(const KUrl&)));
+ m_dirLister->openUrl(dir);
+ ++(m_rootData->refCount);
+}
+
+void ViewPropsApplier::emitProgress(const KUrl& dir, int count)
+{
+ emit progress(dir, count);
+}
+
+void ViewPropsApplier::emitCompleted()
+{
+ emit completed();
+}
+
+#include "viewpropsapplier.moc"