summaryrefslogtreecommitdiffstats
path: root/tdeio/tdefile/tdefiletreeview.h
diff options
context:
space:
mode:
Diffstat (limited to 'tdeio/tdefile/tdefiletreeview.h')
-rw-r--r--tdeio/tdefile/tdefiletreeview.h273
1 files changed, 273 insertions, 0 deletions
diff --git a/tdeio/tdefile/tdefiletreeview.h b/tdeio/tdefile/tdefiletreeview.h
new file mode 100644
index 000000000..11d695288
--- /dev/null
+++ b/tdeio/tdefile/tdefiletreeview.h
@@ -0,0 +1,273 @@
+/* This file is part of the KDE project
+ Copyright (C) 2000 David Faure <faure@kde.org>
+ 2000 Carsten Pfeiffer <pfeiffer@kde.org>
+ 2002 Klaas Freitag <freitag@suse.de>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#ifndef tdefile_tree_view_h
+#define tdefile_tree_view_h
+
+#include <tqmap.h>
+#include <tqpoint.h>
+#include <tqpixmap.h>
+#include <tqstrlist.h>
+#include <tqtooltip.h>
+
+#include <klistview.h>
+#include <kdirnotify.h>
+#include <tdeio/job.h>
+#include <tdefiletreeviewitem.h>
+#include <tdefiletreebranch.h>
+
+class TQTimer;
+
+
+
+class TDEIO_EXPORT KFileTreeViewToolTip : public TQToolTip
+{
+public:
+ KFileTreeViewToolTip( TQListView *view ) : TQToolTip( view ), m_view( view ) {}
+
+protected:
+ virtual void maybeTip( const TQPoint & );
+
+private:
+ TQListView *m_view;
+};
+
+
+/**
+ * The filetreeview offers a treeview on the file system which behaves like
+ * a QTreeView showing files and/or directories in the file system.
+ *
+ * KFileTreeView is able to handle more than one URL, represented by
+ * KFileTreeBranch.
+ *
+ * Typical usage:
+ * 1. create a KFileTreeView fitting in your layout and add columns to it
+ * 2. call addBranch to create one or more branches
+ * 3. retrieve the root item with KFileTreeBranch::root() and set it open
+ * if desired. That starts the listing.
+ */
+class TDEIO_EXPORT KFileTreeView : public KListView
+{
+ Q_OBJECT
+public:
+ KFileTreeView( TQWidget *parent, const char *name = 0 );
+ virtual ~KFileTreeView();
+
+ /**
+ * @return the current (i.e. selected) item
+ */
+ KFileTreeViewItem * currentKFileTreeViewItem() const;
+
+ /**
+ * @return the URL of the current selected item.
+ */
+ KURL currentURL() const;
+
+ /**
+ * Adds a branch to the treeview item.
+ *
+ * This high-level function creates the branch, adds it to the treeview and
+ * connects some signals. Note that directory listing does not start until
+ * a branch is expanded either by opening the root item by user or by setOpen
+ * on the root item.
+ *
+ * @returns a pointer to the new branch or zero
+ * @param path is the base url of the branch
+ * @param name is the name of the branch, which will be the text for column 0
+ * @param showHidden says if hidden files and directories should be visible
+ */
+ KFileTreeBranch* addBranch( const KURL &path, const TQString& name, bool showHidden = false );
+
+ /**
+ * same as the function above but with a pixmap to set for the branch.
+ */
+ virtual KFileTreeBranch* addBranch( const KURL &path, const TQString& name ,
+ const TQPixmap& pix, bool showHidden = false );
+
+ /**
+ * same as the function above but letting the user create the branch.
+ */
+ virtual KFileTreeBranch* addBranch( KFileTreeBranch * );
+
+ /**
+ * removes the branch from the treeview.
+ * @param branch is a pointer to the branch
+ * @returns true on success.
+ */
+ virtual bool removeBranch( KFileTreeBranch *branch );
+
+ /**
+ * @returns a pointer to the KFileTreeBranch in the KFileTreeView or zero on failure.
+ * @param searchName is the name of a branch
+ */
+ KFileTreeBranch *branch( const TQString& searchName );
+
+
+ /**
+ * @returns a list of pointers to all existing branches in the treeview.
+ **/
+ KFileTreeBranchList& branches();
+
+ /**
+ * set the directory mode for branches. If true is passed, only directories will be loaded.
+ * @param branch is a pointer to a KFileTreeBranch
+ */
+ virtual void setDirOnlyMode( KFileTreeBranch *branch, bool );
+
+ /**
+ * searches a branch for a KFileTreeViewItem identified by the relative url given as
+ * second parameter. The method adds the branches base url to the relative path and finds
+ * the item.
+ * @returns a pointer to the item or zero if the item does not exist.
+ * @param brnch is a pointer to the branch to search in
+ * @param relUrl is the branch relativ url
+ */
+ KFileTreeViewItem *findItem( KFileTreeBranch* brnch, const TQString& relUrl );
+
+ /**
+ * see method above, differs only in the first parameter. Finds the branch by its name.
+ */
+ KFileTreeViewItem *findItem( const TQString& branchName, const TQString& relUrl );
+
+ /**
+ * @returns a flag indicating if extended folder pixmaps are displayed or not.
+ */
+ bool showFolderOpenPixmap() const { return m_wantOpenFolderPixmaps; };
+
+public slots:
+
+ /**
+ * set the flag to show 'extended' folder icons on or off. If switched on, folders will
+ * have an open folder pixmap displayed if their children are visible, and the standard
+ * closed folder pixmap (from mimetype folder) if they are closed.
+ * If switched off, the plain mime pixmap is displayed.
+ * @param showIt = false displays mime type pixmap only
+ */
+ virtual void setShowFolderOpenPixmap( bool showIt = true )
+ { m_wantOpenFolderPixmaps = showIt; }
+
+protected:
+ /**
+ * @returns true if we can decode the drag and support the action
+ */
+
+ virtual bool acceptDrag(TQDropEvent* event) const;
+ virtual TQDragObject * dragObject();
+
+ virtual void startAnimation( KFileTreeViewItem* item, const char * iconBaseName = "kde", uint iconCount = 6 );
+ virtual void stopAnimation( KFileTreeViewItem* item );
+ virtual void contentsDragEnterEvent( TQDragEnterEvent *e );
+ virtual void contentsDragMoveEvent( TQDragMoveEvent *e );
+ virtual void contentsDragLeaveEvent( TQDragLeaveEvent *e );
+ virtual void contentsDropEvent( TQDropEvent *ev );
+
+protected slots:
+ virtual void slotNewTreeViewItems( KFileTreeBranch*,
+ const KFileTreeViewItemList& );
+
+ virtual void slotSetNextUrlToSelect( const KURL &url )
+ { m_nextUrlToSelect = url; }
+
+ virtual TQPixmap itemIcon( KFileTreeViewItem*, int gap = 0 ) const;
+
+private slots:
+ void slotExecuted( TQListViewItem * );
+ void slotExpanded( TQListViewItem * );
+ void slotCollapsed( TQListViewItem *item );
+
+ void slotSelectionChanged();
+
+ void slotAnimation();
+
+ void slotAutoOpenFolder();
+
+ void slotOnItem( TQListViewItem * );
+ void slotItemRenamed(TQListViewItem*, const TQString &, int);
+
+ void slotPopulateFinished( KFileTreeViewItem* );
+
+
+signals:
+
+ void onItem( const TQString& );
+ /* New signals if you like it ? */
+ void dropped( TQWidget*, TQDropEvent* );
+ void dropped( TQWidget*, TQDropEvent*, KURL::List& );
+ void dropped( KURL::List&, KURL& );
+ // The drop event allows to differentiate between move and copy
+ void dropped( TQWidget*, TQDropEvent*, KURL::List&, KURL& );
+
+ void dropped( TQDropEvent *e, TQListViewItem * after);
+ void dropped(KFileTreeView *, TQDropEvent *, TQListViewItem *);
+ void dropped(TQDropEvent *e, TQListViewItem * parent, TQListViewItem * after);
+ void dropped(KFileTreeView *, TQDropEvent *, TQListViewItem *, TQListViewItem *);
+
+protected:
+ KURL m_nextUrlToSelect;
+
+
+private:
+ // Returns whether item is still a valid item in the tree
+ bool isValidItem( TQListViewItem *item);
+ void clearTree();
+
+
+ /* List that holds the branches */
+ KFileTreeBranchList m_branches;
+
+
+ struct AnimationInfo
+ {
+ AnimationInfo( const char * _iconBaseName, uint _iconCount, const TQPixmap & _originalPixmap )
+ : iconBaseName(_iconBaseName), iconCount(_iconCount), iconNumber(1), originalPixmap(_originalPixmap) {}
+ AnimationInfo() : iconCount(0) {}
+ TQCString iconBaseName;
+ uint iconCount;
+ uint iconNumber;
+ TQPixmap originalPixmap;
+ };
+ typedef TQMap<KFileTreeViewItem *, AnimationInfo> MapCurrentOpeningFolders;
+ MapCurrentOpeningFolders m_mapCurrentOpeningFolders;
+
+
+ TQTimer *m_animationTimer;
+
+ TQPoint m_dragPos;
+ bool m_bDrag;
+
+ bool m_wantOpenFolderPixmaps; // Flag weather the folder should have open-folder pixmaps
+
+ TQListViewItem *m_currentBeforeDropItem; // The item that was current before the drag-enter event happened
+ TQListViewItem *m_dropItem; // The item we are moving the mouse over (during a drag)
+ TQStrList m_lstDropFormats;
+ TQPixmap m_openFolderPixmap;
+ TQTimer *m_autoOpenTimer;
+
+ KFileTreeViewToolTip m_toolTip;
+
+
+protected:
+ virtual void virtual_hook( int id, void* data );
+private:
+ class KFileTreeViewPrivate;
+ KFileTreeViewPrivate *d;
+};
+
+#endif