#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();
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