]> Shamusworld >> Repos - architektonas/commitdiff
Added key modifiers to Actions.
authorShamus Hammons <jlhamm@acm.org>
Sun, 25 Aug 2013 20:58:20 +0000 (15:58 -0500)
committerShamus Hammons <jlhamm@acm.org>
Sun, 25 Aug 2013 20:58:20 +0000 (15:58 -0500)
15 files changed:
TODO
src/action.h
src/applicationwindow.cpp
src/drawarcaction.cpp
src/drawarcaction.h
src/drawcircleaction.cpp
src/drawcircleaction.h
src/drawdimensionaction.cpp
src/drawdimensionaction.h
src/drawingview.cpp
src/drawingview.h
src/drawlineaction.cpp
src/drawlineaction.h
src/drawtextaction.cpp
src/drawtextaction.h

diff --git a/TODO b/TODO
index 43ee39b51d1f9836be78f9a8a1f6ae099fab71e5..48c82e3e4b48bd6034c2f6d164e010d84c886bc5 100644 (file)
--- a/TODO
+++ b/TODO
@@ -10,7 +10,6 @@ Stuff To Be Implemented/Fixed
  - Group selection (kind done, needs more work though)
  - Take movement code out of Objects and put it into top level Container (actually
    I think this should be more of the state code handling. Have to see.)
- - Add OSD routines so they don't have to be implemented in Objects
  - Add OSD to Object creation
  - Add layers
  - Add blocks
@@ -37,5 +36,7 @@ Stuff That's Done
  - Add Arc [Shamus 2013-08-14]
  - Fix snap to grid to allow picking up of handles when they are not on a grid
    point. [Shamus 2013-08-18]
+ - Add OSD routines so they don't have to be implemented in Objects [Shamus
+   2013-08-24]
 
 
index 6565f694827db9b574ee5cd450bf7c8c3dcfa066..96e8e87c9ccb5bad1390aaea4ee77ae6178a736d 100644 (file)
@@ -1,7 +1,7 @@
 #ifndef __ACTION_H__
 #define __ACTION_H__
 
-#include <QtCore>
+#include <QtGui>
 #include "vector.h"
 
 class Object;
@@ -21,9 +21,12 @@ class Action: public QObject
                virtual void MouseDown(Vector) = 0;
                virtual void MouseMoved(Vector) = 0;
                virtual void MouseReleased(void) = 0;
+               virtual bool KeyDown(int) = 0;
+               virtual bool KeyReleased(int) = 0;
 
        signals:
                void ObjectReady(Object *);
 };
 
 #endif // __ACTION_H__
+
index f9362ca5967071d34a0202608d9759249c32b759..8600d2d16fee6fc1ca3a88523fc1c9069c4856b5 100644 (file)
@@ -49,6 +49,7 @@ ApplicationWindow::ApplicationWindow():
 {
        drawing = new DrawingView(this);
        drawing->setMouseTracking(true);                // We want *all* mouse events...!
+       drawing->setFocusPolicy(Qt::StrongFocus);
        setCentralWidget(drawing);
 
        aboutWin = new AboutWindow(this);
index 624e4ee74a04a23f0e4b682d892f22eeef4e52e1..e416d3d07c42adab8f8ae0239b4be7f1a1e0934e 100644 (file)
@@ -123,3 +123,15 @@ DrawArcAction::~DrawArcAction()
        }
 }
 
+
+/*virtual*/ bool DrawArcAction::KeyDown(int /*key*/)
+{
+       return false;
+}
+
+
+/*virtual*/ bool DrawArcAction::KeyReleased(int /*key*/)
+{
+       return false;
+}
+
index f47d461ddbc55c30fd1731d2e80777c63ce9527d..4c5c32b62ccd4611215633a121f4cc675cd81d2e 100644 (file)
@@ -15,6 +15,8 @@ class DrawArcAction: public Action
                virtual void MouseDown(Vector);
                virtual void MouseMoved(Vector);
                virtual void MouseReleased(void);
+               virtual bool KeyDown(int);
+               virtual bool KeyReleased(int);
 
        private:
                int state;
@@ -24,3 +26,4 @@ class DrawArcAction: public Action
 };
 
 #endif // __DRAWARCACTION_H__
+
index 338bd5366b204dd9bb6ce659533d5f849009e4fb..a1ffe192b3653c3e63901c049b9e751ab8739d26 100644 (file)
@@ -82,3 +82,16 @@ DrawCircleAction::~DrawCircleAction()
                p1 = p2;
        }
 }
+
+
+/*virtual*/ bool DrawCircleAction::KeyDown(int /*key*/)
+{
+       return false;
+}
+
+
+/*virtual*/ bool DrawCircleAction::KeyReleased(int /*key*/)
+{
+       return false;
+}
+
index d989e457e130f46546bd6437f761807628001d20..65dc6eccd84720e891a150fbff00aefcb6d6ae89 100644 (file)
@@ -15,6 +15,8 @@ class DrawCircleAction: public Action
                virtual void MouseDown(Vector);
                virtual void MouseMoved(Vector);
                virtual void MouseReleased(void);
+               virtual bool KeyDown(int);
+               virtual bool KeyReleased(int);
 
        private:
                int state;
@@ -23,3 +25,4 @@ class DrawCircleAction: public Action
 };
 
 #endif // __DRAWCIRCLEACTION_H__
+
index 58fa09595028e0e884c54b52cf62073edff64492..e51f88d394e39f72c23fc4da2af4b58704ef7677 100644 (file)
@@ -87,3 +87,15 @@ DrawDimensionAction::~DrawDimensionAction()
        }
 }
 
+
+/*virtual*/ bool DrawDimensionAction::KeyDown(int /*key*/)
+{
+       return false;
+}
+
+
+/*virtual*/ bool DrawDimensionAction::KeyReleased(int /*key*/)
+{
+       return false;
+}
+
index ccb9132e61005655952ff98a38ffb305119dd478..edd5c7bbc4e4243e94a53731ed9642edd9a32839 100644 (file)
@@ -15,6 +15,8 @@ class DrawDimensionAction: public Action
                virtual void MouseDown(Vector);
                virtual void MouseMoved(Vector);
                virtual void MouseReleased(void);
+               virtual bool KeyDown(int);
+               virtual bool KeyReleased(int);
 
        private:
                int state;
@@ -23,3 +25,4 @@ class DrawDimensionAction: public Action
 };
 
 #endif // __DRAWDIMENSIONACTION_H__
+
index 838d45aae4f62e59827d082a9c6b34eb8c6eca18..95721178a70be35ee56600f4a492390b8f1ed44c 100644 (file)
@@ -496,3 +496,27 @@ void DrawingView::mouseReleaseEvent(QMouseEvent * event)
        }
 }
 
+
+void DrawingView::keyPressEvent(QKeyEvent * event)
+{
+       if (toolAction)
+       {
+               bool needUpdate = toolAction->KeyDown(event->key());
+
+               if (needUpdate)
+                       update();
+       }
+}
+
+
+void DrawingView::keyReleaseEvent(QKeyEvent * event)
+{
+       if (toolAction)
+       {
+               bool needUpdate = toolAction->KeyReleased(event->key());
+
+               if (needUpdate)
+                       update();
+       }
+}
+
index 819ab78d226c3a92a26fb0d7a49a22880e4bd7b7..da1912f39312fbcc20fc6e0d60ed96553f071a5c 100644 (file)
@@ -35,6 +35,8 @@ class DrawingView: public QWidget
                void mousePressEvent(QMouseEvent * event);
                void mouseMoveEvent(QMouseEvent * event);
                void mouseReleaseEvent(QMouseEvent * event);
+               void keyPressEvent(QKeyEvent * event);
+               void keyReleaseEvent(QKeyEvent * event);
 
        private:
                QPoint GetAdjustedMousePosition(QMouseEvent * event);
index d4b35db336ae70c35bc8f7c6e69ca199d7e7426f..e14ba81ca1f440876c5e60dabba0cfe9b95c7962 100644 (file)
 //#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);
@@ -55,6 +58,9 @@ DrawLineAction::~DrawLineAction()
 
 /*virtual*/ void DrawLineAction::MouseDown(Vector point)
 {
+       // Clear our override...
+       shiftWasPressedOnNextPoint = false;
+
        if (state == FIRST_POINT)
                p1 = point;
        else
@@ -86,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;
 }
 
index 0736d303dc3d637d9f8498c0823553341ad8998f..bb9aa7708a02cf363fefb1a32df9fd604a8eca16 100644 (file)
@@ -15,11 +15,15 @@ class DrawLineAction: public Action
                virtual void MouseDown(Vector);
                virtual void MouseMoved(Vector);
                virtual void MouseReleased(void);
+               virtual bool KeyDown(int);
+               virtual bool KeyReleased(int);
 
        private:
                int state;
                Line * line;
-               Vector p1, p2;
+               Vector p1, p2, p1Save;
+               bool shiftWasPressedOnNextPoint;
 };
 
 #endif // __DRAWLINEACTION_H__
+
index fafdf95ed48c55e50e2b9ecc8f126b1374c99430..b6a0715339e9b1c6157196e058330ffde402b7d3 100644 (file)
@@ -85,3 +85,15 @@ DrawTextAction::~DrawTextAction()
        }
 }
 
+
+/*virtual*/ bool DrawTextAction::KeyDown(int /*key*/)
+{
+       return false;
+}
+
+
+/*virtual*/ bool DrawTextAction::KeyReleased(int /*key*/)
+{
+       return false;
+}
+
index 23c7c6a4fa57681dd44e04489a250aed3f11078f..68c4428b517c3a240c951f1beefa546f526bc3e0 100644 (file)
@@ -15,6 +15,8 @@ class DrawTextAction: public Action
                virtual void MouseDown(Vector);
                virtual void MouseMoved(Vector);
                virtual void MouseReleased(void);
+               virtual bool KeyDown(int);
+               virtual bool KeyReleased(int);
 
        private:
                int state;
@@ -23,3 +25,4 @@ class DrawTextAction: public Action
 };
 
 #endif // __DRAWTEXTACTION_H__
+