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