]> Shamusworld >> Repos - architektonas/blobdiff - src/applicationwindow.cpp
Layer handling code mostly done; still need to handle layer locking.
[architektonas] / src / applicationwindow.cpp
index 2049a097ca354b54e69297fcbc48d91753b7d528..ac4122da777394a32d15ff908afd487ac88bb682 100644 (file)
 
 #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
@@ -99,13 +89,16 @@ ApplicationWindow::ApplicationWindow():
        Global::font =  new QFont("Verdana", 15, QFont::Bold);
 
        connect(lw, SIGNAL(LayerSelected(int)), drawing, SLOT(SetCurrentLayer(int)));
+       connect(lw, SIGNAL(LayerDeleted(int)), drawing, SLOT(DeleteCurrentLayer(int)));
+       connect(lw, SIGNAL(LayerToggled()), drawing, SLOT(HandleLayerToggle()));
+       connect(lw, SIGNAL(LayersSwapped(int, int)), drawing, SLOT(HandleLayerSwap(int, int)));
 }
 
 
 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 +106,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 +224,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 +253,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();
 }
 
@@ -270,6 +265,11 @@ void ApplicationWindow::RotateTool(void)
 void ApplicationWindow::MirrorTool(void)
 {
        ClearUIToolStatesExcept(mirrorAct);
+
+       // Do tear-down if Rotate tool has been turned off
+       if (!mirrorAct->isChecked())
+               drawing->MirrorHandler(ToolCleanup, Point(0, 0));
+
        SetInternalToolStates();
 }
 
@@ -402,70 +402,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);
-
-       if (exception != rotateAct)
-               rotateAct->setChecked(false);
-
-       if (exception != mirrorAct)
-               mirrorAct->setChecked(false);
+       QAction * actionList[] = {
+               addArcAct, addLineAct, addCircleAct, addDimensionAct, addPolygonAct,
+               addSplineAct, deleteAct, rotateAct, mirrorAct, trimAct, triangulateAct, 0
+       };
 
-       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 +526,7 @@ else
                container->state = OSSelected;
                statusBar()->showMessage(QString(tr("Grouped %1 objects.")).arg(itemsSelected));
        }
+#else
 #endif
 
        drawing->update();
@@ -617,6 +598,7 @@ printf("   -> intersects = %i, t=%lf, u=%lf\n", intersects, t, u);
                        }
                }
        }
+#else
 #endif
 }