#ifndef TREEITEM_H
#define TREEITEM_H
#include <QColor>
#include <QUuid>
#include <QList>
#include <QVariant>
#include "flagrow.h"
#include "heading.h"
#include "vymnote.h"
#include "xmlobj.h"
class AttributeItem;
class BranchObj;
class BranchItem;
class FloatImageObj;
class ImageItem;
class LinkableMapObj;
class QModelIndex;
class VymModel;
class XLinkItem;
class XLinkObj;
class TreeItem:public XMLObj
{
public:
enum Type {Undefined,MapCenter,Branch,Image,Attribute,XLink};
enum HideTmpMode {HideNone, HideExport};
TreeItem();
TreeItem(const QList<QVariant> &data, TreeItem *parent = 0);
virtual ~TreeItem();
void init();
virtual void clear()=0;
// General housekeeping
virtual void setModel (VymModel *m);
virtual VymModel* getModel();
/*! Return number of item, as it would be after it would have been appended.
This is used to notify view about layout changes before model is modified. */
virtual int getRowNumAppend (TreeItem *child);
virtual void appendChild (TreeItem *child);
virtual void removeChild (int row);
virtual TreeItem *child(int row);
virtual int childCount() const;
virtual int childNumber() const;
virtual int columnCount() const;
virtual int branchCount() const;
virtual int imageCount() const;
virtual int xlinkCount() const;
virtual int attributeCount() const;
virtual int row() const;
virtual int depth() ;
virtual TreeItem *parent();
virtual bool isChildOf (TreeItem *ti);
/*! Return number of item in parent by type,
e.g. first branch has number 0 */
virtual int childNum(); //! Return number of item in list of all children
virtual int num(); //! Return number of item by type
virtual int num (TreeItem *item); //! Return number of item by type
protected:
Type type;
public:
virtual void setType (const Type t);
virtual Type getType ();
virtual bool isBranchLikeType() const;
virtual QString getTypeName ();
// Accessing data
virtual QVariant data (int column) const;
protected:
Heading heading;
QColor backgroundColor;
public:
virtual void setHeading (const VymText &vt);
virtual void setHeadingPlainText (const QString &s);
virtual Heading getHeading() const;
virtual QString getHeadingText();
virtual std::string getHeadingStd() const; //! convenience function used for debugging
virtual QString getHeadingPlain() const; //! Some views or methods can't cope with RichText
virtual QString getHeadingPlainWithParents(uint numberOfParents); //! Show also some of the parents
virtual QString getHeadingDepth();
virtual void setHeadingColor(QColor color); //! Set color of heading. In BranchItem overloaded to update QGraphicsView
virtual QColor getHeadingColor(); //! Returns color of heading
virtual void setBackgroundColor(QColor color);//! Set color of frame brush, if LMO exists for item
virtual QColor getBackgroundColor(); //! Returns color of frame brush, if LMO exists for item
protected:
QString url;
public:
void setURL (const QString &url); //! Set URL
QString getURL (); //! Get URL
protected:
QString vymLink;
public:
void setVymLink (const QString &url); //! Set URL
QString getVymLink (); //! Get URL
protected:
bool target;
public:
void toggleTarget(); //! Toggle target status
bool isTarget(); //! Returns true if item is is a target
protected:
VymNote note;
public:
bool isNoteEmpty();
virtual void clearNote();
virtual bool hasEmptyNote();
virtual void setNote(const VymText &vt); //FIXME-3 setNote is called for every select or so???
virtual void setNote(const VymNote &vn);
virtual VymNote getNote();
virtual QString getNoteASCII(const QString &indent, const int &width); // returns note (ASCII)
virtual QString getNoteASCII(); // returns note (ASCII)
protected:
FlagRow standardFlags;
FlagRow systemFlags;
public:
virtual void activateStandardFlag(const QString &flag);
virtual void deactivateStandardFlag(const QString &flag);
virtual void deactivateAllStandardFlags();
/*! \brief Toggle a Flag
If master is not NULL,, only one Flag from FlagRow master may
be active simultanously, the others get deactivated.
*/
virtual void toggleStandardFlag(const QString &flag, FlagRow *master=NULL);
virtual void toggleSystemFlag (const QString &flag, FlagRow *master=NULL);
virtual bool hasActiveStandardFlag (const QString &flag);
virtual bool hasActiveSystemFlag (const QString &flag);
virtual QStringList activeStandardFlagNames();
virtual FlagRow* getStandardFlagRow ();
virtual QStringList activeSystemFlagNames();
virtual bool canMoveDown();
virtual bool canMoveUp();
protected:
uint id;
QUuid uuid;
public:
virtual uint getID ();
virtual void setUuid (const QString &id);
virtual QUuid getUuid();
// Navigation and selection
virtual TreeItem* getChildNum(const int &n);
virtual BranchItem* getFirstBranch();
virtual BranchItem* getLastBranch();
virtual ImageItem* getFirstImage();
virtual ImageItem* getLastImage();
/*! Get next branch after current branch. Return NULL if there is no
next branch */
virtual BranchItem* getNextBranch(BranchItem* currentBranch);
virtual BranchItem* getBranchNum(const int &n);
virtual BranchObj* getBranchObjNum(const int &n);
virtual ImageItem* getImageNum(const int &n);
virtual FloatImageObj* getImageObjNum(const int &n);
virtual AttributeItem* getAttributeNum(const int &n);
virtual XLinkItem* getXLinkItemNum(const int &n);
virtual XLinkObj* getXLinkObjNum(const int &n);
protected:
bool hideExport; //! Hide this item in export
bool hidden; //! Hidden in export if true
public:
virtual void setHideTmp (HideTmpMode);
virtual bool hasHiddenExportParent ();
virtual void setHideInExport(bool); // set export of object (and children)
virtual bool hideInExport();
virtual bool isHidden ();
virtual void updateVisibility(); //! Sets visibility in LinkableMapObj, if existing
virtual QString getGeneralAttr();
protected:
VymModel *model;
QList<TreeItem*> childItems;
QList<QVariant> itemData;
TreeItem *parentItem;
/*! Set rootItem (does not change, needed for some quick checks
e.g. if some branch is mapCenter and isChildOf */
TreeItem *rootItem;
int branchOffset;
int branchCounter;
int imageOffset;
int imageCounter;
int attributeOffset;
int attributeCounter;
int xlinkOffset;
int xlinkCounter;
};
#endif