From 8d80165e3ab9173b8689b3b3420b40bf3020161f Mon Sep 17 00:00:00 2001 From: Shamus Hammons Date: Thu, 23 Apr 2015 08:20:45 -0500 Subject: [PATCH] Added 'delete selected objects' functionality back. --- src/applicationwindow.cpp | 80 +++++++++++++++++++-------------------- src/drawingview.cpp | 32 +++++++++++++--- src/drawingview.h | 4 +- src/global.cpp | 8 +++- src/global.h | 1 + src/structs.h | 1 + 6 files changed, 77 insertions(+), 49 deletions(-) diff --git a/src/applicationwindow.cpp b/src/applicationwindow.cpp index 2049a09..5a435a2 100644 --- a/src/applicationwindow.cpp +++ b/src/applicationwindow.cpp @@ -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(); diff --git a/src/drawingview.cpp b/src/drawingview.cpp index 58e0979..99c4da9 100644 --- a/src/drawingview.cpp +++ b/src/drawingview.cpp @@ -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::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::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++; } } diff --git a/src/drawingview.h b/src/drawingview.h index 3531291..1046f9c 100644 --- a/src/drawingview.h +++ b/src/drawingview.h @@ -3,8 +3,6 @@ #include #include -//#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; diff --git a/src/global.cpp b/src/global.cpp index be2f219..c52a1ee 100644 --- a/src/global.cpp +++ b/src/global.cpp @@ -2,8 +2,9 @@ // This page intentionally left (mostly) blank // -#include #include "global.h" +#include +#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; diff --git a/src/global.h b/src/global.h index 8143b8d..fb05765 100644 --- a/src/global.h +++ b/src/global.h @@ -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; diff --git a/src/structs.h b/src/structs.h index f1b5ce1..1bbfc3f 100644 --- a/src/structs.h +++ b/src/structs.h @@ -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; \ -- 2.37.2