]> Shamusworld >> Repos - architektonas/blobdiff - src/applicationwindow.cpp
Fixed inconsistent tool states.
[architektonas] / src / applicationwindow.cpp
index c580cde948ab4b37535ec2b5f395600fe83cbb0d..36c256fb588fb789a7d968f39c84da871c34d8f0 100644 (file)
@@ -88,37 +88,36 @@ void ApplicationWindow::FixLength(void)
        Object::SetFixedLength(fixLengthAct->isChecked());
 }
 
+// We want certain tools to be exclusive, and this approach isn't working correctly...
 void ApplicationWindow::DeleteTool(void)
 {
-       Object::SetDeleteActive(deleteAct->isChecked());
+       
+       ClearUIToolStatesExcept(deleteAct);
+       SetInternalToolStates();
 }
 
 void ApplicationWindow::DimensionTool(void)
 {
-       Object::SetDimensionActive(addDimensionAct->isChecked());
+       ClearUIToolStatesExcept(addDimensionAct);
+       SetInternalToolStates();
 }
 
 void ApplicationWindow::RotateTool(void)
 {
-       drawing->SetRotateToolActive(rotateAct->isChecked());
+       ClearUIToolStatesExcept(rotateAct);
+       SetInternalToolStates();
 }
 
 void ApplicationWindow::AddLineTool(void)
 {
-       addCircleAct->setChecked(false);
-       addArcAct->setChecked(false);
-       rotateAct->setChecked(false);
-       RotateTool();
-       drawing->SetAddLineToolActive(addLineAct->isChecked());
+       ClearUIToolStatesExcept(addLineAct);
+       SetInternalToolStates();
 }
 
 void ApplicationWindow::AddCircleTool(void)
 {
-       addLineAct->setChecked(false);
-       addArcAct->setChecked(false);
-       rotateAct->setChecked(false);
-       RotateTool();
-       drawing->SetAddCircleToolActive(addCircleAct->isChecked());
+       ClearUIToolStatesExcept(addCircleAct);
+       SetInternalToolStates();
 }
 
 void ApplicationWindow::ZoomInTool(void)
@@ -184,6 +183,39 @@ x 2 = (-426, -301)
        drawing->update();
 }
 
+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 != deleteAct)
+               deleteAct->setChecked(false);
+
+       if (exception != rotateAct)
+               rotateAct->setChecked(false);
+}
+
+void ApplicationWindow::SetInternalToolStates(void)
+{
+       Object::SetDeleteActive(deleteAct->isChecked());
+       Object::SetDimensionActive(addDimensionAct->isChecked());
+       drawing->SetRotateToolActive(rotateAct->isChecked());
+       drawing->SetAddLineToolActive(addLineAct->isChecked());
+       drawing->SetAddCircleToolActive(addCircleAct->isChecked());
+}
+
 void ApplicationWindow::HelpAbout(void)
 {
        aboutWin->show();
@@ -351,6 +383,7 @@ void ApplicationWindow::CreateToolbars(void)
        toolbar->addAction(addLineAct);
        toolbar->addAction(addCircleAct);
        toolbar->addAction(addArcAct);
+       toolbar->addAction(addPolygonAct);
        toolbar->addAction(addDimensionAct);
 }