]> Shamusworld >> Repos - architektonas/blobdiff - src/actions/actiondimlinear.cpp
Phase two of adding polyline functionality...
[architektonas] / src / actions / actiondimlinear.cpp
index fd3583534466fed3e950aea874cecc54ed6e2f49..3191f1c1c3768951bb59c0e55ac88c62cf97c977 100644 (file)
@@ -3,7 +3,9 @@
 // Part of the Architektonas Project
 // Originally part of QCad Community Edition by Andrew Mustun
 // Extensively rewritten and refactored by James L. Hammons
-// (C) 2010 Underground Software
+// Portions copyright (C) 2001-2003 RibbonSoft
+// Copyright (C) 2010 Underground Software
+// See the README and GPLv2 files for licensing and warranty information
 //
 // JLH = James L. Hammons <jlhamm@acm.org>
 //
 
 #include "actiondimlinear.h"
 
-#include "rs_commandevent.h"
-#include "rs_constructionline.h"
-#include "rs_dialogfactory.h"
+#include "commandevent.h"
+#include "constructionline.h"
+#include "debug.h"
+#include "dialogfactory.h"
 #include "graphicview.h"
-#include "rs_preview.h"
+#include "preview.h"
 
 /**
  * Constructor.
  * @param fixedAngle true: The user can't change the angle.
  *                   false: The user can change the angle in a option widget.
  */
-ActionDimLinear::ActionDimLinear(RS_EntityContainer & container, GraphicView & graphicView, double angle, bool fixedAngle):
+ActionDimLinear::ActionDimLinear(EntityContainer & container,
+       GraphicView & graphicView, double angle, bool fixedAngle):
        ActionDimension("Draw linear dimensions", container, graphicView)
 {
        edata.angle = angle;
        this->fixedAngle = fixedAngle;
        lastStatus = SetExtPoint1;
+       //hm. doesn't work.
+       graphicView.snapper.SetVisible();
        reset();
 }
 
@@ -48,38 +54,40 @@ ActionDimLinear::~ActionDimLinear()
 void ActionDimLinear::reset()
 {
        ActionDimension::reset();
-       edata = RS_DimLinearData(Vector(false), Vector(false), (fixedAngle ? edata.angle : 0.0), 0.0);
+       edata = DimLinearData(Vector(false), Vector(false), (fixedAngle ? edata.angle : 0.0), 0.0);
 
-       if (RS_DIALOGFACTORY != NULL)
-               RS_DIALOGFACTORY->requestOptions(this, true, true);
+       if (DIALOGFACTORY)
+               DIALOGFACTORY->requestOptions(this, true, true);
 }
 
 void ActionDimLinear::trigger()
 {
        ActionDimension::trigger();
        preparePreview();
-       RS_DimLinear * dim = new RS_DimLinear(container, data, edata);
+       DimLinear * dim = new DimLinear(container, data, edata);
        dim->setLayerToActive();
        dim->setPenToActive();
        dim->update();
        container->addEntity(dim);
 
        // upd. undo list:
-       if (document != NULL)
+       if (document)
        {
                document->startUndoCycle();
                document->addUndoable(dim);
                document->endUndoCycle();
        }
 
-       deleteSnapper();
-       Vector rz = graphicView->getRelativeZero();
-       graphicView->moveRelativeZero(Vector(0.0, 0.0));
-       graphicView->drawEntity(dim);
-       graphicView->moveRelativeZero(rz);
-       drawSnapper();
+//     deleteSnapper();
+//     Vector rz = graphicView->getRelativeZero();
+//     graphicView->moveRelativeZero(Vector(0.0, 0.0));
+//     graphicView->drawEntity(dim);
+//     graphicView->moveRelativeZero(rz);
+//     drawSnapper();
+       graphicView->snapper.SetVisible(false);
+       graphicView->redraw();
 
-       RS_DEBUG->print("ActionDimLinear::trigger(): dim added: %d", dim->getId());
+       DEBUG->print("ActionDimLinear::trigger(): dim added: %d", dim->getId());
 }
 
 void ActionDimLinear::preparePreview()
@@ -87,57 +95,68 @@ void ActionDimLinear::preparePreview()
        Vector dirV;
        dirV.setPolar(100.0, edata.angle + M_PI / 2.0);
 
-       RS_ConstructionLine cl(
-               NULL, RS_ConstructionLineData(
-                       edata.extensionPoint2,
-                       edata.extensionPoint2 + dirV));
+       ConstructionLine cl(NULL, ConstructionLineData(edata.extensionPoint2,
+               edata.extensionPoint2 + dirV));
 
-       data.definitionPoint =
-               cl.getNearestPointOnEntity(data.definitionPoint);
+       data.definitionPoint = cl.getNearestPointOnEntity(data.definitionPoint);
 }
 
 void ActionDimLinear::mouseMoveEvent(QMouseEvent * e)
 {
-       RS_DEBUG->print("ActionDimLinear::mouseMoveEvent begin");
+       DEBUG->print("ActionDimLinear::mouseMoveEvent begin");
 
        Vector mouse = snapPoint(e);
 
        switch (getStatus())
        {
        case SetExtPoint1:
+//             graphicView->snapper.SetVisible();
+//             graphicView->redraw();
                break;
 
        case SetExtPoint2:
 
                if (edata.extensionPoint1.valid)
                {
-                       deletePreview();
-                       clearPreview();
-//                     preview->addEntity(new RS_Line(preview,
-//                             RS_LineData(edata.extensionPoint1, mouse)));
-                       drawPreview();
+//                     deletePreview();
+//                     clearPreview();
+//                     preview->addEntity(new Line(preview,
+//                             LineData(edata.extensionPoint1, mouse)));
+//                     drawPreview();
+                       graphicView->preview.clear();
+                       graphicView->preview.addEntity(new Line(&(graphicView->preview),
+                               LineData(edata.extensionPoint1, mouse)));
+                       graphicView->preview.SetVisible();
+                       graphicView->redraw();
                }
+
                break;
 
        case SetDefPoint:
 
                if (edata.extensionPoint1.valid && edata.extensionPoint2.valid)
                {
-                       deletePreview();
-                       clearPreview();
+//                     deletePreview();
+//                     clearPreview();
                        data.definitionPoint = mouse;
-
-                       preparePreview();
-
-//                     RS_DimLinear * dim = new RS_DimLinear(preview, data, edata);
+//                     preparePreview();
+//                     DimLinear * dim = new DimLinear(preview, data, edata);
 //                     dim->update();
 //                     preview->addEntity(dim);
-                       drawPreview();
+//                     drawPreview();
+                       graphicView->preview.clear();
+                       preparePreview();
+                       DimLinear * dim = new DimLinear(&(graphicView->preview), data, edata);
+                       dim->update();
+                       graphicView->preview.addEntity(dim);
+                       graphicView->preview.SetVisible();
+                       graphicView->redraw();
                }
+
                break;
        }
 
-       RS_DEBUG->print("ActionDimLinear::mouseMoveEvent end");
+       DEBUG->print("ActionDimLinear::mouseMoveEvent end");
 }
 
 void ActionDimLinear::mouseReleaseEvent(QMouseEvent * e)
@@ -146,18 +165,25 @@ void ActionDimLinear::mouseReleaseEvent(QMouseEvent * e)
        {
                Vector ce(snapPoint(e));
                coordinateEvent(&ce);
+               graphicView->snapper.SetVisible();
        }
        else if (e->button() == Qt::RightButton)
        {
-               deletePreview();
-               deleteSnapper();
+               if (getStatus() == 0)
+               {
+                       graphicView->preview.SetVisible(false);
+                       graphicView->snapper.SetVisible(false);
+               }
+
+//             deletePreview();
+//             deleteSnapper();
                init(getStatus() - 1);
        }
 }
 
 void ActionDimLinear::coordinateEvent(Vector * e)
 {
-       if (e == NULL)
+       if (!e)
                return;
 
        Vector pos = *e;
@@ -188,14 +214,14 @@ void ActionDimLinear::coordinateEvent(Vector * e)
        }
 }
 
-void ActionDimLinear::commandEvent(RS_CommandEvent * e)
+void ActionDimLinear::commandEvent(CommandEvent * e)
 {
        QString c = e->getCommand().toLower();
 
        if (checkCommand("help", c))
        {
-               if (RS_DIALOGFACTORY != NULL)
-                       RS_DIALOGFACTORY->commandMessage(msgAvailableCommands()
+               if (DIALOGFACTORY)
+                       DIALOGFACTORY->commandMessage(msgAvailableCommands()
                                + getAvailableCommands().join(", "));
                return;
        }
@@ -205,32 +231,35 @@ void ActionDimLinear::commandEvent(RS_CommandEvent * e)
        case SetText:
                setText(c);
 
-               if (RS_DIALOGFACTORY != NULL)
-                       RS_DIALOGFACTORY->requestOptions(this, true, true);
+               if (DIALOGFACTORY)
+                       DIALOGFACTORY->requestOptions(this, true, true);
+
                graphicView->enableCoordinateInput();
                setStatus(lastStatus);
                break;
 
-       case SetAngle: {
+       case SetAngle:
+       {
                bool ok;
-               double a = RS_Math::eval(c, &ok);
+               double a = Math::eval(c, &ok);
+
+               if (ok)
+                       setAngle(Math::deg2rad(a));
+               else if (DIALOGFACTORY)
+                       DIALOGFACTORY->commandMessage(tr("Not a valid expression"));
 
-               if (ok == true)
-                       setAngle(RS_Math::deg2rad(a));
-               else if (RS_DIALOGFACTORY != NULL)
-                       RS_DIALOGFACTORY->commandMessage(tr("Not a valid expression"));
+               if (DIALOGFACTORY)
+                       DIALOGFACTORY->requestOptions(this, true, true);
 
-               if (RS_DIALOGFACTORY != NULL)
-                       RS_DIALOGFACTORY->requestOptions(this, true, true);
                setStatus(lastStatus);
        }
-       break;
+               break;
 
        default:
                lastStatus = (Status)getStatus();
-               deleteSnapper();
-               deletePreview();
-               clearPreview();
+//             deleteSnapper();
+//             deletePreview();
+//             clearPreview();
 
                if (checkCommand("text", c))
                {
@@ -240,6 +269,7 @@ void ActionDimLinear::commandEvent(RS_CommandEvent * e)
                }
                else if (!fixedAngle && (checkCommand("angle", c)))
                        setStatus(SetAngle);
+
                break;
        }
 }
@@ -257,6 +287,7 @@ QStringList ActionDimLinear::getAvailableCommands()
 
                if (!fixedAngle)
                        cmd += command("angle");
+
                break;
 
        default:
@@ -268,35 +299,35 @@ QStringList ActionDimLinear::getAvailableCommands()
 
 void ActionDimLinear::updateMouseButtonHints()
 {
-       if (RS_DIALOGFACTORY != NULL)
+       if (DIALOGFACTORY)
        {
                switch (getStatus())
                {
                case SetExtPoint1:
-                       RS_DIALOGFACTORY->updateMouseWidget(
+                       DIALOGFACTORY->updateMouseWidget(
                                tr("Specify first extension line origin"), tr("Cancel"));
                        break;
 
                case SetExtPoint2:
-                       RS_DIALOGFACTORY->updateMouseWidget(
+                       DIALOGFACTORY->updateMouseWidget(
                                tr("Specify second extension line origin"), tr("Back"));
                        break;
 
                case SetDefPoint:
-                       RS_DIALOGFACTORY->updateMouseWidget(
+                       DIALOGFACTORY->updateMouseWidget(
                                tr("Specify dimension line location"), tr("Back"));
                        break;
 
                case SetText:
-                       RS_DIALOGFACTORY->updateMouseWidget(tr("Enter dimension text:"), "");
+                       DIALOGFACTORY->updateMouseWidget(tr("Enter dimension text:"), "");
                        break;
 
                case SetAngle:
-                       RS_DIALOGFACTORY->updateMouseWidget(tr("Enter dimension line angle:"), "");
+                       DIALOGFACTORY->updateMouseWidget(tr("Enter dimension line angle:"), "");
                        break;
 
                default:
-                       RS_DIALOGFACTORY->updateMouseWidget("", "");
+                       DIALOGFACTORY->updateMouseWidget("", "");
                        break;
                }
        }
@@ -306,16 +337,16 @@ void ActionDimLinear::showOptions()
 {
        ActionInterface::showOptions();
 
-       if (RS_DIALOGFACTORY != NULL)
-               RS_DIALOGFACTORY->requestOptions(this, true, true);
+       if (DIALOGFACTORY)
+               DIALOGFACTORY->requestOptions(this, true, true);
 }
 
 void ActionDimLinear::hideOptions()
 {
        ActionInterface::hideOptions();
 
-       if (RS_DIALOGFACTORY != NULL)
-               RS_DIALOGFACTORY->requestOptions(this, false);
+       if (DIALOGFACTORY)
+               DIALOGFACTORY->requestOptions(this, false);
 }
 
 double ActionDimLinear::getAngle()