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.5 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 <qstrlist.h>
class KXESearchDialog;
class QDomDocument;
class QDomNode;
class QDomElement;
class QDomCharacterData;
class QDomProcessingInstruction;
class QMouseEvent;
class QTimer;
class QKeyEvent;
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, QWidget * 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 QDomNode & node );
/** Returns the a pointer to the selected items node or a null pointer (if no item is selected). */
QDomNode * getSelectedNode() const;
/** Returns the a pointer to the special processing instruction or a null pointer for (if no item is exists). */
QDomNode * getSpecProcInstrNode(const QString& target) const;
/** Returns the selected items path or an empty string, if no item is selected. */
QString 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(QListViewItem *, QDropEvent *);
/** 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 QDomNode & node );
/** Changes the item corresponding to the given node. */
void updateNodeChanged( const QDomNode & node );
/** Removes the item corresponding to the given node. */
void updateNodeDeleted( const QDomNode & node );
/** Moves the item corresponding to the given node. */
void updateNodeMoved( const QDomNode & 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( QListViewItem * 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 QDomElement & );
/** emitted, when an XML Content item is selected */
void sigSelectionChanged( const QDomCharacterData & );
/** emitted, when an XML proc.instr. item is selected */
void sigSelectionChanged( const QDomProcessingInstruction & );
/**
* 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 QString & szMenuName, const QPoint & pos );
/** Emitted when user presses a key. */
void sigKeyPressed(QKeyEvent* e);
protected:
/** if RMB shows the popupmenu corresponding to the selected item */
void contentsMousePressEvent( QMouseEvent * );
/** Finds the corresponding treeview item to the given node. */
KXE_TreeViewItem * findCorrespondingItem( const QDomNode & node );
/** Overrides KListView::contentsMouseReleaseEvent */
void contentsMouseReleaseEvent(QMouseEvent *);
/** Overrides KListView::contentsMouseMoveEvent */
void contentsMouseMoveEvent(QMouseEvent *);
/** Overrides QScrollView::contentsDragEnterEvent */
void contentsDragEnterEvent(QDragEnterEvent *);
/** Overrides QScrollView::contentsDragMoveEvent */
void contentsDragMoveEvent(QDragMoveEvent *);
/** Overrides QScrollView::contentsDragLeaveEvent */
void contentsDragLeaveEvent(QDragLeaveEvent *);
/** Overrides QScrollView::contentsDropEvent */
void contentsDropEvent(QDropEvent *);
virtual void keyPressEvent(QKeyEvent *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 QListView::expanded(QListViewItem*).
*/
void slotItemExpanded( QListViewItem * );
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 */
QPoint m_dragPos;
/** The item that was current before the drag-enter event happened */
QListViewItem *m_pCurrentBeforeDropItem;
/** The item we are moving the mouse over (during a drag) */
QListViewItem *m_pDropItem;
/** List of avalilable drop formats */
QStrList m_lstDropFormats;
/** Timer for counting time to auto open fselected folder while drag */
QTimer *m_autoOpenTimer;
};
#endif