X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fdrawlineaction.cpp;h=e14ba81ca1f440876c5e60dabba0cfe9b95c7962;hb=669a05b5a52bd759f0ea08772e0ed17222b015a0;hp=887e9c4c3795f33d1eeb9af34b26acfba283739e;hpb=14fee18e7a8ebfccfc1ebe203fe049f268efb40a;p=architektonas diff --git a/src/drawlineaction.cpp b/src/drawlineaction.cpp index 887e9c4..e14ba81 100644 --- a/src/drawlineaction.cpp +++ b/src/drawlineaction.cpp @@ -18,11 +18,13 @@ //#include "vector.h" -#define FIRST_POINT 0 -#define NEXT_POINT 1 +//#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) { } @@ -37,6 +39,7 @@ DrawLineAction::~DrawLineAction() 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->DrawHandle(p1); @@ -45,12 +48,19 @@ DrawLineAction::~DrawLineAction() { painter->DrawLine(p1, p2); painter->DrawHandle(p2); + + QString text = tr("Length: %1 in."); + text = text.arg(Vector::Magnitude(p1, p2)); + painter->DrawInformativeText(text); } } /*virtual*/ void DrawLineAction::MouseDown(Vector point) { + // Clear our override... + shiftWasPressedOnNextPoint = false; + if (state == FIRST_POINT) p1 = point; else @@ -82,8 +92,38 @@ DrawLineAction::~DrawLineAction() // We don't need no stinkin' sentinels, when we have signals & slots! emit ObjectReady(line); -// p1 = p2; + p1 = p2; + state = NEXT_POINT; + } +} + + +/*virtual*/ bool DrawLineAction::KeyDown(int key) +{ + if ((key == Qt::Key_Shift) && (state == NEXT_POINT)) + { + shiftWasPressedOnNextPoint = true; + p1Save = p1; + p1 = p2; state = FIRST_POINT; + return true; } + + return false; +} + + +/*virtual*/ bool DrawLineAction::KeyReleased(int key) +{ + if ((key == Qt::Key_Shift) && shiftWasPressedOnNextPoint) + { + shiftWasPressedOnNextPoint = false; + p2 = p1; + p1 = p1Save; + state = NEXT_POINT; + return true; + } + + return false; }