]> git.sven.stormbind.net Git - sven/vym.git/blobdiff - src/xlinkobj.h
New upstream version 2.9.22
[sven/vym.git] / src / xlinkobj.h
diff --git a/src/xlinkobj.h b/src/xlinkobj.h
new file mode 100644 (file)
index 0000000..24fc632
--- /dev/null
@@ -0,0 +1,80 @@
+#ifndef XLINKOBJ_H
+#define XLINKOBJ_H
+
+#include <QPen>
+
+#include "arrowobj.h"
+#include "linkablemapobj.h"
+#include "mapobj.h"
+#include "xlink.h"
+
+class BranchObj;
+class BranchItem;
+
+/*! \brief xlinks are used to draw arbitrary connections between branches
+ * (BranchObj) in the map. */
+
+/////////////////////////////////////////////////////////////////////////////
+class XLinkObj : public MapObj {
+  public:
+    enum CurrentSelection { Unselected, Path, C0, C1 };
+    XLinkObj(QGraphicsItem *, Link *l);
+    virtual ~XLinkObj();
+    virtual void init();
+    virtual QPointF getAbsPos();
+    void setStyleBegin(const QString &s);
+    void setStyleBegin(ArrowObj::OrnamentStyle os);
+    ArrowObj::OrnamentStyle getStyleBegin();
+    void setStyleEnd(const QString &s);
+    void setStyleEnd(ArrowObj::OrnamentStyle os);
+    ArrowObj::OrnamentStyle getStyleEnd();
+    QPointF getBeginPos();
+    QPointF getEndPos();
+    virtual void move(QPointF p);
+    virtual void setEnd(QPointF);
+    void setSelection(int cp);
+    void setSelection(CurrentSelection s);
+    void updateXLink();
+    void positionBBox();
+    void calcBBoxSize();
+    void setVisibility(bool);
+    void setVisibility();
+    void initC0();
+    void setC0(const QPointF &p);
+    QPointF getC0();
+    void initC1();
+    void setC1(const QPointF &p);
+    QPointF getC1();
+    bool isInClickBox(const QPointF &p);
+    int ctrlPointInClickBox(const QPointF &p);
+    QPainterPath getClickPath();
+    QPainterPath getSelectionPath();
+
+  private:
+    enum StateVis { Hidden, OnlyBegin, OnlyEnd, Full, FullShowControls };
+    StateVis stateVis;
+    static int arrowSize;
+    static int clickBorder;
+    static int pointRadius;
+    static int d_control;
+    QPainterPath clickPath;
+    QGraphicsPolygonItem *poly; // Arrowhead, when one end is not visible
+    ArrowObj *pointerBegin;     // Arrowhead
+    ArrowObj *pointerEnd;       // Arrowhead
+    QGraphicsPathItem *path;
+
+    QPointF beginPos;
+    QPointF endPos;
+    QPointF c0, c1; // Controlpoints for Bezier path
+    LinkableMapObj::Orientation beginOrient;
+    LinkableMapObj::Orientation endOrient;
+    QGraphicsEllipseItem *ctrl_p0;
+    QGraphicsEllipseItem *ctrl_p1;
+
+    CurrentSelection curSelection;
+
+    BranchItem *visBranch; // the "visible" part of a partially scrolled li
+    Link *link;
+};
+
+#endif