insilmaril@86: #include "linkobj.h" insilmaril@86: #include "branchobj.h" insilmaril@86: insilmaril@86: insilmaril@86: ///////////////////////////////////////////////////////////////// insilmaril@86: // LinkObj insilmaril@86: ///////////////////////////////////////////////////////////////// insilmaril@86: insilmaril@86: LinkObj::LinkObj ():MapObj() insilmaril@86: { insilmaril@86: // cout << "Const LinkObj ()\n"; insilmaril@86: init(); insilmaril@86: } insilmaril@86: insilmaril@86: LinkObj::LinkObj (QCanvas* c):MapObj(c) insilmaril@86: { insilmaril@86: // cout << "Const LinkObj (c) called from MapCenterObj (c)\n"; insilmaril@86: init(); insilmaril@86: } insilmaril@86: insilmaril@86: insilmaril@86: LinkObj::~LinkObj () insilmaril@86: { insilmaril@86: // cout << "Destr LinkObj\n"; insilmaril@86: if (linkState!=undefinedLink) insilmaril@86: deactivate(); insilmaril@86: delete (line); insilmaril@86: } insilmaril@86: insilmaril@86: void LinkObj::init () insilmaril@86: { insilmaril@86: beginBranch=NULL; insilmaril@86: endBranch=NULL; insilmaril@86: linkState=undefinedLink; insilmaril@86: insilmaril@86: line=new QCanvasLine (canvas); insilmaril@86: line->setPoints (0,0,200,200); insilmaril@86: line->setPen (QPen(QColor(200,200,200), 1)); insilmaril@86: insilmaril@86: setVisibility (false); insilmaril@86: } insilmaril@86: insilmaril@86: void LinkObj::copy (LinkObj* other) insilmaril@86: { insilmaril@86: // FIXME copy not used yet insilmaril@86: cout << "LO::copy called\n"; insilmaril@86: MapObj::copy (other); insilmaril@86: setVisibility (other->visible); insilmaril@86: beginBranch=other->beginBranch; insilmaril@86: endBranch=other->endBranch; insilmaril@86: } insilmaril@86: insilmaril@86: void LinkObj::setBegin (BranchObj *bo) insilmaril@86: { insilmaril@86: if (bo) insilmaril@86: { insilmaril@86: linkState=initLink; insilmaril@86: beginBranch=bo; insilmaril@86: beginPos=beginBranch->getChildPos(); insilmaril@86: } insilmaril@86: } insilmaril@86: insilmaril@86: void LinkObj::setEnd (BranchObj *bo) insilmaril@86: { insilmaril@86: if (bo) insilmaril@86: { insilmaril@86: linkState=initLink; insilmaril@86: endBranch=bo; insilmaril@86: endPos=endBranch->getChildPos(); insilmaril@86: } insilmaril@86: } insilmaril@86: insilmaril@86: void LinkObj::setEnd (QPoint p) insilmaril@86: { insilmaril@86: endPos=p; insilmaril@86: } insilmaril@86: insilmaril@86: bool LinkObj::activate () insilmaril@86: { insilmaril@86: if (beginBranch && endBranch) insilmaril@86: { insilmaril@86: linkState=activeLink; insilmaril@86: beginBranch->addLink (this); insilmaril@86: endBranch->addLink (this); insilmaril@86: setVisibility (true); insilmaril@86: return true; insilmaril@86: } else insilmaril@86: return false; insilmaril@86: } insilmaril@86: insilmaril@86: void LinkObj::deactivate () insilmaril@86: { insilmaril@86: if (beginBranch) insilmaril@86: beginBranch->removeLink (this); insilmaril@86: beginBranch=NULL; insilmaril@86: if (endBranch) insilmaril@86: endBranch->removeLink (this); insilmaril@86: endBranch=NULL; insilmaril@86: linkState=undefinedLink; insilmaril@86: insilmaril@86: line->hide(); insilmaril@86: } insilmaril@86: insilmaril@86: bool LinkObj::isUsed() insilmaril@86: { insilmaril@86: if (beginBranch || endBranch || linkState!=undefinedLink) insilmaril@86: return true; insilmaril@86: else insilmaril@86: return false; insilmaril@86: } insilmaril@86: insilmaril@86: void LinkObj::updateLink() insilmaril@86: { insilmaril@86: QPoint a,b; insilmaril@86: if (beginBranch) insilmaril@86: // If a link is just drawed in the editor, insilmaril@86: // we have already a beginBranch insilmaril@86: a=beginBranch->getChildPos(); insilmaril@86: else insilmaril@86: // This shouldn't be reached normally... insilmaril@86: a=beginPos; insilmaril@86: if (linkState==activeLink && endBranch) insilmaril@86: b=endBranch->getChildPos(); insilmaril@86: else insilmaril@86: b=endPos; insilmaril@86: insilmaril@86: if (line->startPoint()==a && line->endPoint()==b) insilmaril@86: // update is called from both branches, so only insilmaril@86: // update if needed insilmaril@86: return; insilmaril@86: else insilmaril@86: { insilmaril@86: beginPos=a; insilmaril@86: endPos=b; insilmaril@86: line->setPoints (a.x(), a.y(), b.x(), b.y()); insilmaril@86: } insilmaril@86: } insilmaril@86: insilmaril@86: void LinkObj::positionBBox() insilmaril@86: { insilmaril@86: } insilmaril@86: insilmaril@86: void LinkObj::calcBBoxSize() insilmaril@86: { insilmaril@86: } insilmaril@86: insilmaril@86: void LinkObj::setVisibility (bool b) insilmaril@86: { insilmaril@86: MapObj::setVisibility (b); insilmaril@86: if (b) insilmaril@86: { insilmaril@86: line->show(); insilmaril@86: } insilmaril@86: else insilmaril@86: { insilmaril@86: line->hide(); insilmaril@86: } insilmaril@86: } insilmaril@86: