]> Shamusworld >> Repos - architektonas/commitdiff
Added 'delete selected objects' functionality back.
authorShamus Hammons <jlhamm@acm.org>
Thu, 23 Apr 2015 13:20:45 +0000 (08:20 -0500)
committerShamus Hammons <jlhamm@acm.org>
Thu, 23 Apr 2015 13:20:45 +0000 (08:20 -0500)
src/applicationwindow.cpp
src/drawingview.cpp
src/drawingview.h
src/global.cpp
src/global.h
src/structs.h

index 2049a097ca354b54e69297fcbc48d91753b7d528..5a435a21ae3e6bfe8d82cffdf3408afaa9181f82 100644 (file)
@@ -47,6 +47,7 @@
 #include "painter.h"
 //#include "rotateaction.h"
 #include "settingsdialog.h"
+#include "structs.h"
 //#include "triangulateaction.h"
 //#include "trimaction.h"
 
@@ -105,7 +106,7 @@ ApplicationWindow::ApplicationWindow():
 void ApplicationWindow::closeEvent(QCloseEvent * event)
 {
        WriteSettings();
-       event->accept();                                                        // Use ignore() if can't close for some reason
+       event->accept();                // Use ignore() if can't close for some reason
        //Do we have a memory leak here if we don't delete the font in the Object???
 }
 
@@ -113,7 +114,6 @@ void ApplicationWindow::closeEvent(QCloseEvent * event)
 void ApplicationWindow::FileNew(void)
 {
        // Should warn the user if drawing hasn't been saved...
-//     drawing->document.Clear();
        drawing->document.objects.empty();
        drawing->update();
        documentName.clear();
@@ -232,20 +232,17 @@ void ApplicationWindow::FixLength(void)
 }
 
 
-// We want certain tools to be exclusive, and this approach isn't working correctly...
 void ApplicationWindow::DeleteTool(void)
 {
        // For this tool, we check first to see if anything is selected. If so, we
        // delete those and *don't* select the delete tool.
-#if 0
-       if (drawing->document.ItemsSelected() > 0)
+       if (drawing->numSelected > 0)
        {
-               drawing->document.DeleteSelectedItems();
+               drawing->DeleteSelectedItems();
                drawing->update();
                deleteAct->setChecked(false);
                return;
        }
-#endif
 
        // Otherwise, toggle the state of the tool
        ClearUIToolStatesExcept(deleteAct);
@@ -402,45 +399,23 @@ x 2 = (-426, -301)
 
 void ApplicationWindow::ClearUIToolStatesExcept(QAction * exception)
 {
-       if (exception != addArcAct)
-               addArcAct->setChecked(false);
-
-       if (exception != addCircleAct)
-               addCircleAct->setChecked(false);
-
-       if (exception != addDimensionAct)
-               addDimensionAct->setChecked(false);
-
-       if (exception != addLineAct)
-               addLineAct->setChecked(false);
-
-       if (exception != addPolygonAct)
-               addPolygonAct->setChecked(false);
-
-       if (exception != addSplineAct)
-               addSplineAct->setChecked(false);
+       QAction * actionList[] = {
+               addArcAct, addLineAct, addCircleAct, addDimensionAct, addPolygonAct,
+               addSplineAct, deleteAct, rotateAct, mirrorAct, trimAct, triangulateAct, 0
+       };
 
-       if (exception != deleteAct)
-               deleteAct->setChecked(false);
-
-       if (exception != rotateAct)
-               rotateAct->setChecked(false);
-
-       if (exception != mirrorAct)
-               mirrorAct->setChecked(false);
-
-       if (exception != trimAct)
-               trimAct->setChecked(false);
-
-       if (exception != triangulateAct)
-               triangulateAct->setChecked(false);
+       for(int i=0; actionList[i]!=0; i++)
+       {
+               if (actionList[i] != exception)
+                       actionList[i]->setChecked(false);
+       }
 }
 
 
 void ApplicationWindow::SetInternalToolStates(void)
 {
-       Global::deleteActive = deleteAct->isChecked();
-       Global::dimensionActive = addDimensionAct->isChecked();
+//     Global::deleteActive = deleteAct->isChecked();
+//     Global::dimensionActive = addDimensionAct->isChecked();
 
        // We can be sure that if we've come here, then either an active tool is
        // being deactivated, or a new tool is being created. In either case, the
@@ -465,6 +440,31 @@ void ApplicationWindow::SetInternalToolStates(void)
 
        if (drawing->toolAction)
                Global::ignoreClicks = true;
+#else
+       if (addLineAct->isChecked())
+               Global::tool = TTLine;
+       else if (addCircleAct->isChecked())
+               Global::tool = TTCircle;
+       else if (addArcAct->isChecked())
+               Global::tool = TTArc;
+       else if (addDimensionAct->isChecked())
+               Global::tool = TTDimension;
+       else if (addSplineAct->isChecked())
+               Global::tool = TTSpline;
+       else if (addPolygonAct->isChecked())
+               Global::tool = TTPolygon;
+       else if (deleteAct->isChecked())
+               Global::tool = TTDelete;
+       else if (mirrorAct->isChecked())
+               Global::tool = TTMirror;
+       else if (rotateAct->isChecked())
+               Global::tool = TTRotate;
+       else if (trimAct->isChecked())
+               Global::tool = TTTrim;
+       else if (triangulateAct->isChecked())
+               Global::tool = TTTriangulate;
+       else
+               Global::tool = TTNone;
 #endif
 
        drawing->update();
index 58e0979495b3794d2df175ced51453ac6b6a912b..99c4da9f2779054f5edbb6e607ee4e4f8f44371e 100644 (file)
@@ -45,7 +45,7 @@
 
 DrawingView::DrawingView(QWidget * parent/*= NULL*/): QWidget(parent),
        // The value in the settings file will override this.
-       useAntialiasing(true),
+       useAntialiasing(true), numSelected(0),
        gridBackground(BACKGROUND_MAX_SIZE, BACKGROUND_MAX_SIZE),
        scale(1.0), offsetX(-10), offsetY(-10),// document(Vector(0, 0)),
        gridPixels(0), collided(false)//, toolAction(NULL)
@@ -90,7 +90,7 @@ DrawingView::DrawingView(QWidget * parent/*= NULL*/): QWidget(parent),
        document.objects.push_back(new Arc(Vector(300, 300), 32, PI / 4.0, PI * 1.3)),
        document.objects.push_back(new Arc(Vector(200, 200), 60, PI / 2.0, PI * 1.5));
        document.objects.push_back(new Dimension(Vector(50, 40), Vector(5, 5)));
-       document.objects.push_back(new Text(Vector(10, 83), "Tyegxt!"));
+       document.objects.push_back(new Text(Vector(10, 83), "Here is some awesome text!"));
 #endif
 
 /*
@@ -511,10 +511,7 @@ void DrawingView::RenderObjects(Painter * painter, Container * c)
                case OTText:
                {
                        Text * t = (Text *)obj;
-
-                       for(float angle=0; angle<(PI*3.0/2.0); angle+=PI/8.0)
-                               painter->DrawTextObject(t->p1, t->s.c_str(), scaledThickness, angle);
-
+                       painter->DrawTextObject(t->p1, t->s.c_str(), scaledThickness);
                        break;
                }
                default:
@@ -524,6 +521,25 @@ void DrawingView::RenderObjects(Painter * painter, Container * c)
 }
 
 
+void DrawingView::DeleteSelectedItems(void)
+{
+       std::vector<void *>::iterator i = document.objects.begin();
+
+       while (i != document.objects.end())
+       {
+               Object * obj = (Object *)(*i);
+
+               if (obj->selected)
+               {
+                       delete obj;
+                       document.objects.erase(i);
+               }
+               else
+                       i++;
+       }
+}
+
+
 void DrawingView::resizeEvent(QResizeEvent * /*event*/)
 {
        Global::screenSize = Vector(size().width(), size().height());
@@ -625,6 +641,7 @@ void DrawingView::mouseMoveEvent(QMouseEvent * event)
        {
                std::vector<void *>::iterator i;
 //             QRectF bounds;
+               numSelected = 0;
 
                for(i=document.objects.begin(); i!=document.objects.end(); i++)
                {
@@ -720,6 +737,9 @@ void DrawingView::mouseMoveEvent(QMouseEvent * event)
                        default:
                                break;
                        }
+
+                       if (obj->selected)
+                               numSelected++;
                }
        }
 
index 3531291ac5bb4b1f51d84b65068032ebd6394171..1046f9c0938164b49cac58e07991d634f89f31b3 100644 (file)
@@ -3,8 +3,6 @@
 
 #include <QtWidgets>
 #include <stdint.h>
-//#include "action.h"
-//#include "container.h"
 #include "structs.h"
 
 class Painter;
@@ -22,6 +20,7 @@ class DrawingView: public QWidget
                void UpdateGridBackground(void);
                Point SnapPointToGrid(Point);
                void RenderObjects(Painter *, Container *);
+               void DeleteSelectedItems(void);
 
        public slots:
                void AddNewObjectToDocument(Object *);
@@ -44,6 +43,7 @@ class DrawingView: public QWidget
 
        public:
                bool useAntialiasing;
+               uint32_t numSelected;
 
        private:
                QPixmap gridBackground;
index be2f219bcda8257c32fff40d50177ba720351c9a..c52a1ee66474772336d5f29403266b23b66577a5 100644 (file)
@@ -2,8 +2,9 @@
 // This page intentionally left (mostly) blank
 //
 
-#include <QFont>
 #include "global.h"
+#include <QFont>
+#include "structs.h"
 
 // Initialize static variables
 
@@ -11,14 +12,19 @@ bool Global::fixedAngle = false;
 bool Global::fixedLength = false;
 QFont * Global::font = 0;
 int Global::viewportHeight = 0;
+
 bool Global::deleteActive = false;
 bool Global::dimensionActive = false;
 bool Global::snapToGrid = true;
+
 //snapToPoints all well here?
 bool Global::ignoreClicks = false;
 bool Global::dontMove = false;
 bool Global::selectionInProgress = false;
 QRectF Global::selection;
+
+int Global::tool = TTNone;
+
 double Global::gridSpacing;
 int Global::currentLayer = 0;
 Point Global::snapPoint;
index 8143b8d0e10183ab5e735d94daf252ad27f7b3b8..fb057652e2b3a4956778a610d3d4a9186835df7f 100644 (file)
@@ -34,6 +34,7 @@ class Global
                static bool ignoreClicks;
                static bool dontMove;
                static uint32_t objectID;
+               static int tool;
 
                static Point origin;
                static double zoom;
index f1b5ce1cf722dc06b6fd4b4050173f75f3834e17..1bbfc3fdc589fc3ed619808f8be390c5bd725a0c 100644 (file)
@@ -11,6 +11,7 @@ enum ObjectType { OTNone, OTLine, OTCircle, OTEllipse, OTArc, OTDimension, OTSpl
 
 enum DimensionType { DTLinear, DTLinearVert, DTLinearHorz, DTRadial, DTDiametric, DTCircumferential, DTAngular, DTLeader };
 
+enum ToolType { TTNone, TTLine, TTCircle, TTEllipse, TTArc, TTDimension, TTText, TTPolygon, TTSpline, TTRotate, TTMirror, TTTrim, TTTriangulate, TTDelete };
 
 #define OBJECT_COMMON \
        int type;         \