]> Shamusworld >> Repos - architektonas/blobdiff - src/drawingview.cpp
Added mouse wheel zoom.
[architektonas] / src / drawingview.cpp
index 89c63ed429d9a95f71aa245160d09d95c6ca7e4b..9341a76279044ef78c64e3d21a39f95d85cda41c 100644 (file)
@@ -41,6 +41,9 @@
 
 #define BACKGROUND_MAX_SIZE    512
 
+// Class variable
+//Container DrawingView::document(Vector(0, 0));
+
 
 DrawingView::DrawingView(QWidget * parent/*= NULL*/): QWidget(parent),
        // The value in the settings file will override this.
@@ -138,6 +141,7 @@ void DrawingView::SetToolActive(Action * action)
                toolAction = action;
                connect(toolAction, SIGNAL(ObjectReady(Object *)), this,
                        SLOT(AddNewObjectToDocument(Object *)));
+               connect(toolAction, SIGNAL(NeedRefresh()), this, SLOT(HandleActionUpdate()));
        }
 }
 
@@ -260,6 +264,12 @@ void DrawingView::AddNewObjectToDocument(Object * object)
 }
 
 
+void DrawingView::HandleActionUpdate(void)
+{
+       update();
+}
+
+
 void DrawingView::SetCurrentLayer(int layer)
 {
        Object::currentLayer = layer;
@@ -457,26 +467,44 @@ void DrawingView::mouseReleaseEvent(QMouseEvent * event)
 }
 
 
-void DrawingView::keyPressEvent(QKeyEvent * event)
+void DrawingView::wheelEvent(QWheelEvent * event)
 {
-       if (toolAction)
-       {
-               bool needUpdate = toolAction->KeyDown(event->key());
+       double zoomFactor = 1.25;
+       QSize sizeWin = /*drawing->*/size();
+       Vector center(sizeWin.width() / 2.0, sizeWin.height() / 2.0);
+       center = Painter::QtToCartesianCoords(center);
 
-               if (needUpdate)
-                       update();
+       if (event->delta() > 0)
+       {
+               Vector newOrigin = center - ((center - Painter::origin) / zoomFactor);
+               Painter::origin = newOrigin;
+               Painter::zoom *= zoomFactor;
+       }
+       else
+       {
+               Vector newOrigin = center + ((-center + Painter::origin) * zoomFactor);
+               Painter::origin = newOrigin;
+               Painter::zoom /= zoomFactor;
        }
+
+//     Object::gridSpacing = /*drawing->*/gridPixels / Painter::zoom;
+       SetGridSize(Object::gridSpacing * Painter::zoom);
+//     /*drawing->*/UpdateGridBackground();
+       /*drawing->*/update();
+//     zoomIndicator->setText(QString("Grid: %1\", BU: Inch").arg(Object::gridSpacing));
 }
 
 
-void DrawingView::keyReleaseEvent(QKeyEvent * event)
+void DrawingView::keyPressEvent(QKeyEvent * event)
 {
        if (toolAction)
-       {
-               bool needUpdate = toolAction->KeyReleased(event->key());
+               toolAction->KeyDown(event->key());
+}
 
-               if (needUpdate)
-                       update();
-       }
+
+void DrawingView::keyReleaseEvent(QKeyEvent * event)
+{
+       if (toolAction)
+               toolAction->KeyReleased(event->key());
 }