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