]> Shamusworld >> Repos - architektonas/blobdiff - src/drawdimensionaction.cpp
Readded click to add dimension to object (for Line).
[architektonas] / src / drawdimensionaction.cpp
index 66b2bfb1a176c149107eb5782e56859155590eac..d366c2277dacee4137a551b3d46e5e17fb645269 100644 (file)
 //
 
 #include "drawdimensionaction.h"
+#include "applicationwindow.h"
 #include "dimension.h"
+#include "drawingview.h"
+#include "line.h"
 #include "painter.h"
 
 
-enum { FIRST_POINT, NEXT_POINT };
+enum { FIRST_POINT, NEXT_POINT, NO_POINT };
 
 
 DrawDimensionAction::DrawDimensionAction(): state(0), dimension(NULL)
@@ -33,12 +36,11 @@ DrawDimensionAction::~DrawDimensionAction()
 {
        painter->SetPen(QPen(Qt::red, 2.0, Qt::DotLine));
 
-       // I think stuff like crosshairs should be done in the DrawingView, tho
        if (state == FIRST_POINT)
        {
                painter->DrawHandle(p1);
        }
-       else
+       else if (state == NEXT_POINT)
        {
                painter->DrawLine(p1, p2);
                painter->DrawHandle(p2);
@@ -48,6 +50,21 @@ DrawDimensionAction::~DrawDimensionAction()
 
 /*virtual*/ void DrawDimensionAction::MouseDown(Vector point)
 {
+       obj = ApplicationWindow::drawing->document.lastObjectClicked;
+
+       if (obj)
+       {
+               if (obj->type == OTLine)
+               {
+                       // Make sure we didn't hit an endpoint...
+                       if (!(((Line *) obj)->hitPoint1 || ((Line *)obj)->hitPoint2))
+                       {
+                               state = NO_POINT;
+                               return;
+                       }
+               }
+       }
+
        if (state == FIRST_POINT)
                p1 = point;
        else
@@ -66,7 +83,12 @@ DrawDimensionAction::~DrawDimensionAction()
 
 /*virtual*/ void DrawDimensionAction::MouseReleased(void)
 {
-       if (state == FIRST_POINT)
+       if (state == NO_POINT)
+       {
+               HandleAddDimensionToObject();//ApplicationWindow::drawing->document.lastObjectClicked);
+               state = FIRST_POINT;
+       }
+       else if (state == FIRST_POINT)
        {
                p2 = p1;
                state = NEXT_POINT;
@@ -93,3 +115,27 @@ DrawDimensionAction::~DrawDimensionAction()
 {
 }
 
+
+void DrawDimensionAction::HandleAddDimensionToObject(void)//Object * obj)
+{
+//printf("Adding dimension to object...\n");
+       if (obj->type == OTLine)
+       {
+               Object * existing = ((Line *)obj)->FindAttachedDimension();
+
+               if (existing)
+               {
+                       ((Dimension *)existing)->FlipSides();
+               }
+//printf("--> type == LINE\n");
+               // Should also check here to see if it hit the line proper or just hit
+               // an endpoint...
+               else
+               {
+                       dimension = new Dimension(p1, p2);
+                       ((Line *)obj)->SetDimensionOnLine(dimension);
+                       emit ObjectReady(dimension);
+               }
+       }
+}
+