]> git.sven.stormbind.net Git - sven/vym.git/blob - xlinkobj.h
3471bb65918c14574ab6893fa51416b3657c2bfd
[sven/vym.git] / xlinkobj.h
1 #ifndef XLINKOBJ_H
2 #define XLINKOBJ_H
3
4 #include <QPen>
5
6 #include "arrowobj.h"
7 #include "linkablemapobj.h"
8 #include "mapobj.h"
9 #include "xlink.h"
10
11 class BranchObj;
12 class BranchItem;
13
14 /*! \brief xlinks are used to draw arbitrary connections between branches (BranchObj) in the map. */
15
16 /////////////////////////////////////////////////////////////////////////////
17 class XLinkObj:public MapObj {
18 public:
19     enum CurrentSelection {Unselected, Path, C0, C1};
20     XLinkObj (QGraphicsItem*, Link* l );
21     virtual ~XLinkObj ();
22     virtual void init ();
23     virtual QPointF getAbsPos();
24     void setStyleBegin(const QString &s);
25     void setStyleBegin(ArrowObj::OrnamentStyle os);
26     ArrowObj::OrnamentStyle getStyleBegin();
27     void setStyleEnd(const QString &s);
28     void setStyleEnd(ArrowObj::OrnamentStyle os);
29     ArrowObj::OrnamentStyle getStyleEnd();
30     QPointF getBeginPos();
31     QPointF getEndPos();
32     virtual void move (QPointF p);
33     virtual void setEnd (QPointF);
34     void setSelection (int cp);
35     void setSelection (CurrentSelection s);
36     void updateXLink();
37     void positionBBox();
38     void calcBBoxSize();
39     void setVisibility (bool);
40     void setVisibility ();
41     void initC0();
42     void setC0 (const QPointF &p);
43     QPointF getC0();
44     void initC1();
45     void setC1 (const QPointF &p);
46     QPointF getC1();
47     bool isInClickBox (const QPointF &p);
48     int ctrlPointInClickBox (const QPointF &p);
49     QPainterPath getClickPath();
50
51 private:
52     enum StateVis {Hidden,OnlyBegin,OnlyEnd,Full,FullShowControls};
53     StateVis stateVis;
54     static int arrowSize;
55     static int clickBorder;
56     static int pointRadius;
57     static int d_control;
58     QPainterPath clickPath;
59     QGraphicsPolygonItem *poly;// Arrowhead, when one end is not visible
60     ArrowObj *pointerBegin;    // Arrowhead 
61     ArrowObj *pointerEnd;      // Arrowhead 
62     QGraphicsPathItem *path;
63     
64     QPointF beginPos;
65     QPointF   endPos;
66     QPointF c0,c1;                  // Controlpoints for Bezier path
67     LinkableMapObj::Orientation beginOrient;
68     LinkableMapObj::Orientation   endOrient;
69     QGraphicsEllipseItem *ctrl_p0;
70     QGraphicsEllipseItem *ctrl_p1;
71
72     CurrentSelection curSelection;
73
74     BranchItem *visBranch;  // the "visible" part of a partially scrolled li
75     Link *link;
76 };
77
78 #endif