]> Shamusworld >> Repos - architektonas/blobdiff - src/actions/actiondrawlineangle.cpp
First steps in fixing/cleaning up preview/snapper rendering.
[architektonas] / src / actions / actiondrawlineangle.cpp
index 0022d6fd3137d095c2959de82d08e38c53de08b2..e0c1d6839327872f05e89cebc36395e4f0657ae0 100644 (file)
 #include "graphicview.h"
 #include "rs_preview.h"
 
-ActionDrawLineAngle::ActionDrawLineAngle(RS_EntityContainer & container, GraphicView & graphicView, double angle, bool fixedAngle):
-       ActionInterface("Draw lines with given angle",
-               container, graphicView)
+ActionDrawLineAngle::ActionDrawLineAngle(RS_EntityContainer & container,
+       GraphicView & graphicView, double a, bool fa):
+       ActionInterface("Draw lines with given angle", container, graphicView),
+       pos(Vector(false)), angle(a), length(1.0), fixedAngle(fa), snpPoint(0)
 {
-       this->angle = angle;
-       length = 1.0;
-       snpPoint = 0;
-       this->fixedAngle = fixedAngle;
-       pos = Vector(false);
        reset();
+       //hm.
+//     graphicView.snapper.SetContainer(&container);
+//     graphicView.snapper.SetGraphicView(&graphicView);
+//     graphicView.snapper.SetVisible();
+//     graphicView.preview.SetVisible();
 }
 
 ActionDrawLineAngle::~ActionDrawLineAngle()
@@ -52,21 +53,19 @@ void ActionDrawLineAngle::reset()
 void ActionDrawLineAngle::init(int status)
 {
        ActionInterface::init(status);
-
        reset();
 }
 
 void ActionDrawLineAngle::trigger()
 {
        ActionInterface::trigger();
-
        preparePreview();
        RS_Line * line = new RS_Line(container, data);
        line->setLayerToActive();
        line->setPenToActive();
        container->addEntity(line);
 
-       // upd. undo list:
+       // Update undo list:
        if (document)
        {
                document->startUndoCycle();
@@ -74,12 +73,12 @@ void ActionDrawLineAngle::trigger()
                document->endUndoCycle();
        }
 
-       deleteSnapper();
+//     deleteSnapper();
        graphicView->moveRelativeZero(Vector(0.0, 0.0));
        graphicView->drawEntity(line);
        graphicView->moveRelativeZero(data.startpoint);
-       RS_DEBUG->print("ActionDrawLineAngle::trigger(): line added: %d",
-               line->getId());
+       graphicView->redraw();
+       RS_DEBUG->print("ActionDrawLineAngle::trigger(): line added: %d", line->getId());
 }
 
 void ActionDrawLineAngle::mouseMoveEvent(QMouseEvent * e)
@@ -89,13 +88,17 @@ void ActionDrawLineAngle::mouseMoveEvent(QMouseEvent * e)
        if (getStatus() == SetPos)
        {
                pos = snapPoint(e);
-               deletePreview();
-               clearPreview();
-               preparePreview();
+//             deletePreview();
+//             clearPreview();
+//             preparePreview();
 //             preview->addEntity(new RS_Line(preview, data));
-               drawPreview();
+//             drawPreview();
+               preparePreview();
+               graphicView->preview.clear();
+               graphicView->preview.addEntity(new RS_Line(&(graphicView->preview), data));
        }
 
+       graphicView->redraw();
        RS_DEBUG->print("ActionDrawLineAngle::mouseMoveEvent end");
 }
 
@@ -105,16 +108,20 @@ void ActionDrawLineAngle::mouseReleaseEvent(QMouseEvent * e)
        {
                if (getStatus() == SetPos)
                {
-                       Vector ce(snapPoint(e));
+//                     Vector ce(snapPoint(e));
+                       Vector ce(graphicView->snapper.snapPoint(e));
                        coordinateEvent(&ce);
                }
        }
        else if (e->button() == Qt::RightButton)
        {
-               deletePreview();
-               deleteSnapper();
+//             deletePreview();
+//             deleteSnapper();
                init(getStatus() - 1);
        }
+
+       graphicView->preview.clear();                           // Remove entities from container
+       graphicView->redraw();
 }
 
 void ActionDrawLineAngle::preparePreview()
@@ -139,7 +146,7 @@ void ActionDrawLineAngle::preparePreview()
 
 void ActionDrawLineAngle::coordinateEvent(Vector * e)
 {
-       if (e == NULL)
+       if (!e)
                return;
 
        switch (getStatus())
@@ -168,48 +175,51 @@ void ActionDrawLineAngle::commandEvent(RS_CommandEvent * e)
        switch (getStatus())
        {
        case SetPos:
-
                if (!fixedAngle && checkCommand("angle", c))
                {
-                       deleteSnapper();
-                       deletePreview();
-                       clearPreview();
+//                     deleteSnapper();
+//                     deletePreview();
+//                     clearPreview();
                        setStatus(SetAngle);
                }
                else if (checkCommand("length", c))
                {
-                       deleteSnapper();
-                       deletePreview();
-                       clearPreview();
+//                     deleteSnapper();
+//                     deletePreview();
+//                     clearPreview();
                        setStatus(SetLength);
                }
                break;
 
-       case SetAngle: {
+       case SetAngle:
+       {
                bool ok;
                double a = RS_Math::eval(c, &ok);
 
-               if (ok == true)
+               if (ok)
                        angle = RS_Math::deg2rad(a);
                else
                        RS_DIALOGFACTORY->commandMessage(tr("Not a valid expression"));
+
                RS_DIALOGFACTORY->requestOptions(this, true, true);
                setStatus(SetPos);
        }
-       break;
+               break;
 
-       case SetLength: {
+       case SetLength:
+       {
                bool ok;
                double l = RS_Math::eval(c, &ok);
 
-               if (ok == true)
+               if (ok)
                        length = l;
                else
                        RS_DIALOGFACTORY->commandMessage(tr("Not a valid expression"));
+
                RS_DIALOGFACTORY->requestOptions(this, true, true);
                setStatus(SetPos);
        }
-       break;
+               break;
 
        default:
                break;
@@ -223,9 +233,9 @@ QStringList ActionDrawLineAngle::getAvailableCommands()
        switch (getStatus())
        {
        case SetPos:
-
                if (!fixedAngle)
                        cmd += command("angle");
+
                cmd += command("length");
                break;
 
@@ -241,8 +251,7 @@ void ActionDrawLineAngle::updateMouseButtonHints()
        switch (getStatus())
        {
        case SetPos:
-               RS_DIALOGFACTORY->updateMouseWidget(tr("Specify position"),
-                       tr("Cancel"));
+               RS_DIALOGFACTORY->updateMouseWidget(tr("Specify position"), tr("Cancel"));
                break;
 
        case SetAngle:
@@ -261,14 +270,12 @@ void ActionDrawLineAngle::updateMouseButtonHints()
 void ActionDrawLineAngle::showOptions()
 {
        ActionInterface::showOptions();
-
        RS_DIALOGFACTORY->requestOptions(this, true);
 }
 
 void ActionDrawLineAngle::hideOptions()
 {
        ActionInterface::hideOptions();
-
        RS_DIALOGFACTORY->requestOptions(this, false);
 }
 
@@ -288,6 +295,7 @@ void ActionDrawLineAngle::updateToolBar()
 void ActionDrawLineAngle::setSnapPoint(int sp)
 {
        snpPoint = sp;
+//     graphicView->redraw();
 }
 
 int ActionDrawLineAngle::getSnapPoint()
@@ -298,6 +306,7 @@ int ActionDrawLineAngle::getSnapPoint()
 void ActionDrawLineAngle::setAngle(double a)
 {
        angle = a;
+//     graphicView->redraw();
 }
 
 double ActionDrawLineAngle::getAngle()
@@ -308,6 +317,7 @@ double ActionDrawLineAngle::getAngle()
 void ActionDrawLineAngle::setLength(double l)
 {
        length = l;
+//     graphicView->redraw();
 }
 
 double ActionDrawLineAngle::getLength()