]> Shamusworld >> Repos - architektonas/blobdiff - src/applicationwindow.cpp
Added new triangulation tool, ability to snap to endpoints/intersections.
[architektonas] / src / applicationwindow.cpp
index 23c865427f64ecc2971695db553567908cb870ff..ad3bc8d9ec0b4c209087f7d58d39e8c79c427fc2 100644 (file)
@@ -46,6 +46,7 @@
 #include "painter.h"
 #include "rotateaction.h"
 #include "settingsdialog.h"
+#include "triangulateaction.h"
 #include "trimaction.h"
 
 
@@ -276,6 +277,13 @@ void ApplicationWindow::TrimTool(void)
 }
 
 
+void ApplicationWindow::TriangulateTool(void)
+{
+       ClearUIToolStatesExcept(triangulateAct);
+       SetInternalToolStates();
+}
+
+
 void ApplicationWindow::AddLineTool(void)
 {
        ClearUIToolStatesExcept(addLineAct);
@@ -419,6 +427,9 @@ void ApplicationWindow::ClearUIToolStatesExcept(QAction * exception)
 
        if (exception != trimAct)
                trimAct->setChecked(false);
+
+       if (exception != triangulateAct)
+               triangulateAct->setChecked(false);
 }
 
 
@@ -445,6 +456,7 @@ void ApplicationWindow::SetInternalToolStates(void)
        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)
                Object::ignoreClicks = true;
@@ -730,6 +742,9 @@ void ApplicationWindow::CreateActions(void)
        trimAct = CreateAction(tr("&Trim"), tr("Trim"), tr("Trim extraneous lines from selected objects."), QIcon(":/res/trim-tool.png"), QKeySequence("t,r"), true);
        connect(trimAct, SIGNAL(triggered()), this, SLOT(TrimTool()));
 
+       triangulateAct = CreateAction(tr("&Triangulate"), tr("Triangulate"), tr("Make triangles from selected lines, preserving their lengths."), QIcon(":/res/triangulate-tool.png"), QKeySequence("t,g"), true);
+       connect(triangulateAct, SIGNAL(triggered()), this, SLOT(TriangulateTool()));
+
 
 //Hm. I think we'll have to have separate logic to do the "Radio Group Toolbar" thing...
 // Yup, in order to turn them off, we'd have to have an "OFF" toolbar button. Ick.
@@ -801,6 +816,7 @@ void ApplicationWindow::CreateMenus(void)
        menu->addAction(rotateAct);
        menu->addAction(mirrorAct);
        menu->addAction(trimAct);
+       menu->addAction(triangulateAct);
        menu->addAction(connectAct);
        menu->addAction(disconnectAct);
        menu->addSeparator();
@@ -851,6 +867,7 @@ void ApplicationWindow::CreateToolbars(void)
        toolbar->addAction(rotateAct);
        toolbar->addAction(mirrorAct);
        toolbar->addAction(trimAct);
+       toolbar->addAction(triangulateAct);
        toolbar->addAction(deleteAct);
        toolbar->addAction(connectAct);
        toolbar->addAction(disconnectAct);