]> git.sven.stormbind.net Git - sven/vym.git/blob - treeitem.h
f47a997e82bc6c7b2103b20b97ba9ad6db5f5b73
[sven/vym.git] / treeitem.h
1 #ifndef TREEITEM_H
2 #define TREEITEM_H
3
4 #include <QColor>
5 #include <QUuid>
6 #include <QList>
7 #include <QVariant>
8
9 #include "flagrow.h"
10 #include "heading.h"
11 #include "vymnote.h"
12 #include "xmlobj.h"
13
14 class AttributeItem;
15 class BranchObj;
16 class BranchItem;
17 class FloatImageObj;
18 class ImageItem;
19 class LinkableMapObj;
20 class QModelIndex;
21 class VymModel;
22 class XLinkItem;
23 class XLinkObj;
24
25 class TreeItem:public XMLObj
26 {
27 public:
28     enum Type {Undefined,MapCenter,Branch,Image,Attribute,XLink};
29     enum HideTmpMode {HideNone, HideExport};
30
31     TreeItem();
32     TreeItem(const QList<QVariant> &data, TreeItem *parent = 0);
33     virtual ~TreeItem();
34     void init();
35     virtual void clear()=0;
36
37     // General housekeeping
38     virtual void setModel (VymModel *m);
39     virtual VymModel* getModel();
40
41
42     /*! Return number of item, as it would be after it would have been appended.
43         This is used to notify view about layout changes before model is modified. */
44     virtual int getRowNumAppend (TreeItem *child);
45
46     virtual void appendChild (TreeItem *child);
47     virtual void removeChild (int row);
48
49     virtual TreeItem *child(int row);
50     virtual int childCount() const;
51     virtual int childNumber() const;
52     virtual int columnCount() const;
53     virtual int branchCount() const;
54     virtual int imageCount() const;
55     virtual int xlinkCount() const;
56     virtual int attributeCount() const;
57
58     virtual int row() const;
59     virtual int depth() ;
60     virtual TreeItem *parent();
61     virtual bool isChildOf (TreeItem *ti);
62
63     /*! Return number of item in parent by type, 
64         e.g. first branch has number 0           */
65     virtual int childNum();             //! Return number of item in list of all children
66     virtual int num();                  //! Return number of item by type
67     virtual int num (TreeItem *item);   //! Return number of item by type
68
69 protected:
70     Type type;
71 public: 
72     virtual void setType (const Type t);
73     virtual Type getType ();
74     virtual bool isBranchLikeType() const;
75     virtual QString getTypeName ();
76
77 // Accessing data
78     virtual QVariant data (int column) const;
79
80
81 protected:
82     Heading heading;
83     QColor backgroundColor;
84 public: 
85     virtual void setHeading (const VymText &vt);
86     virtual void setHeadingPlainText (const QString &s);
87     virtual Heading getHeading() const;
88     virtual QString getHeadingText();
89     virtual std::string getHeadingStd() const;  //! convenience function used for debugging
90     virtual QString getHeadingPlain() const;    //! Some views or methods can't cope with RichText
91     virtual QString getHeadingPlainWithParents(uint numberOfParents); //! Show also some of the parents
92     virtual QString getHeadingDepth();
93     virtual void setHeadingColor(QColor color); //! Set color of heading. In BranchItem overloaded to update QGraphicsView
94     virtual QColor getHeadingColor();           //! Returns color of heading
95     virtual void setBackgroundColor(QColor color);//! Set color of frame brush, if LMO exists for item
96     virtual QColor getBackgroundColor();        //! Returns color of frame brush, if LMO exists for item
97
98
99 protected:
100     QString url;
101 public:
102     void setURL (const QString &url);           //! Set URL
103     QString getURL ();                          //! Get URL
104
105
106 protected:
107     QString vymLink;
108 public:
109     void setVymLink (const QString &url);           //! Set URL
110     QString getVymLink ();                          //! Get URL
111
112 protected:
113     bool target;
114 public:    
115     void toggleTarget();                        //! Toggle target status
116     bool isTarget();                            //! Returns true if item is is a target
117
118 protected:
119     VymNote note;
120 public: 
121     bool isNoteEmpty();
122     virtual void clearNote();
123     virtual bool hasEmptyNote();
124     virtual void setNote(const VymText &vt); //FIXME-3 setNote is called for every select or so???
125     virtual void setNote(const VymNote &vn);
126
127     virtual VymNote getNote();
128     virtual QString getNoteASCII(const QString &indent, const int &width); // returns note  (ASCII)
129     virtual QString getNoteASCII();         // returns note (ASCII)
130
131 protected:
132     FlagRow standardFlags;
133     FlagRow systemFlags;
134 public: 
135     virtual void activateStandardFlag(const QString &flag);
136     virtual void deactivateStandardFlag(const QString &flag);
137     virtual void deactivateAllStandardFlags();
138
139     /*! \brief Toggle a Flag 
140         If master is not NULL,, only one Flag from FlagRow master may 
141         be active simultanously, the others get deactivated.
142     */  
143     virtual void toggleStandardFlag(const QString &flag, FlagRow *master=NULL);
144     virtual void toggleSystemFlag  (const QString &flag, FlagRow *master=NULL);
145     virtual bool hasActiveStandardFlag (const QString &flag);
146     virtual bool hasActiveSystemFlag   (const QString &flag);
147     virtual QStringList activeStandardFlagNames();
148     virtual FlagRow* getStandardFlagRow ();
149
150     virtual QStringList activeSystemFlagNames();
151
152     virtual bool canMoveDown();
153     virtual bool canMoveUp();
154
155 protected:
156     uint id;
157     QUuid uuid;
158
159 public:
160     virtual uint getID ();
161     virtual void setUuid (const QString &id);
162     virtual QUuid getUuid();
163
164     // Navigation and selection
165     virtual TreeItem* getChildNum(const int &n);
166     virtual BranchItem* getFirstBranch();
167     virtual BranchItem* getLastBranch();
168     virtual ImageItem* getFirstImage();
169     virtual ImageItem* getLastImage();
170
171     /*! Get next branch after current branch. Return NULL if there is no
172         next branch */
173     virtual BranchItem* getNextBranch(BranchItem* currentBranch);
174
175     virtual BranchItem* getBranchNum(const int &n);
176     virtual BranchObj* getBranchObjNum(const int &n);
177
178     virtual ImageItem* getImageNum(const int &n);
179     virtual FloatImageObj* getImageObjNum(const int &n);
180
181     virtual AttributeItem* getAttributeNum(const int &n);
182
183     virtual XLinkItem* getXLinkItemNum(const int &n);
184     virtual XLinkObj* getXLinkObjNum(const int &n);
185
186 protected:
187     bool hideExport;                        //! Hide this item in export
188     bool hidden;                            //! Hidden in export if true
189 public:
190     virtual void setHideTmp (HideTmpMode);
191     virtual bool hasHiddenExportParent ();
192     virtual void setHideInExport(bool);     // set export of object (and children)
193     virtual bool hideInExport();
194     virtual bool isHidden ();       
195     virtual void updateVisibility();        //! Sets visibility in LinkableMapObj, if existing
196
197     virtual QString getGeneralAttr();
198     
199 protected:
200     VymModel *model;
201
202     QList<TreeItem*> childItems;
203     QList<QVariant> itemData;
204     TreeItem *parentItem;
205
206     /*!  Set rootItem (does not change, needed for some quick checks 
207          e.g. if some branch is mapCenter and isChildOf  */
208     TreeItem *rootItem;
209  
210     int branchOffset;
211     int branchCounter;
212     int imageOffset;
213     int imageCounter;
214
215     int attributeOffset;
216     int attributeCounter;
217
218     int xlinkOffset;
219     int xlinkCounter;
220 };
221
222 #endif