┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/folderexpander.h
diff options
context:
space:
mode:
authorPeter Penz <[email protected]>2008-08-12 18:36:49 +0000
committerPeter Penz <[email protected]>2008-08-12 18:36:49 +0000
commitb94777f9d19b3d515088493a81885082a50be791 (patch)
tree13bcf6ba24534ace7dfebbb1c9dc4ec280529a60 /src/folderexpander.h
parente41715db92d8f30f69b6831e3e03657740e25254 (diff)
Provide functionality for auto-expanding folders (the whole patch has been provided by Simon St James). The setting is currently not offered in the GUI, as some minor remaining issues must be fixed.
CCMAIL: [email protected] svn path=/trunk/KDE/kdebase/apps/; revision=845975
Diffstat (limited to 'src/folderexpander.h')
-rw-r--r--src/folderexpander.h102
1 files changed, 102 insertions, 0 deletions
diff --git a/src/folderexpander.h b/src/folderexpander.h
new file mode 100644
index 000000000..136b6b152
--- /dev/null
+++ b/src/folderexpander.h
@@ -0,0 +1,102 @@
+/***************************************************************************
+ * Copyright (C) 2008 by Simon St James <[email protected]> *
+ * *
+ * 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 FOLDEREXPANDER_H
+#define FOLDEREXPANDER_H
+
+// Needs to be exported as treesidebarpage uses it.
+#include "libdolphin_export.h"
+
+#include <QObject>
+#include <QPoint>
+
+class QAbstractItemView;
+class QTreeView;
+class QTimer;
+class QSortFilterProxyModel;
+class QModelIndex;
+class KDirModel;
+
+/* Grants "auto expand"/ "spring-loaded folders" to
+ the provided view. Qt has its own auto-expand
+ mechanism, but this works only for QTreeView and
+ does not play well with our auto-scrolling in
+ the Folders pane. Auto-expansion is enabled by default.
+
+ If the provided view is a QTreeView, the expanded state
+ is automatically toggled on hover. Otherwise, the enterDir()
+ signal is emitted, and the caller needs to ensure that
+ the requested directory is entered.
+
+ The FolderExpander becomes a child of the provided view */
+
+/**
+ * Grants auto expanding functionality to the provided item view.
+ * Qt has its own auto expand mechanism, but this works only
+ * for QTreeView. Auto expanding of folders is turned on
+ * per default.
+ *
+ * If the provided view is an instance of the class QTreeView, the
+ * expanded of the directory is automatically done on hover. Otherwise
+ * the enterDir() signal is emitted and the caller needs to ensure that
+ * the requested directory is entered.
+ *
+ * The FolderExpander becomes a child of the provided view.
+ */
+class LIBDOLPHINPRIVATE_EXPORT FolderExpander : public QObject
+{
+ Q_OBJECT
+
+public:
+ FolderExpander(QAbstractItemView* view, QSortFilterProxyModel* proxyModel);
+ virtual ~FolderExpander();
+
+ void setEnabled(bool enabled);
+ bool enabled() const;
+
+signals:
+ /**
+ * Is emitted if the directory \a dirModelIndex should be entered. The
+ * signal is not emitted when a QTreeView is used, as the entering of
+ * the directory is already provided by expanding the tree node.
+ */
+ void enterDir(const QModelIndex& dirModelIndex);
+
+private slots:
+ void viewScrolled();
+ void autoExpandTimeout();
+
+private:
+ bool m_enabled;
+
+ QAbstractItemView* m_view;
+ QSortFilterProxyModel* m_proxyModel;
+
+ QTimer* m_autoExpandTriggerTimer;
+ QPoint m_autoExpandPos;
+
+ static const int AUTO_EXPAND_DELAY = 700;
+
+ /**
+ * Watchs the drag/move events for the view to decide
+ * whether auto expanding of a folder should be triggered.
+ */
+ bool eventFilter(QObject* watched, QEvent* event);
+};
+#endif