]> Shamusworld >> Repos - ttedit/blobdiff - src/editwindow.cpp
Added preview window to file loading dialog. :-)
[ttedit] / src / editwindow.cpp
index e4f7d7b81dd47f2e691ff2548042861845573cbf..dac63c28c736d5d3b2cf8bb8d9e8f151684bccec 100644 (file)
@@ -38,6 +38,7 @@
 #include "debug.h"
 #include "global.h"
 #include "mainwindow.h"
+#include "mathconstants.h"
 #include "ttedit.h"
 #include "vector.h"
 
@@ -186,6 +187,23 @@ void EditWindow::paintEvent(QPaintEvent * /*event*/)
                }
        }
 
+       // Draw highlighted point on poly add tool
+       if (tool == TOOLAddPoly)
+       {
+               painter.SetPen(QPen(Qt::red, 1.0, Qt::SolidLine));
+
+               if (addPointOnCurve)
+               {
+                       painter.DrawSquareDotN(addPoint, 7);
+                       painter.DrawSquareDotN(addPoint, 9);
+               }
+               else
+               {
+                       painter.DrawRoundDotN(addPoint, 7);
+                       painter.DrawRoundDotN(addPoint, 9);
+               }
+       }
+
        // Draw curve formed by points
 
        painter.SetPen(QPen(Qt::black, 1.0, Qt::SolidLine));
@@ -393,6 +411,8 @@ void EditWindow::mousePressEvent(QMouseEvent * event)
 
                        update();
                }
+// Moved to mouse up routine, so we can slide the point around
+#if 0
                else if (tool == TOOLAddPoly)   // "Add Poly" tool
                {
 #ifdef DEBUGFOO
@@ -415,6 +435,7 @@ WriteLogMsg("Adding point... # polys: %u, # points: %u", pts.GetNumPolys(), pts.
 WriteLogMsg(" --> [# polys: %u, # points: %u]\n", pts.GetNumPolys(), pts.GetNumPoints());
 #endif
                }
+#endif
                else if (tool == TOOLSelect || tool == TOOLPolySelect)
                {
                        if (pts.GetNumPoints() > 0)
@@ -516,7 +537,7 @@ void EditWindow::mouseMoveEvent(QMouseEvent * event)
                if (tool == TOOLAddPt || tool == TOOLAddPoly || tool == TOOLSelect)
                {
                        // Bail out if we have the select tool and no points yet...
-                       if (tool == TOOLSelect && pts.GetNumPoints() == 0)
+                       if ((tool == TOOLSelect) && (pts.GetNumPoints() == 0))
                                return;
 
 //                     QPoint pt2 = GetAdjustedMousePosition(event);
@@ -525,8 +546,10 @@ void EditWindow::mouseMoveEvent(QMouseEvent * event)
                        if (tool != TOOLSelect)
                        {
                                addPoint = pt2;
+                               ptHighlight = -1;
                                // Prolly should move this to the key handlers below...
-                               addPointOnCurve = ((event->modifiers() == Qt::ShiftModifier) || (event->modifiers() == Qt::ControlModifier) ? false : true);
+//now we do! :-D
+//                             addPointOnCurve = ((event->modifiers() == Qt::ShiftModifier) || (event->modifiers() == Qt::ControlModifier) ? false : true);
                        }
                        else
                                pts.SetXY(ptHighlight, pt2.x, pt2.y);
@@ -559,8 +582,9 @@ void EditWindow::mouseMoveEvent(QMouseEvent * event)
                                }
                                else
                                {
-                                       // Figure out the angle between the "zero" vector and the current one,
-                                       // then rotate all points relative to the "zero" vector (done by paint())
+                                       // Figure out the angle between the "zero" vector and the
+                                       // current one, then rotate all points relative to the
+                                       // "zero" vector (done by paint())
 //                                     QPoint currentPoint = GetAdjustedMousePosition(event);
                                        Vector currentPoint = Painter::QtToCartesianCoords(Vector(event->x(), event->y()));
                                        Vector v1(rotationZeroPoint.x, rotationZeroPoint.y, 0,
@@ -571,8 +595,8 @@ void EditWindow::mouseMoveEvent(QMouseEvent * event)
                                        rotationAngle = v2.Angle(v1);
 
                                        QString s;
-                                       s.sprintf("%.3f degrees", rotationAngle * 180.0 / 3.14159265358979323);
-                                       ((TTEdit *)qApp)->mainWindow->statusBar()->showMessage(s);
+                                       s.sprintf("%.3f degrees", rotationAngle * RADIANS_TO_DEGREES);
+                                       Global::mainWindow->statusBar()->showMessage(s);
                                }
 
                                update();
@@ -699,6 +723,7 @@ void EditWindow::mouseMoveEvent(QMouseEvent * event)
 
                ptPrevious = Vector(event->x(), event->y());
                addPoint = Painter::QtToCartesianCoords(Vector(event->x(), event->y()));
+//handled by real key handlers now...
 //             addPointOnCurve = ((event->modifiers() == Qt::ShiftModifier) || (event->modifiers() == Qt::ControlModifier) ? false : true);
 
                if (tool == TOOLAddPoly)
@@ -753,20 +778,42 @@ void EditWindow::mouseReleaseEvent(QMouseEvent * event)
                        }
 
                        update();
-                       ((TTEdit *)qApp)->mainWindow->statusBar()->showMessage("");
+                       Global::mainWindow->statusBar()->showMessage("");
                }
 
 //             if (tool == TOOLScroll || tool == TOOLZoom)
 //                     ReleaseMouse();
 //this is prolly too much
-               ((TTEdit *)qApp)->charWnd->MakePathFromPoints(&pts);
-               ((TTEdit *)qApp)->charWnd->update();
+               Global::charWnd->MakePathFromPoints(&pts);
+               Global::charWnd->update();
 
                if (tool == TOOLMultiSelect)
                {
                        selectionInProgress = false;
                        update();
                }
+               else if (tool == TOOLAddPoly)   // "Add Poly" tool
+               {
+#ifdef DEBUGFOO
+WriteLogMsg("Adding point... # polys: %u, # points: %u", pts.GetNumPolys(), pts.GetNumPoints());
+#endif
+                       if (polyFirstPoint)
+                       {
+                               polyFirstPoint = false;
+                               pts.AddNewPolyAtEnd();
+                       }
+
+//                     QPoint pt = GetAdjustedMousePosition(event);
+                       Vector pt = Painter::QtToCartesianCoords(Vector(event->x(), event->y()));
+//printf("GetAdjustedMousePosition = %i, %i\n", pt.x(), pt.y());
+                       // Append a point to the end of the structure
+                       pts += IPoint(pt.x, pt.y, addPointOnCurve);
+//                     ptHighlight = pts.GetNumPoints() - 1;
+                       update();
+#ifdef DEBUGFOO
+WriteLogMsg(" --> [# polys: %u, # points: %u]\n", pts.GetNumPolys(), pts.GetNumPoints());
+#endif
+               }
        }
 
        event->accept();
@@ -775,6 +822,15 @@ void EditWindow::mouseReleaseEvent(QMouseEvent * event)
 
 void EditWindow::keyPressEvent(QKeyEvent * event)
 {
+       // We do this here because of the ptHighlight nonsense. If we're in
+       // the add poly tool, we'll never see this if it's under the 'sanity'
+       // check (which is needed for the arrow key shite, but still...)
+       if ((event->key() == Qt::Key_Shift) || (event->key() == Qt::Key_Control))
+       {
+               addPointOnCurve = false;
+               update();
+       }
+
        // Sanity checking...
        if (ptHighlight == -1)
                return;
@@ -789,17 +845,14 @@ void EditWindow::keyPressEvent(QKeyEvent * event)
                pts.SetXY(ptHighlight, pts.GetX(ptHighlight) + 1, pts.GetY(ptHighlight));
        else if (event->key() == Qt::Key_Left)
                pts.SetXY(ptHighlight, pts.GetX(ptHighlight) - 1, pts.GetY(ptHighlight));
-       else if ((event->key() == Qt::Key_Shift) || (event->key() == Qt::Key_Control))
-       {
-               addPointOnCurve = false;
-       }
        else
                return;
 
+//Not need but you need to call the base class for some reason??
 //     event->accept();
        update();
-       ((TTEdit *)qApp)->charWnd->MakePathFromPoints(&pts);
-       ((TTEdit *)qApp)->charWnd->update();
+       Global::charWnd->MakePathFromPoints(&pts);
+       Global::charWnd->update();
 }