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)
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();
toolbar->addAction(addLineAct);
toolbar->addAction(addCircleAct);
toolbar->addAction(addArcAct);
+ toolbar->addAction(addPolygonAct);
toolbar->addAction(addDimensionAct);
}
void DrawingView::SetAddLineToolActive(bool state/*= true*/)
{
- if (state && toolAction == NULL)
+ if (state)// && toolAction == NULL)
{
+ if (toolAction)
+ delete toolAction;
+
+ addCircleTool = false;
toolAction = new DrawLineAction();
connect(toolAction, SIGNAL(ObjectReady(Object *)), this,
SLOT(AddNewObjectToDocument(Object *)));
}
- else if (!state && toolAction)
+ else if (!state && addLineTool && toolAction)
{
delete toolAction;
toolAction = NULL;
void DrawingView::SetAddCircleToolActive(bool state/*= true*/)
{
- if (state && toolAction == NULL)
+ if (state)// && toolAction == NULL)
{
+ if (toolAction)
+ delete toolAction;
+
+ addLineTool = false;
toolAction = new DrawCircleAction();
connect(toolAction, SIGNAL(ObjectReady(Object *)), this,
SLOT(AddNewObjectToDocument(Object *)));
}
- else if (!state && toolAction)
+ else if (!state && addCircleTool && toolAction)
{
delete toolAction;
toolAction = NULL;
addCircleTool = state;
update();
-//printf("DrawingView::SetAddLineToolActive(). toolAction=%08X\n", toolAction);
+//printf("DrawingView::SetAddCircleToolActive(). toolAction=%08X\n", toolAction);
}
void DrawingView::AddNewObjectToDocument(Object * object)