X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fapplicationwindow.cpp;h=825eb6dd30d451cf4cefd37438aa8c34d4558c37;hb=06456047e6476969e45be5b1f31b8336ea74c45f;hp=06ec68ce89a6ad4857843b53f53fc13e53320a8b;hpb=db0a3d91f37031e155cc8eac7cfdec9889f233ee;p=architektonas diff --git a/src/applicationwindow.cpp b/src/applicationwindow.cpp index 06ec68c..825eb6d 100644 --- a/src/applicationwindow.cpp +++ b/src/applicationwindow.cpp @@ -30,25 +30,15 @@ #include "about.h" #include "blockwidget.h" -//#include "dimension.h" #include "drawingview.h" -//#include "drawarcaction.h" -//#include "drawcircleaction.h" -//#include "drawdimensionaction.h" -//#include "drawlineaction.h" -//#include "drawsplineaction.h" #include "fileio.h" #include "generaltab.h" -//#include "geometry.h" #include "global.h" #include "layerwidget.h" -//#include "line.h" -//#include "mirroraction.h" #include "painter.h" -//#include "rotateaction.h" #include "settingsdialog.h" -//#include "triangulateaction.h" -//#include "trimaction.h" +#include "structs.h" +#include "utils.h" // Class variables @@ -105,7 +95,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 +103,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 +221,18 @@ 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(); + DeleteSelectedObjects(drawing->document.objects); drawing->update(); deleteAct->setChecked(false); return; } -#endif // Otherwise, toggle the state of the tool ClearUIToolStatesExcept(deleteAct); @@ -263,6 +250,11 @@ void ApplicationWindow::DimensionTool(void) void ApplicationWindow::RotateTool(void) { ClearUIToolStatesExcept(rotateAct); + + // Do tear-down if Rotate tool has been turned off + if (!rotateAct->isChecked()) + drawing->RotateHandler(ToolCleanup, Point(0, 0)); + SetInternalToolStates(); } @@ -344,15 +336,15 @@ when zooming in, new origin will be (xCenter - origin.x) / 2, (yCenter - origin. //printf("Zoom in... Center=%.2f,%.2f; ", center.x, center.y); center = Painter::QtToCartesianCoords(center); //printf("(%.2f,%.2f); origin=%.2f,%.2f; ", center.x, center.y, Painter::origin.x, Painter::origin.y); - Vector newOrigin = center - ((center - Painter::origin) / zoomFactor); + Vector newOrigin = center - ((center - Global::origin) / zoomFactor); //printf("newOrigin=%.2f,%.2f;\n", newOrigin.x, newOrigin.y); - Painter::origin = newOrigin; + Global::origin = newOrigin; //printf("Zoom in... level going from %02f to ", Painter::zoom); // This just zooms leaving origin intact... should zoom in at the current // center! [DONE] - Painter::zoom *= zoomFactor; - Global::gridSpacing = drawing->gridPixels / Painter::zoom; + Global::zoom *= zoomFactor; + Global::gridSpacing = drawing->gridPixels / Global::zoom; drawing->UpdateGridBackground(); drawing->update(); @@ -384,14 +376,14 @@ x 2 = (-426, -301) //printf("(%.2f,%.2f); origin=%.2f,%.2f; ", center.x, center.y, Painter::origin.x, Painter::origin.y); // Vector newOrigin = (center - Painter::origin) * zoomFactor; // Vector newOrigin = center - (Painter::origin * zoomFactor); - Vector newOrigin = center + ((Painter::origin - center) * zoomFactor); + Vector newOrigin = center + ((Global::origin - center) * zoomFactor); //printf("newOrigin=%.2f,%.2f;\n", newOrigin.x, newOrigin.y); - Painter::origin = newOrigin; + Global::origin = newOrigin; //printf("Zoom out...\n"); // This just zooms leaving origin intact... should zoom out at the current // center! [DONE] - Painter::zoom /= zoomFactor; - Global::gridSpacing = drawing->gridPixels / Painter::zoom; + Global::zoom /= zoomFactor; + Global::gridSpacing = drawing->gridPixels / Global::zoom; drawing->UpdateGridBackground(); drawing->update(); @@ -402,70 +394,50 @@ 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); - - if (exception != deleteAct) - deleteAct->setChecked(false); + QAction * actionList[] = { + addArcAct, addLineAct, addCircleAct, addDimensionAct, addPolygonAct, + addSplineAct, deleteAct, rotateAct, mirrorAct, trimAct, triangulateAct, 0 + }; - 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(); - // 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 // old tool needs to be deleted. -#if 0 - if (drawing->toolAction) - { - delete drawing->toolAction; - drawing->toolAction = NULL; - Global::ignoreClicks = false; - } - - drawing->SetToolActive(addLineAct->isChecked() ? new DrawLineAction() : NULL); - drawing->SetToolActive(addCircleAct->isChecked() ? new DrawCircleAction() : NULL); - drawing->SetToolActive(addArcAct->isChecked() ? new DrawArcAction() : NULL); - drawing->SetToolActive(addDimensionAct->isChecked() ? new DrawDimensionAction() : NULL); - drawing->SetToolActive(addSplineAct->isChecked() ? new DrawSplineAction() : NULL); - drawing->SetToolActive(mirrorAct->isChecked() ? new MirrorAction() : NULL); - drawing->SetToolActive(rotateAct->isChecked() ? new RotateAction() : NULL); - drawing->SetToolActive(trimAct->isChecked() ? new TrimAction() : NULL); - drawing->SetToolActive(triangulateAct->isChecked() ? new TriangulateAction() : NULL); - - if (drawing->toolAction) - Global::ignoreClicks = true; -#endif + Global::toolState = TSNone; + + 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; drawing->update(); } @@ -546,6 +518,7 @@ else container->state = OSSelected; statusBar()->showMessage(QString(tr("Grouped %1 objects.")).arg(itemsSelected)); } +#else #endif drawing->update(); @@ -617,6 +590,7 @@ printf(" -> intersects = %i, t=%lf, u=%lf\n", intersects, t, u); } } } +#else #endif } @@ -646,7 +620,7 @@ void ApplicationWindow::HandleGridSizeInBaseUnits(QString text) // drawing->gridSpacing = value; // Painter::zoom = drawing->gridPixels / drawing->gridSpacing; Global::gridSpacing = value; - Painter::zoom = drawing->gridPixels / Global::gridSpacing; + Global::zoom = drawing->gridPixels / Global::gridSpacing; drawing->UpdateGridBackground(); drawing->update(); }