#ifndef TREEITEM_H #define TREEITEM_H #include #include #include #include #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 &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 childItems; QList 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