You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ksquirrel/ksquirrel/sidebar/sq_treeview.h

175 lines
5.3 KiB

/***************************************************************************
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
{
Q_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(KListView *, 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