diff options
Diffstat (limited to 'src/sidebar/sq_treeview.h')
-rw-r--r-- | src/sidebar/sq_treeview.h | 174 |
1 files changed, 174 insertions, 0 deletions
diff --git a/src/sidebar/sq_treeview.h b/src/sidebar/sq_treeview.h new file mode 100644 index 0000000..dd39480 --- /dev/null +++ b/src/sidebar/sq_treeview.h @@ -0,0 +1,174 @@ +/*************************************************************************** + sq_treeview.h - description + ------------------- + begin : Mon Mar 15 2004 + copyright : (C) 2004 by Baryshev Dmitry + email : ksquirrel.iv@gmail.com + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#ifndef SQ_TREEVIEW_H +#define SQ_TREEVIEW_H + +#include <tqstringlist.h> + +#include <tdefiletreeview.h> +#include <kurl.h> + +class KDirWatch; + +class SQ_TreeViewItem; +class SQ_ThreadDirLister; +class SQ_TreeViewMenu; + +/* + * We should subclass KFileTreeBranch to let us create + * our own items. See SQ_TreeViewitem. + */ +class SQ_FileTreeViewBranch : public KFileTreeBranch +{ + public: + SQ_FileTreeViewBranch(KFileTreeView*, const KURL &url, const TQString &name, const TQPixmap &pix); + ~SQ_FileTreeViewBranch(); + + protected: + virtual KFileTreeViewItem *createTreeViewItem(KFileTreeViewItem *parent, KFileItem *fileItem); +}; + +/* + * SQ_TreeView represents a file tree. + */ + +class SQ_TreeView : public KFileTreeView +{ + TQ_OBJECT + + + public: + SQ_TreeView(TQWidget *parent = 0, const char *name = 0); + ~SQ_TreeView(); + + enum Recursion { No = 0, Files, Dirs, FilesDirs }; + + /* + * Recursion settings. If recursion > 0, treeview will + * show a number of files/directories in the given directory. + * It will look like that: + * + * + mypictures [8] + * | + wallpapers [231] + * | + nature [12] + * | + pets [43] + * | + cats [22] + * | + dogs [32] + * + * This operation is threaded. + */ + void setupRecursion(); + + /* + * Load new url, if tree is visible. Save url and do nothing + * otherwise. + */ + void emitNewURL(const KURL &url); + + virtual void clearSelection(); + virtual void setSelected(TQListViewItem *item, bool selected); + virtual void setCurrentItem(TQListViewItem *item); + virtual void setOpen(TQListViewItem *item, bool open); + + static SQ_TreeView* instance() { return m_instance; } + + protected: + virtual void customEvent(TQCustomEvent *e); + virtual void startAnimation(KFileTreeViewItem* item, const char*, uint); + virtual void stopAnimation(KFileTreeViewItem* item); + virtual void viewportResizeEvent(TQResizeEvent *); + virtual void contentsMousePressEvent(TQMouseEvent *e); + virtual void contentsMouseDoubleClickEvent(TQMouseEvent *e); + + /* + * On show event load saved url, if any. See emitNewURL(). + */ + virtual void showEvent(TQShowEvent *); + + private: + void toggle(SQ_TreeViewItem *, bool, bool = false); + void setRecursion(int); + + /* + * Set given item visible, current, and populate it. + */ + void populateItem(KFileTreeViewItem *); + + /* + * Search first available url in variable 'paths'. Open found item. + * If item was found return true. + */ + bool doSearch(); + + private slots: + /* + * Load url. + */ + void slotNewURL(const KURL &url); + + void slotCurrentChanged(TQListViewItem *); + void slotAddToFolderBasket(); + void slotClearChecked(); + void slotDirty(const TQString &); + void slotDeleteItemMy(KFileItem *); + + /* + * Item executed. Let's pass its url to SQ_WidgetStack (if needed). + */ + void slotItemExecuted(TQListViewItem*); + + /* + * New item is opened. Try to continue loading url. + */ + void slotOpened(KFileTreeViewItem *); + + void slotNewTreeViewItems(KFileTreeBranch*, const KFileTreeViewItemList &); + void slotDelayedScan(); + void slotAnimation(); + + void slotDropped(TQDropEvent *, TQListViewItem *, TQListViewItem *); + void slotContextMenu(TDEListView *, TQListViewItem *, const TQPoint &); + + signals: + void newURL(const KURL &url); + + /* + * Since 0.7.0 our file manager supports multiple directories. + * These signals tell SQ_DirOperator to add or remove some + * urls. + */ + void urlAdded(const KURL &); + void urlRemoved(const KURL &); + + private: + SQ_FileTreeViewBranch *root; + TQStringList paths; + KURL pendingURL, cURL; + SQ_ThreadDirLister *lister; + KFileTreeViewItemList m_mapFolders; + TQTimer *m_animTimer, *scanTimer; + bool m_ignoreClick; + int m_recurs; + SQ_TreeViewMenu *menu; + KDirWatch *dw; + KFileTreeViewItem *itemToBeOpened; + + static SQ_TreeView *m_instance; +}; + +#endif |