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.
kxmleditor/part/kxe_treeview.h

236 lines
7.6 KiB

/***************************************************************************
kxe_treeview.h - description
-------------------
begin : Thu Sep 20 2001
copyright : (C) 2001, 2002, 2003 by The KXMLEditor Team
email : OleBowle@gmx.de
***************************************************************************/
/***************************************************************************
* *
* 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 KXE_TREEVIEW_H
#define KXE_TREEVIEW_H
#include <klistview.h>
#include <tqstrlist.h>
class KXESearchDialog;
class TQDomDocument;
class TQDomNode;
class TQDomElement;
class TQDomCharacterData;
class TQDomProcessingInstruction;
class TQMouseEvent;
class TQTimer;
class TQKeyEvent;
class KXMLGUIClient;
class KXE_TreeViewItem;
/**
* This is a listview, which displays the XML tree structure.
* @short shows XML tree
*/
class KXE_TreeView : public KListView
{
Q_OBJECT
public:
KXE_TreeView( KXMLGUIClient * pGUIClient, TQWidget * pParent = 0, const char * pszName = 0 );
/** Changes the behaviour of this view to readonly or readwrite. */
void setReadWrite( bool fReadWrite );
/** Selects the given item. */
void selectItem( KXE_TreeViewItem * const pItem );
/** Selects the item corresponding to the given node.
* Returns true on success, false otherwise. */
bool selectNode( const TQDomNode & node );
/** Returns the a pointer to the selected items node or a null pointer (if no item is selected). */
TQDomNode * getSelectedNode() const;
/** Returns the a pointer to the special processing instruction or a null pointer for (if no item is exists). */
TQDomNode * getSpecProcInstrNode(const TQString& target) const;
/** Returns the selected items path or an empty string, if no item is selected. */
TQString getSelectedPath() const;
/** Returns true, if this tree view contains bookmarked tree items and false otherwise. */
bool containsBookmarkedItems() const { return (m_nBookmarkedItems>0); }
/** Drop or paste text into item */
bool drop(TQListViewItem *, TQDropEvent *);
/** toggles bookmark on the selected item */
void bookmarksToggle();
/** searches for the next bookmarked item */
void bookmarksPrev();
/** searches for the previous bookmarked item */
void bookmarksNext();
/** deselects currently selected item */
void editDeselect();
/** Selects the selected item's parent item. */
void viewNodeUp();
/** Expands the selected tree item's subtree to the given level (see @ref KXE_TreeViewItem::expandSubTree). */
void viewExpNode( int nLevel );
/** Collapses the selected tree item's subtree to the given level (see @ref KXE_TreeViewItem::collapseSubTree). */
void viewColNode( int nLevel );
/**
* Creates new item(s) to the given node (and its child nodes)
* and inserts it (or them) in the tree.
*/
void updateNodeCreated( const TQDomNode & node );
/** Changes the item corresponding to the given node. */
void updateNodeChanged( const TQDomNode & node );
/** Removes the item corresponding to the given node. */
void updateNodeDeleted( const TQDomNode & node );
/** Moves the item corresponding to the given node. */
void updateNodeMoved( const TQDomNode & node );
/** Clears the whole tree. */
void updateClear();
/**
* Handles inplace-renaming of items, because in our case
* only items representing XML elements are to be renameable.
* For the actual renaming of the items text, the base
* class functionality is used and the signal
* @ref sigItemRenamedInplace emitted.
*/
virtual void rename( TQListViewItem * pItem, int nColumn );
/** Returns info, is root element is already created */
bool hasRootNode();
/** Returns last top-level child on the tree. If there are no chold in the tree, null is returned. */
KXE_TreeViewItem* lastChild();
public slots:
// configuration slots
//////////////////////////////////////////////////////////////
/**
* Changes this tree view's settings according to the current
* configuration.
*/
void slotTreeViewSettingsChanged();
signals:
/** emitted, when no item is selected */
void sigSelectionCleared(bool);
/** emitted, when an XML element item is selected */
void sigSelectionChanged( const TQDomElement & );
/** emitted, when an XML Content item is selected */
void sigSelectionChanged( const TQDomCharacterData & );
/** emitted, when an XML proc.instr. item is selected */
void sigSelectionChanged( const TQDomProcessingInstruction & );
/**
* Signals the change of bookmark status.
* true - item(s) bookmarked
* false - no item bookmarked
*/
void sigNewBookmarkStatus( bool fStatus );
/** Emitted, when a context menu is requested */
void sigContextMenuRequested( const TQString & szMenuName, const TQPoint & pos );
/** Emitted when user presses a key. */
void sigKeyPressed(TQKeyEvent* e);
protected:
/** if RMB shows the popupmenu corresponding to the selected item */
void contentsMousePressEvent( TQMouseEvent * );
/** Finds the corresponding treeview item to the given node. */
KXE_TreeViewItem * findCorrespondingItem( const TQDomNode & node );
/** Overrides KListView::contentsMouseReleaseEvent */
void contentsMouseReleaseEvent(TQMouseEvent *);
/** Overrides KListView::contentsMouseMoveEvent */
void contentsMouseMoveEvent(TQMouseEvent *);
/** Overrides TQScrollView::contentsDragEnterEvent */
void contentsDragEnterEvent(TQDragEnterEvent *);
/** Overrides TQScrollView::contentsDragMoveEvent */
void contentsDragMoveEvent(TQDragMoveEvent *);
/** Overrides TQScrollView::contentsDragLeaveEvent */
void contentsDragLeaveEvent(TQDragLeaveEvent *);
/** Overrides TQScrollView::contentsDropEvent */
void contentsDropEvent(TQDropEvent *);
virtual void keyPressEvent(TQKeyEvent *e);
protected slots:
/** Checks, which type of item was selected an emits the corresponding signal. */
void slotSelectionChanged();
/**
* Ensures that the expanded item's grandchild items are created.
* This is very important for the "create items on demand" mode. But even in
* "create all items while loading" mode, this function has to be executed,
* because KXMLEditor could have been in "create items on demand" mode during
* the opening of the document.
*
* To be connected to the signal TQListView::expanded(TQListViewItem*).
*/
void slotItemExpanded( TQListViewItem * );
private slots:
/** Called, when m_autoOpenTimer timeout occured */
void slotAutoOpenFolder();
protected:
/** the GUI client, needed for the popupmenus */
KXMLGUIClient * m_pGUIClient;
/** number of bookmarked items */
unsigned int m_nBookmarkedItems;
/** True if drag&drop operation started, otherwise is false */
bool m_bDrag;
/** Contain mouse position of drag operation */
TQPoint m_dragPos;
/** The item that was current before the drag-enter event happened */
TQListViewItem *m_pCurrentBeforeDropItem;
/** The item we are moving the mouse over (during a drag) */
TQListViewItem *m_pDropItem;
/** List of avalilable drop formats */
TQStrList m_lstDropFormats;
/** Timer for counting time to auto open fselected folder while drag */
TQTimer *m_autoOpenTimer;
};
#endif