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@95: #include "xlinkobj.h" insilmaril@390: insilmaril@0: insilmaril@462: bool isAbove(BranchObj*,BranchObj*); insilmaril@146: insilmaril@462: /*! \brief A branch visible in the map */ insilmaril@411: insilmaril@628: /*! If HideExport is used, this branch and its childs will be hidden in export */ insilmaril@628: enum HideTmpMode {HideNone, HideExport}; insilmaril@628: insilmaril@628: insilmaril@0: ///////////////////////////////////////////////////////////////////////////// insilmaril@0: class BranchObj:public OrnamentedObj { insilmaril@0: public: insilmaril@462: /*! New branches will get use same color for heading as parent */ insilmaril@462: enum BranchModification {NewBranch, MovedBranch}; insilmaril@462: insilmaril@462: insilmaril@0: BranchObj (); insilmaril@408: BranchObj (QGraphicsScene*); insilmaril@408: 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@95: virtual int countXLinks(); insilmaril@408: 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@417: 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@334: virtual void positionContents(); insilmaril@0: virtual void move (double x,double y); insilmaril@408: virtual void move (QPointF); insilmaril@0: virtual void moveBy (double x,double y); insilmaril@408: virtual void moveBy (QPointF); insilmaril@0: virtual void positionBBox(); insilmaril@0: virtual void calcBBoxSize(); insilmaril@223: virtual void setDockPos(); insilmaril@408: virtual LinkableMapObj* findMapObj(QPointF,LinkableMapObj*); // find MapObj insilmaril@529: virtual LinkableMapObj* findID (QString sid); // find Obj by ID string insilmaril@0: virtual void setHeading (QString); insilmaril@254: insilmaril@254: virtual void setHideTmp (HideTmpMode); insilmaril@598: virtual bool hasHiddenExportParent (); insilmaril@254: insilmaril@408: virtual QString saveToDir (const QString&,const QString&, const QPointF&);// Save data recursivly to tempdir insilmaril@95: virtual void addXLink (XLinkObj*); insilmaril@146: virtual void removeXLinkRef (XLinkObj*);// Remove ref in list insilmaril@146: virtual void deleteXLink (XLinkObj*); // remove references and delete XLinkObj insilmaril@95: virtual void deleteXLinkAt (int); // remove references and delete XLinkObj insilmaril@97: virtual XLinkObj* XLinkAt (int); // return reference of XLinkObj insilmaril@95: virtual int countXLink (); insilmaril@95: virtual BranchObj* XLinkTargetAt (int); insilmaril@169: void setIncludeImagesVer(bool); insilmaril@169: bool getIncludeImagesVer(); insilmaril@169: void setIncludeImagesHor(bool); insilmaril@169: bool getIncludeImagesHor(); insilmaril@169: QString getIncludeImageAttr(); insilmaril@395: virtual FloatImageObj* addFloatImage(); insilmaril@395: 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@146: virtual void savePosInAngle(); // write pos in angle for resorting insilmaril@146: 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@83: virtual BranchObj* addBranchPtr(BranchObj*); // just adds pointer insilmaril@0: virtual BranchObj* insertBranch(int); insilmaril@0: virtual BranchObj* insertBranch(BranchObj*,int); insilmaril@83: virtual BranchObj* insertBranchPtr (BranchObj*,int); insilmaril@98: virtual void removeBranchHere(BranchObj*); insilmaril@98: virtual void removeChilds(); insilmaril@0: virtual void removeBranch(BranchObj*); insilmaril@83: 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@406: virtual BranchObj* getBranchNum(int); insilmaril@310: virtual bool canMoveBranchUp(); insilmaril@0: virtual BranchObj* moveBranchUp(BranchObj*); insilmaril@310: virtual bool canMoveBranchDown(); insilmaril@0: virtual BranchObj* moveBranchDown(BranchObj*); insilmaril@604: virtual void sortChildren(); insilmaril@421: virtual BranchObj* linkTo (BranchObj*, int); insilmaril@408: virtual void alignRelativeTo(const QPointF ); insilmaril@0: virtual void reposition(); insilmaril@382: virtual void unsetAllRepositionRequests(); insilmaril@0: insilmaril@661: virtual QPolygonF shape(); //!< Returns arbitrary bounding polygon insilmaril@408: virtual QRectF getTotalBBox(); // return BBox including childs insilmaril@408: 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@688: virtual void setAnimation(const AnimPoint &ap); insilmaril@688: virtual bool animate(); insilmaril@0: insilmaril@0: protected: insilmaril@0: static BranchObj* itLast; // iterator for first(), next() insilmaril@364: static BranchObj* itFirst; // first iterator for first(), next() insilmaril@406: QList branch; // all child branches insilmaril@404: QList floatimage;// child images insilmaril@406: QList xlink; // xlinks to other branches insilmaril@688: insilmaril@688: AnimPoint anim; insilmaril@688: 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@169: bool includeImagesVer; // include floatimages in bbox vertically insilmaril@169: bool includeImagesHor; // include floatimages in bbox horizontally insilmaril@169: insilmaril@0: }; insilmaril@0: insilmaril@0: insilmaril@0: #endif insilmaril@0: