treeitem.h
author convert-repo
Fri, 23 Jul 2010 16:43:49 +0000
changeset 849 988f1908a7c4
parent 848 e265f07f2173
permissions -rw-r--r--
update tags
insilmaril@725
     1
#ifndef TREEITEM_H
insilmaril@725
     2
#define TREEITEM_H
insilmaril@725
     3
insilmaril@758
     4
#include <QColor>
insilmaril@725
     5
#include <QList>
insilmaril@725
     6
#include <QVariant>
insilmaril@725
     7
insilmaril@766
     8
#include "flagrow.h"
insilmaril@746
     9
#include "noteobj.h"
insilmaril@746
    10
#include "xmlobj.h"
insilmaril@746
    11
insilmaril@794
    12
class AttributeItem;
insilmaril@750
    13
class BranchObj;
insilmaril@750
    14
class BranchItem;
insilmaril@776
    15
class FloatImageObj;
insilmaril@776
    16
class ImageItem;
insilmaril@794
    17
class LinkableMapObj;
insilmaril@848
    18
class QModelIndex;
insilmaril@746
    19
class VymModel;
insilmaril@790
    20
class XLinkItem;
insilmaril@790
    21
class XLinkObj;
insilmaril@726
    22
insilmaril@779
    23
class TreeItem:public XMLObj
insilmaril@725
    24
{
insilmaril@725
    25
public:
insilmaril@794
    26
	enum Type {Undefined,MapCenter,Branch,Image,Attribute,XLink};
insilmaril@753
    27
	enum HideTmpMode {HideNone, HideExport};
insilmaril@753
    28
insilmaril@776
    29
    TreeItem();
insilmaril@725
    30
    TreeItem(const QList<QVariant> &data, TreeItem *parent = 0);
insilmaril@791
    31
    virtual ~TreeItem();
insilmaril@756
    32
	void init();
insilmaril@756
    33
insilmaril@727
    34
	// General housekeeping
insilmaril@759
    35
	virtual void setModel (VymModel *m);
insilmaril@759
    36
	virtual VymModel* getModel();
insilmaril@746
    37
insilmaril@776
    38
insilmaril@776
    39
	/*! Return number of item, as it would be after it would have been appended.
insilmaril@776
    40
	    This is used to notify view about layout changes before model is modified. */
insilmaril@776
    41
	virtual int getRowNumAppend (TreeItem *child);
insilmaril@776
    42
insilmaril@759
    43
    virtual void appendChild (TreeItem *child);
insilmaril@759
    44
	virtual void removeChild (int row);
insilmaril@725
    45
insilmaril@759
    46
    virtual TreeItem *child(int row);
insilmaril@759
    47
    virtual int childCount() const;
insilmaril@759
    48
    virtual int childNumber() const;
insilmaril@759
    49
    virtual int columnCount() const;
insilmaril@759
    50
	virtual int branchCount() const;
insilmaril@759
    51
	virtual int imageCount() const;
insilmaril@759
    52
	virtual int xlinkCount() const;
insilmaril@786
    53
	virtual int attributeCount() const;
insilmaril@727
    54
insilmaril@759
    55
    virtual int row() const;
insilmaril@759
    56
	virtual int depth() ;
insilmaril@759
    57
    virtual TreeItem *parent();
insilmaril@749
    58
insilmaril@749
    59
	/*! Return number of item in parent by type, 
insilmaril@749
    60
	    e.g. first branch has number 0           */
insilmaril@758
    61
	virtual int childNum();				//! Return number of item in list of all children
insilmaril@758
    62
	virtual int num();					//! Return number of item by type
insilmaril@758
    63
	virtual int num (TreeItem *item);	//! Return number of item by type
insilmaril@727
    64
insilmaril@766
    65
protected:
insilmaril@766
    66
	Type type;
insilmaril@766
    67
public:	
insilmaril@766
    68
	virtual void setType (const Type t);
insilmaril@766
    69
	virtual Type getType ();
insilmaril@766
    70
	virtual bool isBranchLikeType() const;
insilmaril@766
    71
	virtual QString getTypeName ();
insilmaril@766
    72
insilmaril@766
    73
// Accessing data
insilmaril@848
    74
    virtual QVariant data (int column) const;
insilmaril@758
    75
insilmaril@767
    76
insilmaril@758
    77
protected:
insilmaril@758
    78
	QColor headingColor;
insilmaril@758
    79
public:	
insilmaril@758
    80
	virtual void setHeading (const QString s);
insilmaril@758
    81
	virtual QString getHeading() const;
insilmaril@758
    82
	virtual std::string getHeadingStd() const;	//! convenience function used for debugging
insilmaril@758
    83
	virtual void setHeadingColor(QColor color);	//! Set color of heading. In BranchItem overloaded to update QGraphicsView
insilmaril@758
    84
	virtual QColor getHeadingColor();			//! Returns color of heading
insilmaril@746
    85
insilmaril@767
    86
insilmaril@767
    87
protected:
insilmaril@767
    88
	QString url;
insilmaril@767
    89
public:
insilmaril@767
    90
	void setURL (const QString &url);			//! Set URL
insilmaril@767
    91
	QString getURL ();							//! Get URL
insilmaril@767
    92
insilmaril@767
    93
insilmaril@767
    94
protected:
insilmaril@767
    95
	QString vymLink;
insilmaril@767
    96
public:
insilmaril@767
    97
	void setVymLink (const QString &url);			//! Set URL
insilmaril@767
    98
	QString getVymLink ();							//! Get URL
insilmaril@767
    99
insilmaril@767
   100
insilmaril@746
   101
protected:
insilmaril@746
   102
	NoteObj note;
insilmaril@746
   103
public:	
insilmaril@767
   104
	virtual void setNote(const QString &s);
insilmaril@767
   105
	virtual void clearNote();
insilmaril@758
   106
	virtual QString getNote();
insilmaril@768
   107
	virtual bool hasEmptyNote();
insilmaril@791
   108
	virtual void setNoteObj(const NoteObj &); //FIXME-3 setNoteObj is called for every select or so???
insilmaril@776
   109
insilmaril@746
   110
	virtual NoteObj getNoteObj();			
insilmaril@746
   111
	virtual QString getNoteASCII(const QString &indent, const int &width); // returns note	(ASCII)
insilmaril@746
   112
    virtual QString getNoteASCII();			// returns note	(ASCII)
insilmaril@746
   113
    virtual QString getNoteOpenDoc();		// returns note	(OpenDoc)
insilmaril@746
   114
insilmaril@767
   115
insilmaril@746
   116
protected:
insilmaril@766
   117
	FlagRow standardFlags;
insilmaril@767
   118
	FlagRow systemFlags;
insilmaril@746
   119
public:	
insilmaril@766
   120
	virtual void activateStandardFlag(const QString &flag);
insilmaril@766
   121
	virtual void deactivateStandardFlag(const QString &flag);
insilmaril@767
   122
	virtual void deactivateAllStandardFlags();
insilmaril@767
   123
insilmaril@767
   124
	/*! \brief Toggle a Flag 
insilmaril@767
   125
	    If master is not NULL,, only one Flag from FlagRow master may 
insilmaril@767
   126
		be active simultanously, the others get deactivated.
insilmaril@767
   127
	*/	
insilmaril@767
   128
	virtual void toggleStandardFlag(const QString &flag, FlagRow *master=NULL);
insilmaril@766
   129
	virtual bool isActiveStandardFlag (const QString &flag);
insilmaril@767
   130
	virtual QStringList activeStandardFlagNames();
insilmaril@770
   131
	virtual FlagRow* getStandardFlagRow ();
insilmaril@770
   132
insilmaril@767
   133
	virtual QStringList activeSystemFlagNames();
insilmaril@766
   134
insilmaril@767
   135
	virtual bool canMoveDown();
insilmaril@767
   136
	virtual bool canMoveUp();
insilmaril@738
   137
insilmaril@754
   138
protected:
insilmaril@822
   139
	static uint idLast;			// the last used unique ID
insilmaril@822
   140
	uint id;
insilmaril@754
   141
public:
insilmaril@822
   142
	virtual uint getID ();
insilmaril@754
   143
insilmaril@738
   144
	// Navigation and selection
insilmaril@822
   145
	virtual TreeItem* findID (const uint &n);
insilmaril@758
   146
	virtual TreeItem* getChildNum(const int &n);
insilmaril@758
   147
	virtual BranchItem* getFirstBranch();
insilmaril@758
   148
	virtual BranchItem* getLastBranch();
insilmaril@848
   149
	virtual ImageItem* getFirstImage();
insilmaril@848
   150
	virtual ImageItem* getLastImage();
insilmaril@763
   151
insilmaril@763
   152
	/*! Get next branch after current branch. Return NULL if there is no
insilmaril@763
   153
	    next branch */
insilmaril@763
   154
	virtual BranchItem* getNextBranch(BranchItem* currentBranch);
insilmaril@763
   155
insilmaril@758
   156
	virtual BranchItem* getBranchNum(const int &n);
insilmaril@758
   157
	virtual BranchObj* getBranchObjNum(const int &n);
insilmaril@738
   158
insilmaril@776
   159
	virtual ImageItem* getImageNum(const int &n);
insilmaril@776
   160
	virtual FloatImageObj* getImageObjNum(const int &n);
insilmaril@779
   161
insilmaril@794
   162
	virtual AttributeItem* getAttributeNum(const int &n);
insilmaril@794
   163
insilmaril@790
   164
	virtual XLinkItem* getXLinkNum(const int &n);
insilmaril@790
   165
	virtual XLinkObj* getXLinkObjNum(const int &n);
insilmaril@790
   166
insilmaril@768
   167
protected:
insilmaril@791
   168
	bool hideExport;						//! Hide this item in export
insilmaril@791
   169
	bool hidden;							//! Hidden in export if true
insilmaril@768
   170
public:
insilmaril@753
   171
	virtual void setHideTmp (HideTmpMode);
insilmaril@753
   172
	virtual bool hasHiddenExportParent ();
insilmaril@753
   173
	virtual void setHideInExport(bool);		// set export of object (and children)
insilmaril@753
   174
	virtual bool hideInExport();
insilmaril@753
   175
	virtual bool isHidden ();		
insilmaril@791
   176
	virtual void updateVisibility();		//! Sets visibility in LinkableMapObj, if existing
insilmaril@753
   177
insilmaril@779
   178
	virtual QString getGeneralAttr();
insilmaril@726
   179
	
insilmaril@741
   180
protected:
insilmaril@746
   181
	VymModel *model;
insilmaril@746
   182
insilmaril@725
   183
    QList<TreeItem*> childItems;
insilmaril@725
   184
    QList<QVariant> itemData;
insilmaril@725
   185
    TreeItem *parentItem;
insilmaril@773
   186
insilmaril@773
   187
	/*!  Set rootItem (does not change, needed for quick check 
insilmaril@773
   188
	     if some branch is mapCenter */
insilmaril@773
   189
	TreeItem *rootItem;
insilmaril@726
   190
 
insilmaril@738
   191
	int branchOffset;
insilmaril@741
   192
	int branchCounter;
insilmaril@763
   193
	int imageOffset;
insilmaril@763
   194
	int imageCounter;
insilmaril@763
   195
insilmaril@786
   196
	int attributeOffset;
insilmaril@786
   197
	int attributeCounter;
insilmaril@786
   198
insilmaril@790
   199
	int xlinkOffset;
insilmaril@790
   200
	int xlinkCounter;
insilmaril@725
   201
};
insilmaril@725
   202
insilmaril@725
   203
#endif