insilmaril@725: #ifndef TREEITEM_H insilmaril@725: #define TREEITEM_H insilmaril@725: insilmaril@758: #include insilmaril@725: #include insilmaril@725: #include insilmaril@725: insilmaril@746: #include "noteobj.h" insilmaril@746: #include "xmlobj.h" insilmaril@746: insilmaril@726: class LinkableMapObj; insilmaril@750: class BranchObj; insilmaril@750: class BranchItem; insilmaril@753: insilmaril@753: insilmaril@746: class VymModel; insilmaril@726: insilmaril@746: class TreeItem:public XMLObj insilmaril@725: { insilmaril@725: public: insilmaril@735: enum Type {Undefined,MapCenter,Branch,Image}; insilmaril@753: enum HideTmpMode {HideNone, HideExport}; insilmaril@753: insilmaril@725: TreeItem(const QList &data, TreeItem *parent = 0); insilmaril@725: ~TreeItem(); insilmaril@756: void init(); insilmaril@756: insilmaril@746: QString saveToDir (const QString &tmpdir,const QString &prefix, const QPointF& offset); insilmaril@746: insilmaril@725: insilmaril@727: // General housekeeping insilmaril@746: void setModel (VymModel *m); insilmaril@746: VymModel* getModel(); insilmaril@746: insilmaril@727: void appendChild (TreeItem *child); insilmaril@727: void removeChild (int row); insilmaril@725: insilmaril@725: TreeItem *child(int row); insilmaril@725: int childCount() const; insilmaril@745: int childNumber() const; insilmaril@725: int columnCount() const; insilmaril@741: int branchCount() const; insilmaril@749: int imageCount() const; insilmaril@749: int xlinkCount() const; insilmaril@727: insilmaril@727: int row() const; insilmaril@727: int column() const; insilmaril@740: int depth() ; insilmaril@727: TreeItem *parent(); insilmaril@749: insilmaril@749: /*! Return number of item in parent by type, insilmaril@749: e.g. first branch has number 0 */ insilmaril@758: virtual int childNum(); //! Return number of item in list of all children insilmaril@758: virtual int num(); //! Return number of item by type insilmaril@758: virtual int num (TreeItem *item); //! Return number of item by type insilmaril@727: insilmaril@727: // Accessing data insilmaril@758: virtual QVariant data(int column) const; insilmaril@758: insilmaril@758: protected: insilmaril@758: QColor headingColor; insilmaril@758: public: insilmaril@758: virtual void setHeading (const QString s); insilmaril@758: virtual QString getHeading() const; insilmaril@758: virtual std::string getHeadingStd() const; //! convenience function used for debugging insilmaril@758: virtual void setHeadingColor(QColor color); //! Set color of heading. In BranchItem overloaded to update QGraphicsView insilmaril@758: virtual QColor getHeadingColor(); //! Returns color of heading insilmaril@746: insilmaril@746: protected: insilmaril@746: NoteObj note; insilmaril@746: public: insilmaril@758: virtual void setNote(const QString s); insilmaril@758: virtual QString getNote(); insilmaril@746: virtual void setNoteObj(const NoteObj &, bool updateNoteEditor=true); insilmaril@746: virtual NoteObj getNoteObj(); insilmaril@746: virtual QString getNoteASCII(const QString &indent, const int &width); // returns note (ASCII) insilmaril@746: virtual QString getNoteASCII(); // returns note (ASCII) insilmaril@746: virtual QString getNoteOpenDoc(); // returns note (OpenDoc) insilmaril@746: insilmaril@746: insilmaril@746: protected: insilmaril@746: Type type; insilmaril@746: public: insilmaril@758: virtual void setType (const Type t); insilmaril@758: virtual Type getType (); insilmaril@758: virtual bool isBranchLikeType() const; insilmaril@758: virtual QString getTypeName (); insilmaril@738: insilmaril@754: protected: insilmaril@754: QString objID; //! id set during load/save currently used for xLinks insilmaril@754: public: insilmaril@754: virtual void setID (const QString &s); insilmaril@754: virtual QString getID (); insilmaril@754: insilmaril@738: // Navigation and selection insilmaril@758: virtual TreeItem* getChildNum(const int &n); insilmaril@758: virtual BranchItem* getFirstBranch(); insilmaril@758: virtual BranchItem* getLastBranch(); insilmaril@758: virtual BranchItem* getBranchNum(const int &n); insilmaril@758: virtual BranchObj* getBranchObjNum(const int &n); insilmaril@758: virtual void setLastSelectedBranch(); //! Set myself as last selected in parent insilmaril@758: virtual void setLastSelectedBranch(int i); //! Set last selected branch directly insilmaril@758: virtual TreeItem* getLastSelectedBranch(); insilmaril@758: virtual TreeItem* findBySelectString (const QString &); insilmaril@738: insilmaril@753: virtual void setHideTmp (HideTmpMode); insilmaril@753: virtual bool hasHiddenExportParent (); insilmaril@753: virtual void setHideInExport(bool); // set export of object (and children) insilmaril@753: virtual bool hideInExport(); insilmaril@753: virtual bool isHidden (); insilmaril@753: insilmaril@726: insilmaril@758: // Relation to map objects in graphicsscene // FIXME-4 should be obsolete insilmaril@758: virtual LinkableMapObj* getLMO(); insilmaril@758: virtual void setLMO (LinkableMapObj*); insilmaril@726: insilmaril@741: protected: insilmaril@746: VymModel *model; insilmaril@746: insilmaril@725: QList childItems; insilmaril@725: QList itemData; insilmaril@725: TreeItem *parentItem; insilmaril@726: insilmaril@726: LinkableMapObj *lmo; insilmaril@738: insilmaril@738: int branchOffset; insilmaril@741: int branchCounter; insilmaril@738: int lastSelectedBranchNum; insilmaril@746: insilmaril@753: bool hideExport;//! Hide this item in export insilmaril@746: bool hidden; //! Hidden in export if true insilmaril@725: }; insilmaril@725: insilmaril@725: #endif