diff options
Diffstat (limited to 'quanta/treeviews/structtreeview.h')
-rw-r--r-- | quanta/treeviews/structtreeview.h | 176 |
1 files changed, 176 insertions, 0 deletions
diff --git a/quanta/treeviews/structtreeview.h b/quanta/treeviews/structtreeview.h new file mode 100644 index 00000000..4f59e7d3 --- /dev/null +++ b/quanta/treeviews/structtreeview.h @@ -0,0 +1,176 @@ +/*************************************************************************** + structtreeview.h - description + ------------------- + begin : Sat Apr 29 2000 + copyright : (C) 2000 by Yacovlev Alexander & Dmitry Poplavsky <[email protected]> + (C) 2002, 2003 Andras Mantia <[email protected]> + ***************************************************************************/ + +/*************************************************************************** + * * + * 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 STRUCTTREEVIEW_H +#define STRUCTTREEVIEW_H + +#include <qmap.h> +#include <qvaluelist.h> + +#include <klistview.h> + +/**view class of document structure + *@author Andras Mantia & Paulo Moura Guedes & Yacovlev Alexander & Dmitry Poplavsky + */ + +class KPopupMenu; +class KConfig; +class KURL; +class QTime; + +class Node; +class StructTreeTag; +class Parser; +class Document; +struct DTDStruct; + +class StructTreeView : public KListView { + Q_OBJECT +public: + + /** + * since this class is a singleton you must use this function to access it + * + * the parameters are only used at the first call to create the class + * + */ + static StructTreeView* const ref(QWidget *parent = 0L, const char *name = 0L) + { + static StructTreeView *m_ref; + if (!m_ref) m_ref = new StructTreeView (parent, name); + return m_ref; + } + + ~StructTreeView(); + + + void setFollowCursor(bool); + bool followCursor() { return followCursorFlag; } + /** Show the element in tree according to cursor position (x,y) */ + void showTagAtPos(Node *node); + /** Delete the items */ + void deleteList(bool groupOnly); + void setParsingDTDs(const QStringList &parsingDTDList); + void showMessage(const QString& message); + + + bool useOpenLevelSetting; + +public slots: // Public slots + /** repaint document structure */ + void slotReparse(Document *w, Node* node, int openLevel = 3,bool groupOnly=false); + void slotMouseClicked(int button, QListViewItem*, const QPoint&, int); + void slotDoubleClicked( QListViewItem * ); + + // slots for RBM menu + void slotReparseMenuItem(); + void slotSelectTag(); + void slotGotoTag( QListViewItem *item ); + void slotGotoClosingTag(); + /** Recursively open the tree and all its subtrees */ + void slotOpenSubTree(); + /** Recursively close the tree and all its subtrees */ + void slotCloseSubTree(); + void changeFollowCursor() { setFollowCursor(!followCursorFlag); } + /** No descriptions */ + void slotCollapsed(QListViewItem *item); + /** No descriptions */ + void slotExpanded(QListViewItem *); + void slotOpenFile(); + void slotNodeTreeChanged(); + void slotRemoveTags(); + +signals: + void newCursorPosition( int col, int row ); + void selectTagArea(Node* node); + void selectArea(int col1, int row1, int col2, int row2 ); + void needReparse(); + void onTag( const QString &tag ); + void showGroupsForDTEP(const QString& dtep, bool show); + void openFile(const KURL&); + void openImage(const KURL&); + void showProblemMessage(const QString&); + void clearProblemOutput(); + +private: + + /** The constructor is private because we use singleton pattern. + * If you need the class use StructTreeView::ref() for + * construction and reference + */ + StructTreeView(QWidget *parent=0, const char *name=0); + /** builds the structure tree */ + void buildTree(Node *baseNode, int openLevel, bool groupOnly); + /** Do the recursive opening or closing of the trees */ + void setOpenSubTree(QListViewItem *it, bool open); + + /** Make ctrl have the same behavior has shift */ + void setContiguousSelectedItems(); + + void copySelectedItems(QListViewItem* parent, QListViewItem* after); + void moveSelectedItems(QListViewItem* parent, QListViewItem* after); + +private: + + int followCursorId; + bool followCursorFlag; + + KPopupMenu *popupMenu; + KPopupMenu *emptyAreaMenu; + KPopupMenu *dtdMenu; + StructTreeTag *lastTag; + KConfig *config; + QStringList dtdList; + QValueList<const DTDStruct*> m_parsingDTDList; + int openFileMenuId; + QMap<QString, uint> groupIds; + bool m_dirty; + StructTreeTag *top; + QValueList<StructTreeTag*> groups; + uint groupsCount; + + bool topOpened; + QValueList<bool> groupOpened; + + mutable QListViewItem* m_marker; //track that has the drag/drop marker under it + QListViewItem* m_draggedItem; +// mutable QWidget* m_thisWidget; // non const this hack for acceptDrag + +protected: // Protected methods + /** Do a reparse before showing. */ + virtual void showEvent(QShowEvent*); + /** Clear the problem output when hiding. */ + virtual void hideEvent(QHideEvent*); + + // drag functions + virtual bool acceptDrag(QDropEvent* e) const; + virtual void startDrag(); + virtual void contentsMousePressEvent(QMouseEvent* e); + +protected slots: // Protected slots + /** The treeview DTD has changed to id. */ + void slotDTDChanged(int id); + + void slotMouseClickedVPL(int button, QListViewItem*, const QPoint&, int); + virtual void slotDropped(QDropEvent* e, QListViewItem* parent, QListViewItem* after); + +protected: // Protected attributes + Document *write; + QTime *timer; +}; + +#endif |