diff options
| author | Peter Penz <[email protected]> | 2008-08-12 18:36:49 +0000 |
|---|---|---|
| committer | Peter Penz <[email protected]> | 2008-08-12 18:36:49 +0000 |
| commit | b94777f9d19b3d515088493a81885082a50be791 (patch) | |
| tree | 13bcf6ba24534ace7dfebbb1c9dc4ec280529a60 /src/folderexpander.h | |
| parent | e41715db92d8f30f69b6831e3e03657740e25254 (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.h | 102 |
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 |
