+#ifndef LINK_H
+#define LINK_H
+
+#include <QColor>
+#include <QPen>
+
+#include "xmlobj.h"
+
+class QPointF;
+class QGraphicsScene;
+class QString;
+
+class BranchItem;
+class MapObj;
+class LinkableMapObj;
+class VymModel;
+class XLinkItem;
+class XLinkObj;
+
+class Link : public XMLObj {
+ public:
+ enum XLinkState { undefinedXLink, initXLink, activeXLink, deleteXLink };
+ enum LinkType { Linear, Bezier };
+
+ Link(VymModel *m);
+ virtual ~Link();
+ virtual void init();
+ VymModel *getModel();
+ void setBeginBranch(BranchItem *);
+ BranchItem *getBeginBranch();
+ void setEndBranch(BranchItem *);
+ void setEndPoint(QPointF);
+ BranchItem *getEndBranch();
+ void setBeginLinkItem(XLinkItem *);
+ XLinkItem *getBeginLinkItem();
+ void setEndLinkItem(XLinkItem *);
+ XLinkItem *getEndLinkItem();
+ XLinkItem *getOtherEnd(XLinkItem *);
+ void setPen(const QPen &p);
+ QPen getPen();
+ void setLinkType(const QString &s);
+ void setStyleBegin(const QString &s);
+ QString getStyleBeginString();
+ void setStyleEnd(const QString &s);
+ QString getStyleEndString();
+ bool activate();
+ void deactivate();
+ XLinkState getState();
+ void removeXLinkItem(XLinkItem *xli);
+ void updateLink();
+ QString saveToDir();
+ XLinkObj *getXLinkObj();
+ XLinkObj *createMapObj();
+ MapObj *getMO();
+
+ private:
+ XLinkState xLinkState; // init during drawing or active
+ LinkType type;
+ QPen pen;
+
+ XLinkObj *xlo;
+ VymModel *model;
+
+ BranchItem *beginBranch;
+ BranchItem *endBranch;
+ XLinkItem *beginLinkItem;
+ XLinkItem *endLinkItem;
+};
+
+#endif