insilmaril@0: #ifndef LINKABLEMAPOBJ_H insilmaril@0: #define LINKABLEMAPOBJ_H insilmaril@0: insilmaril@0: #include "frameobj.h" insilmaril@0: #include "noteobj.h" insilmaril@0: #include "headingobj.h" insilmaril@0: #include "flagrowobj.h" insilmaril@0: insilmaril@0: #define MAX_DEPTH 999 insilmaril@0: insilmaril@0: enum LinkOrient {OrientUndef,OrientLeftOfCenter, OrientRightOfCenter}; insilmaril@0: enum LinkStyle { insilmaril@0: StyleUndef, insilmaril@0: StyleLine, insilmaril@0: StyleParabel, insilmaril@0: StylePolyLine, insilmaril@0: StylePolyParabel insilmaril@0: }; insilmaril@0: enum LinkPos {LinkMiddle,LinkBottom}; insilmaril@0: enum LinkColorHint {DefaultColor,HeadingColor}; insilmaril@0: insilmaril@0: class LinkableMapObj:public QObject, public MapObj { insilmaril@0: Q_OBJECT insilmaril@0: public: insilmaril@0: LinkableMapObj (); insilmaril@0: LinkableMapObj (QCanvas*); insilmaril@0: LinkableMapObj (LinkableMapObj*); insilmaril@0: ~LinkableMapObj (); insilmaril@0: virtual void delLink(); insilmaril@0: virtual void init (); insilmaril@0: virtual void copy (LinkableMapObj*); insilmaril@0: void setChildObj (LinkableMapObj*); insilmaril@0: virtual void setParObj (LinkableMapObj*); insilmaril@0: virtual void setParObjTmp (LinkableMapObj*,QPoint,int); // Only for moving Obj around insilmaril@0: virtual void unsetParObjTmp(); // reuse original ParObj insilmaril@164: virtual bool hasParObjTmp(); insilmaril@0: LinkStyle getDefLinkStyle(); insilmaril@0: void setLinkStyle(LinkStyle); insilmaril@0: LinkStyle getLinkStyle(); insilmaril@160: void setHideLinkUnselected(bool); insilmaril@160: bool getHideLinkUnselected(); insilmaril@0: void setLinkPos (LinkPos); insilmaril@0: LinkPos getLinkPos (); insilmaril@0: insilmaril@0: virtual void setLinkColor(); // sets color according to colorhint, overloaded insilmaril@0: virtual void setLinkColor(QColor); insilmaril@0: QColor getLinkColor(); insilmaril@0: virtual FrameType getFrameType (); insilmaril@0: virtual void setFrameType (const FrameType &); insilmaril@0: virtual void setFrameType (const QString &); insilmaril@0: virtual void setVisibility (bool); insilmaril@0: virtual void updateLink(); // update parPos and childPos insilmaril@0: // depending on pos insilmaril@0: // redraw link with given style insilmaril@0: LinkableMapObj* getChildObj(); // returns pointer to fromObj insilmaril@0: LinkableMapObj* getParObj(); // returns pointer to toObj insilmaril@106: virtual LinkableMapObj* findObjBySelect(QString s); // find obj by selectstring insilmaril@0: QPoint getChildPos(); // returns pos where childs dock insilmaril@0: QPoint getParPos(); // returns pos where parents dock insilmaril@0: QPoint getRelPos(); // get position relative to parent (or (0,0)) insilmaril@0: LinkOrient getOrientation(); // get orientation insilmaril@0: virtual int getDepth(); // return depth insilmaril@0: virtual void setMapEditor(MapEditor*); // set MapEditor (needed in LMO::updateNoteFlag) insilmaril@0: virtual MapEditor* getMapEditor(); // get MapEditor (usually from parent); insilmaril@0: virtual QPoint getRandPos(); // make randomised position insilmaril@0: insilmaril@0: virtual void alignRelativeTo(const QPoint ); insilmaril@0: virtual void reposition(); insilmaril@0: virtual void requestReposition(); // do reposition after next user event insilmaril@0: virtual void forceReposition(); // to force a reposition now (outside insilmaril@0: // of mapeditor e.g. in noteeditor insilmaril@0: virtual bool repositionRequested(); insilmaril@0: insilmaril@0: virtual QRect getTotalBBox()=0; // return BBox including childs insilmaril@0: virtual QRect getBBoxSizeWithChilds()=0;// return size of BBox including childs insilmaril@0: virtual void calcBBoxSizeWithChilds()=0;// calc size of BBox including childs recursivly insilmaril@0: insilmaril@0: virtual void setSelBox(); insilmaril@0: virtual void select(); insilmaril@0: virtual void unselect(); insilmaril@0: virtual QString getSelectString()=0; insilmaril@166: virtual QString saveToDir (const QString&,const QString&, const QPoint&)=0;// Save data to tempdir insilmaril@0: insilmaril@0: protected: insilmaril@0: void parabel(QPointArray &,double,double,double,double); // Create Parabel connecting two points insilmaril@160: QString getLinkAttr(); insilmaril@160: insilmaril@0: QPoint childPos; insilmaril@0: QPoint parPos; insilmaril@0: bool link2ParPos; // While moving around, sometimes link to parent insilmaril@0: MapEditor* mapEditor; // for updateNoteFlag() and toggleScroll() insilmaril@0: LinkOrient orientation; insilmaril@0: int linkwidth; // width of a link insilmaril@0: int depth; // depth: undef=-1 mapCenter=0 branch=1..n insilmaril@0: QRect bboxTotal; // bounding box including childs insilmaril@0: insilmaril@0: LinkableMapObj* childObj; insilmaril@0: LinkableMapObj* parObj; insilmaril@0: LinkableMapObj* parObjTmpBuf; // temporary buffer the original parent insilmaril@0: int offset; // vertical offset of dockpos to pos insilmaril@0: insilmaril@0: int thickness_start; // for StylePoly* insilmaril@160: LinkStyle style; // Current style insilmaril@0: LinkPos linkpos; insilmaril@0: QColor linkcolor; // Link color insilmaril@0: QCanvasLine* l; // line style insilmaril@0: QCanvasPolygon* p; // poly styles insilmaril@0: int arcsegs; // arc: number of segments insilmaril@0: QPtrList segment; // a part of e.g. the parabel insilmaril@0: QPointArray pa0; // For drawing of PolyParabel and PolyLine insilmaril@0: QPointArray pa1; // For drawing of PolyParabel insilmaril@0: QPointArray pa2; // For drawing of PolyParabel insilmaril@0: QCanvasLine* bottomline; // on bottom of BBox insilmaril@0: bool repositionRequest; // insilmaril@0: insilmaril@0: bool selected; // Used for marking the selection insilmaril@160: bool hideLinkUnselected; // to hide links if unselected insilmaril@0: QCanvasRectangle* selbox; insilmaril@0: FrameObj *frame; // frame around object insilmaril@0: }; insilmaril@0: #endif