diff -r 5db8dfd30ea2 -r c2a05fa925a1 linkablemapobj.cpp --- a/linkablemapobj.cpp Thu Nov 23 16:18:26 2006 +0000 +++ b/linkablemapobj.cpp Fri Dec 08 20:18:56 2006 +0000 @@ -4,10 +4,6 @@ #include "branchobj.h" #include "mapeditor.h" -//Added by qt3to4: -#include - - ///////////////////////////////////////////////////////////////// // LinkableMapObj ///////////////////////////////////////////////////////////////// @@ -18,13 +14,13 @@ init (); } -LinkableMapObj::LinkableMapObj(Q3Canvas* c) :MapObj(c) +LinkableMapObj::LinkableMapObj(QGraphicsScene* s) :MapObj(s) { -// cout << "Const LinkableMapObj\n"; +// cout << "Const LinkableMapObj (s)\n"; init (); } -LinkableMapObj::LinkableMapObj (LinkableMapObj* lmo) : MapObj (lmo->canvas) +LinkableMapObj::LinkableMapObj (LinkableMapObj* lmo) : MapObj (lmo->scene) { copy (lmo); } @@ -49,11 +45,9 @@ break; case StylePolyLine: delete (p); - delete (l); break; case StylePolyParabel: delete (p); - while (!segment.isEmpty()) delete segment.takeFirst(); break; default: break; @@ -67,8 +61,8 @@ childObj=NULL; parObj=NULL; parObjTmpBuf=NULL; - parPos=QPoint(0,0); - childPos=QPoint(0,0); + parPos=QPointF(0,0); + childPos=QPointF(0,0); link2ParPos=false; l=NULL; orientation=OrientUndef; @@ -77,18 +71,18 @@ style=StyleUndef; linkpos=LinkBottom; arcsegs=13; - Q3PointArray pa(arcsegs*2+2); - bottomline=new Q3CanvasLine(canvas); - bottomline->setPen( QPen(linkcolor, 1) ); - bottomline->setZ(Z_LINK); +// FIXME instead of linkcolor pen.color() could be used + pen.setWidth (1); + pen.setColor (linkcolor); + pen.setCapStyle ( Qt::RoundCap ); + bottomline=scene->addLine(QLineF(1,1,1,1),pen); + bottomline->setZValue(Z_LINK); bottomline->show(); // Prepare showing the selection of a MapObj - selbox = new Q3CanvasRectangle (canvas); - selbox->setZ(Z_SELBOX); - selbox->setBrush( QColor(255,255,0) ); - selbox->setPen( QPen(QColor(255,255,0) )); + selbox = scene->addRect(QRectF(0,0,0,0), QPen(QColor(255,255,0) ), QColor(255,255,0)); + selbox->setZValue(Z_SELBOX); selbox->hide(); selected=false; @@ -97,12 +91,12 @@ topPad=botPad=leftPad=rightPad=0; // initialize frame - frame = new FrameObj (canvas); + frame = new FrameObj (scene); repositionRequest=false; // Rel Positions - relPos=QPoint(0,0); + relPos=QPointF(0,0); useRelPos=false; useOrientation=true; } @@ -129,7 +123,7 @@ mapEditor=parObj->getMapEditor(); } -void LinkableMapObj::setParObjTmp(LinkableMapObj*,QPoint,int) +void LinkableMapObj::setParObjTmp(LinkableMapObj*,QPointF,int) { } @@ -161,7 +155,7 @@ } } -void LinkableMapObj::setRelPos(const QPoint &p) +void LinkableMapObj::setRelPos(const QPointF &p) { relPos=p; if (parObj) @@ -174,23 +168,23 @@ } } -QPoint LinkableMapObj::getRelPos() +QPointF LinkableMapObj::getRelPos() { - if (!parObj) return QPoint(); + if (!parObj) return QPointF(); return relPos; } -int LinkableMapObj::getTopPad() +qreal LinkableMapObj::getTopPad() { return topPad; } -int LinkableMapObj::getLeftPad() +qreal LinkableMapObj::getLeftPad() { return leftPad; } -int LinkableMapObj::getRightPad() +qreal LinkableMapObj::getRightPad() { return rightPad; } @@ -234,29 +228,25 @@ if (childObj!=NULL && parObj != NULL) { - int i; - Q3CanvasLine* cl; + QGraphicsLineItem *cl; switch (style) { case StyleUndef: bottomline->hide(); break; case StyleLine: - l = new Q3CanvasLine(canvas); - l->setPen( QPen(linkcolor, 1) ); - l->setZ(Z_LINK); + l = scene->addLine(QLineF(1,1,1,1),pen); + l->setZValue(Z_LINK); if (visible) l->show(); else l->hide(); break; case StyleParabel: - for (i=0;isetPen( QPen(linkcolor, 1) ); - cl->setPoints( i*5,0,i*10,100); - cl->setZ(Z_LINK); + cl = scene->addLine(QLineF(i*5,0,i*10,100),pen); + cl->setZValue(Z_LINK); if (visible) cl->show(); else @@ -266,28 +256,17 @@ pa0.resize (arcsegs+1); break; case StylePolyLine: - p = new Q3CanvasPolygon(canvas); - p->setBrush( linkcolor ); - p->setZ(Z_LINK); + p =scene->addPolygon(QPolygonF(),pen,linkcolor); + p->setZValue(Z_LINK); if (visible) p->show(); else p->hide(); pa0.resize (3); - // TODO a bit awkward: draw the lines additionally to polygon, to avoid - // missing pixels, when polygon is extremly flat - l = new Q3CanvasLine(canvas); - l->setPen( QPen(linkcolor, 1) ); - l->setZ(Z_LINK); - if (visible) - l->show(); - else - l->hide(); break; case StylePolyParabel: - p = new Q3CanvasPolygon(canvas); - p->setBrush( linkcolor ); - p->setZ(Z_LINK); + p = scene->addPolygon(QPolygonF(),pen,linkcolor); + p->setZValue(Z_LINK); if (visible) p->show(); else @@ -295,22 +274,6 @@ pa0.resize (arcsegs*2+2); pa1.resize (arcsegs+1); pa2.resize (arcsegs+1); - - // TODO a bit awkward: draw the lines additionally - // to polygon, to avoid missing pixels, - // if polygon is extremly flat - for (i=0;isetPen( QPen(linkcolor, 1) ); - cl->setPoints( 5*i,0,i*10,100); - cl->setZ(Z_LINK); - if (visible) - cl->show(); - else - cl->hide(); - segment.append(cl); - } break; default: break; @@ -357,24 +320,22 @@ void LinkableMapObj::setLinkColor(QColor col) { linkcolor=col; - bottomline->setPen( QPen(linkcolor, 1) ); + pen.setColor(col); + bottomline->setPen( pen ); switch (style) { case StyleLine: - l->setPen( QPen(col,1)); + l->setPen( pen); break; case StyleParabel: for (int i=0; isetPen( QPen(col,1)); + segment.at(i)->setPen( pen); break; case StylePolyLine: p->setBrush( QBrush(col)); - l->setPen( QPen(col,1)); break; case StylePolyParabel: p->setBrush( QBrush(col)); - for (int i=0; isetPen( QPen(col,1)); break; default: break; @@ -430,11 +391,8 @@ break; case StylePolyLine: if (p) p->show(); - if (l) l->show(); break; case StylePolyParabel: - for (int i=0; ishow(); if (p) p->show(); break; default: @@ -454,11 +412,8 @@ break; case StylePolyLine: if (p) p->hide(); - if (l) l->hide(); break; case StylePolyParabel: - for (int i=0; ihide(); if (p) p->hide(); break; default: @@ -484,7 +439,7 @@ else { // calc orientation depending on position rel to parent - if (absPos.x() < QPoint(parObj->getChildPos() ).x() ) + if (absPos.x() < QPointF(parObj->getChildPos() ).x() ) orientation=OrientLeftOfCenter; else orientation=OrientRightOfCenter; @@ -527,12 +482,12 @@ double p2x,p2y; // Set P2 Before setting if (!link2ParPos) { - p2x=QPoint( parObj->getChildPos() ).x(); // P1, we have to look at - p2y=QPoint( parObj->getChildPos() ).y(); // orientation + p2x=QPointF( parObj->getChildPos() ).x(); // P1, we have to look at + p2y=QPointF( parObj->getChildPos() ).y(); // orientation } else { - p2x=QPoint( parObj->getParPos() ).x(); - p2y=QPoint( parObj->getParPos() ).y(); + p2x=QPointF( parObj->getParPos() ).x(); + p2y=QPointF( parObj->getParPos() ).y(); } setDockPos(); // Call overloaded method @@ -545,10 +500,10 @@ double vy=p2y - p1y; // Draw the horizontal line below heading (from ChildPos to ParPos) - bottomline->setPoints (qRound(childPos.x()), + bottomline->setLine (QLine (qRound(childPos.x()), qRound(childPos.y()), qRound(p1x), - qRound(p1y) ); + qRound(p1y) )); double a; // angle if (vx > -0.000001 && vx < 0.000001) @@ -556,45 +511,38 @@ else a=atan( vy / vx ); // "turning point" for drawing polygonal links - QPoint tp (-qRound(sin (a)*thickness_start), qRound(cos (a)*thickness_start)); + QPointF tp (-qRound(sin (a)*thickness_start), qRound(cos (a)*thickness_start)); // Draw the link switch (style) { case StyleLine: - l->setPoints( qRound (parPos.x()), + l->setLine( QLine(qRound (parPos.x()), qRound(parPos.y()), qRound(p2x), - qRound(p2y) ); + qRound(p2y) )); break; case StyleParabel: parabel (pa0, p1x,p1y,p2x,p2y); for (int i=0; isetPoints( pa0.point(i).x(), pa0.point(i).y(),pa0.point(i+1).x(),pa0.point(i+1).y()); + segment.at(i)->setLine(QLineF( pa0.at(i).x(), pa0.at(i).y(),pa0.at(i+1).x(),pa0.at(i+1).y())); break; case StylePolyLine: - pa0[0]=QPoint (qRound(p2x+tp.x()), qRound(p2y+tp.y())); - pa0[1]=QPoint (qRound(p2x-tp.x()), qRound(p2y-tp.y())); - pa0[2]=QPoint (qRound (parPos.x()), qRound(parPos.y()) ); - p->setPoints (pa0); - // here too, draw line to avoid missing pixels - l->setPoints( qRound (parPos.x()), - qRound(parPos.y()), - qRound(p2x), - qRound(p2y) ); + pa0.clear(); + pa0<setPolygon(QPolygonF (pa0)); break; case StylePolyParabel: parabel (pa1, p1x,p1y,p2x+tp.x(),p2y+tp.y()); parabel (pa2, p1x,p1y,p2x-tp.x(),p2y-tp.y()); + pa0.clear(); for (int i=0;i<=arcsegs;i++) - { - // Combine the arrays to a single one - pa0[i]=pa1[i]; - pa0[i+arcsegs+1]=pa2[arcsegs-i]; - } - p->setPoints (pa0); - for (int i=0; isetPoints( pa1.point(i).x(), pa1.point(i).y(),pa1.point(i+1).x(),pa1.point(i+1).y()); + pa0 << QPointF (pa1.at(i)); + for (int i=0;i<=arcsegs;i++) + pa0 << QPointF (pa2.at(arcsegs-i)); + p->setPolygon(QPolygonF (pa0)); break; default: break; @@ -644,12 +592,12 @@ return lmo; } -QPoint LinkableMapObj::getChildPos() +QPointF LinkableMapObj::getChildPos() { return childPos; } -QPoint LinkableMapObj::getParPos() +QPointF LinkableMapObj::getParPos() { return parPos; } @@ -683,16 +631,16 @@ return mapEditor; } -QPoint LinkableMapObj::getRandPos() +QPointF LinkableMapObj::getRandPos() { // Choose a random position with given distance to parent: double a=rand()%360 * 2 * M_PI / 360; - return QPoint ( (int)( + 150*cos (a)), + return QPointF ( (int)( + 150*cos (a)), (int)( + 150*sin (a))); } /* -void LinkableMapObj::alignRelativeTo (QPoint ref) +void LinkableMapObj::alignRelativeTo (QPointF ref) { // Overloaded, only called for BO, FIO, ... // FIXME not needed? @@ -702,7 +650,7 @@ void LinkableMapObj::reposition() { cout << "LMO::reposition\n"; - // FIXME not needed? Is overloaded in BranchObj... + // FIXME LMO::reposition not needed? Is overloaded in BranchObj... /* if (depth==0) { @@ -710,14 +658,14 @@ // all upper LMOs have to change, too. calcBBoxSizeWithChilds(); - alignRelativeTo ( QPoint (absPos.x(), + alignRelativeTo ( QPointF (absPos.x(), absPos.y()-(bboxTotal.height()-bbox.height())/2) ); } else { // This is only important for moving branches: // For editing a branch it isn't called... cout << " reposition to abs "<setX (clickBox.x() ); - selbox->setY (clickBox.y() ); - selbox->setSize (clickBox.width(), clickBox.height() ); + selbox->setRect (clickBox); } void LinkableMapObj::select() @@ -785,7 +731,7 @@ setVisibility (visible); } -void LinkableMapObj::parabel (Q3PointArray &ya, double p1x, double p1y, double p2x, double p2y) +void LinkableMapObj::parabel (QPolygonF &ya, double p1x, double p1y, double p2x, double p2y) { double vx=p2x - p1x; // V=P2-P1 @@ -802,13 +748,13 @@ else m=(vy / (vx*vx)); dx=vx/(arcsegs); - int i; - ya.setPoint (0,QPoint (qRound(p1x),qRound(p1y))); - for (i=1;i<=arcsegs;i++) + ya.clear(); + ya<