X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fdrawlineaction.cpp;h=3dc9f7d240922b1c14f1122a9fa3d791941251a3;hb=771113b26ca27707c96fdcd80d79a08e40884268;hp=867970df4d62685e1b87831fe1467d3865d81508;hpb=fc498c685147e3173130e2df8953cc52705553e9;p=architektonas diff --git a/src/drawlineaction.cpp b/src/drawlineaction.cpp index 867970d..3dc9f7d 100644 --- a/src/drawlineaction.cpp +++ b/src/drawlineaction.cpp @@ -4,7 +4,7 @@ // (C) 2011 Underground Software // See the README and GPLv3 files for licensing and warranty information // -// JLH = James L. Hammons +// JLH = James Hammons // // WHO WHEN WHAT // --- ---------- ------------------------------------------------------------ @@ -14,18 +14,19 @@ #include "drawlineaction.h" #include "line.h" +#include "mathconstants.h" #include "painter.h" -//#include "vector.h" -#define FIRST_POINT 0 -#define NEXT_POINT 1 +enum { FIRST_POINT, NEXT_POINT }; -DrawLineAction::DrawLineAction(): state(0), line(NULL) +DrawLineAction::DrawLineAction(): state(FIRST_POINT), line(NULL), + shiftWasPressedOnNextPoint(false) { } + DrawLineAction::~DrawLineAction() { } @@ -33,25 +34,41 @@ DrawLineAction::~DrawLineAction() /*virtual*/ void DrawLineAction::Draw(Painter * painter) { - // Need to fix pen colors, etc... + painter->SetPen(QPen(Qt::red, 2.0, Qt::DotLine)); + + // I think stuff like crosshairs should be done in the DrawingView, tho + // (and it's done there now...) if (state == FIRST_POINT) { - painter->DrawPoint(p1.x, p1.y); + painter->DrawHandle(p1); } else { painter->DrawLine(p1, p2); + painter->DrawHandle(p2); + + Vector v(p1, p2); + double absAngle = v.Angle() * RADIANS_TO_DEGREES; + double absLength = v.Magnitude(); + QString text = tr("Length: %1 in.\n") + QChar(0x2221) + tr(": %2"); + text = text.arg(absLength).arg(absAngle); + painter->DrawInformativeText(text); } } + /*virtual*/ void DrawLineAction::MouseDown(Vector point) { + // Clear our override... + shiftWasPressedOnNextPoint = false; + if (state == FIRST_POINT) p1 = point; else p2 = point; } + /*virtual*/ void DrawLineAction::MouseMoved(Vector point) { if (state == FIRST_POINT) @@ -60,17 +77,60 @@ DrawLineAction::~DrawLineAction() p2 = point; } + /*virtual*/ void DrawLineAction::MouseReleased(void) { if (state == FIRST_POINT) + { + p2 = p1; state = NEXT_POINT; + line = NULL; + } else if (state == NEXT_POINT) { - // We create the new object here, and then pass it off to the document. + Line * oldLine = line; + // We create the new object here, and then pass it off to the + // DrawingView which stuffs it into the document. line = new Line(p1, p2); + + // Connect Lines by default + if (oldLine) + { + oldLine->Connect(line, 0); + line->Connect(oldLine, 1.0); + } + // We don't need no stinkin' sentinels, when we have signals & slots! emit ObjectReady(line); - + + p1 = p2; + state = NEXT_POINT; + } +} + + +/*virtual*/ void DrawLineAction::KeyDown(int key) +{ + if ((key == Qt::Key_Shift) && (state == NEXT_POINT)) + { + shiftWasPressedOnNextPoint = true; + p1Save = p1; p1 = p2; + state = FIRST_POINT; + emit NeedRefresh(); + } +} + + +/*virtual*/ void DrawLineAction::KeyReleased(int key) +{ + if ((key == Qt::Key_Shift) && shiftWasPressedOnNextPoint) + { + shiftWasPressedOnNextPoint = false; + p2 = p1; + p1 = p1Save; + state = NEXT_POINT; + emit(NeedRefresh()); } } +