insilmaril@0: #ifndef BRANCHOBJ_H insilmaril@0: #define BRANCHOBJ_H insilmaril@0: insilmaril@0: #include "floatimageobj.h" insilmaril@0: #include "linkablemapobj.h" insilmaril@0: #include "ornamentedobj.h" insilmaril@41: #include "xlinkobj.h" insilmaril@0: insilmaril@41: insilmaril@41: bool isAbove(BranchObj*,BranchObj*); insilmaril@41: insilmaril@41: /*! \brief A branch visible in the map */ insilmaril@41: insilmaril@41: /*! If HideExport is used, this branch and its childs will be hidden in export */ insilmaril@41: enum HideTmpMode {HideNone, HideExport}; insilmaril@41: insilmaril@0: insilmaril@0: ///////////////////////////////////////////////////////////////////////////// insilmaril@0: class BranchObj:public OrnamentedObj { insilmaril@0: public: insilmaril@41: /*! New branches will get use same color for heading as parent */ insilmaril@41: enum BranchModification {NewBranch, MovedBranch}; insilmaril@41: insilmaril@41: insilmaril@0: BranchObj (); insilmaril@41: BranchObj (QGraphicsScene*); insilmaril@41: BranchObj (QGraphicsScene*, LinkableMapObj* parent); insilmaril@0: ~BranchObj (); insilmaril@0: bool operator< ( const BranchObj & ); insilmaril@0: bool operator== ( const BranchObj & ); insilmaril@0: virtual void init (); insilmaril@0: virtual void copy (BranchObj*); insilmaril@0: void clear(); insilmaril@0: virtual int getNum(); // return number of this in parent insilmaril@0: virtual int getNum(BranchObj*); // return number of this in parent insilmaril@0: virtual int getFloatImageNum(FloatImageObj*); insilmaril@0: virtual int countBranches(); insilmaril@0: virtual int countFloatImages(); insilmaril@41: virtual int countXLinks(); insilmaril@41: virtual void setParObjTmp (LinkableMapObj*,QPointF,int);// Only for moving Obj around insilmaril@0: virtual void unsetParObjTmp(); // reuse original ParObj insilmaril@0: insilmaril@0: virtual void unScroll(); insilmaril@0: virtual void toggleScroll(); // scroll or unscroll insilmaril@0: virtual bool isScrolled(); // returns scroll state insilmaril@0: virtual bool hasScrolledParent(BranchObj*); // true, if any of the parents is scrolled insilmaril@0: virtual void tmpUnscroll(); // unscroll scrolled parents temporary e.g. during "find" process insilmaril@0: virtual void resetTmpUnscroll(); // scroll all tmp scrolled parents again e.g. when unselecting insilmaril@0: insilmaril@0: virtual void setVisibility(bool,int); // set visibility insilmaril@0: virtual void setVisibility(bool); // set vis. for w insilmaril@0: virtual void setLinkColor(); // set the color of link insilmaril@41: virtual void setColorSubtree(QColor); // set the color of heading insilmaril@0: insilmaril@0: BranchObj* first (); // set Iterator to first LMO insilmaril@0: BranchObj* next (); // find next LMO after given one insilmaril@0: BranchObj* getLastIterator(); // to interrupt and resume next iteration insilmaril@0: void setLastIterator (BranchObj*); // needed by next() insilmaril@0: insilmaril@41: virtual void positionContents(); insilmaril@0: virtual void move (double x,double y); insilmaril@41: virtual void move (QPointF); insilmaril@0: virtual void moveBy (double x,double y); insilmaril@41: virtual void moveBy (QPointF); insilmaril@0: virtual void positionBBox(); insilmaril@0: virtual void calcBBoxSize(); insilmaril@41: virtual void setDockPos(); insilmaril@41: virtual LinkableMapObj* findMapObj(QPointF,LinkableMapObj*); // find MapObj insilmaril@41: virtual LinkableMapObj* findID (QString sid); // find Obj by ID string insilmaril@0: virtual void setHeading (QString); insilmaril@41: insilmaril@41: virtual void setHideTmp (HideTmpMode); insilmaril@41: virtual bool hasHiddenExportParent (); insilmaril@41: insilmaril@41: virtual QString saveToDir (const QString&,const QString&, const QPointF&);// Save data recursivly to tempdir insilmaril@41: virtual void addXLink (XLinkObj*); insilmaril@41: virtual void removeXLinkRef (XLinkObj*);// Remove ref in list insilmaril@41: virtual void deleteXLink (XLinkObj*); // remove references and delete XLinkObj insilmaril@41: virtual void deleteXLinkAt (int); // remove references and delete XLinkObj insilmaril@41: virtual XLinkObj* XLinkAt (int); // return reference of XLinkObj insilmaril@41: virtual int countXLink (); insilmaril@41: virtual BranchObj* XLinkTargetAt (int); insilmaril@41: void setIncludeImagesVer(bool); insilmaril@41: bool getIncludeImagesVer(); insilmaril@41: void setIncludeImagesHor(bool); insilmaril@41: bool getIncludeImagesHor(); insilmaril@41: QString getIncludeImageAttr(); insilmaril@41: virtual FloatImageObj* addFloatImage(); insilmaril@41: virtual FloatImageObj* addFloatImage(FloatImageObj*); insilmaril@0: virtual void removeFloatImage(FloatImageObj*); insilmaril@0: virtual FloatImageObj* getFirstFloatImage(); insilmaril@0: virtual FloatImageObj* getLastFloatImage(); insilmaril@0: virtual FloatImageObj* getFloatImageNum(const uint &); insilmaril@0: protected: insilmaril@41: virtual void savePosInAngle(); // write pos in angle for resorting insilmaril@41: virtual void setDefAttr (BranchModification); // set default attributes (font, size, ...) insilmaril@0: public: insilmaril@0: virtual BranchObj* addBranch(); insilmaril@0: virtual BranchObj* addBranch(BranchObj*); // makes deep copy of BranchObj insilmaril@41: virtual BranchObj* addBranchPtr(BranchObj*); // just adds pointer insilmaril@0: virtual BranchObj* insertBranch(int); insilmaril@0: virtual BranchObj* insertBranch(BranchObj*,int); insilmaril@41: virtual BranchObj* insertBranchPtr (BranchObj*,int); insilmaril@41: virtual void removeBranchHere(BranchObj*); insilmaril@41: virtual void removeChilds(); insilmaril@0: virtual void removeBranch(BranchObj*); insilmaril@41: virtual void removeBranchPtr (BranchObj*); insilmaril@0: virtual void setLastSelectedBranch(BranchObj*); insilmaril@0: virtual BranchObj* getLastSelectedBranch(); insilmaril@0: virtual BranchObj* getFirstBranch(); insilmaril@0: virtual BranchObj* getLastBranch(); insilmaril@41: virtual BranchObj* getBranchNum(int); insilmaril@41: virtual bool canMoveBranchUp(); insilmaril@0: virtual BranchObj* moveBranchUp(BranchObj*); insilmaril@41: virtual bool canMoveBranchDown(); insilmaril@0: virtual BranchObj* moveBranchDown(BranchObj*); insilmaril@41: virtual void sortChildren(); insilmaril@41: virtual BranchObj* linkTo (BranchObj*, int); insilmaril@41: virtual void alignRelativeTo(const QPointF ref, bool alignSelf=false ); insilmaril@41: virtual void reposition(); insilmaril@41: virtual void unsetAllRepositionRequests(); insilmaril@0: insilmaril@41: virtual QPolygonF shape(); //!< Returns arbitrary bounding polygon insilmaril@41: virtual QRectF getTotalBBox(); // return BBox including childs insilmaril@41: virtual QRectF getBBoxSizeWithChilds(); // return size of BBox including childs insilmaril@0: virtual void calcBBoxSizeWithChilds(); // calc size of BBox including childs recursivly insilmaril@0: insilmaril@0: virtual void select(); insilmaril@0: virtual void unselect(); insilmaril@0: virtual QString getSelectString(); insilmaril@41: virtual void setAnimation(const AnimPoint &ap); insilmaril@41: virtual bool animate(); insilmaril@0: insilmaril@0: protected: insilmaril@0: static BranchObj* itLast; // iterator for first(), next() insilmaril@41: static BranchObj* itFirst; // first iterator for first(), next() insilmaril@41: QList branch; // all child branches insilmaril@41: QList floatimage;// child images insilmaril@41: QList xlink; // xlinks to other branches insilmaril@41: insilmaril@41: AnimPoint anim; insilmaril@41: insilmaril@0: public: insilmaril@0: float angle; // used in mainbranch to reorder mainbranches insilmaril@0: protected: insilmaril@0: int lastSelectedBranch; // for going deeper into tree insilmaril@0: bool scrolled; // true if all childs are scrolled and thus invisible insilmaril@0: bool tmpUnscrolled; // can only be true (temporary) for a scrolled subtree insilmaril@41: bool includeImagesVer; // include floatimages in bbox vertically insilmaril@41: bool includeImagesHor; // include floatimages in bbox horizontally insilmaril@41: insilmaril@0: }; insilmaril@0: insilmaril@0: insilmaril@0: #endif insilmaril@0: