#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

