From 4cb2b99e799d81dc8f589c54fb81fe20ef9ec2ad Mon Sep 17 00:00:00 2001 From: Shamus Hammons Date: Sat, 4 Feb 2012 01:07:02 +0000 Subject: [PATCH] Fixed inconsistent tool states. --- src/about.cpp | 2 +- src/applicationwindow.cpp | 59 ++++++++++++++++++++++++++++++--------- src/applicationwindow.h | 2 ++ src/drawingview.cpp | 18 ++++++++---- 4 files changed, 62 insertions(+), 19 deletions(-) diff --git a/src/about.cpp b/src/about.cpp index acf0616..47bde97 100644 --- a/src/about.cpp +++ b/src/about.cpp @@ -78,7 +78,7 @@ AboutWindow::AboutWindow(QWidget * parent/*= 0*/): QWidget(parent, Qt::Dialog) "" "" "" diff --git a/src/applicationwindow.cpp b/src/applicationwindow.cpp index c580cde..36c256f 100644 --- a/src/applicationwindow.cpp +++ b/src/applicationwindow.cpp @@ -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); } diff --git a/src/applicationwindow.h b/src/applicationwindow.h index eca3c65..e75c5fe 100644 --- a/src/applicationwindow.h +++ b/src/applicationwindow.h @@ -36,6 +36,8 @@ class ApplicationWindow: public QMainWindow void Settings(void); private: + void ClearUIToolStatesExcept(QAction *); + void SetInternalToolStates(void); void CreateActions(void); QAction * CreateAction(QString name, QString tooltip, QString statustip, QIcon icon, QKeySequence key, bool checkable = false); diff --git a/src/drawingview.cpp b/src/drawingview.cpp index f5ff2e3..eccb0b1 100644 --- a/src/drawingview.cpp +++ b/src/drawingview.cpp @@ -84,13 +84,17 @@ void DrawingView::SetRotateToolActive(bool state/*= true*/) 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; @@ -103,13 +107,17 @@ void DrawingView::SetAddLineToolActive(bool state/*= true*/) 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; @@ -117,7 +125,7 @@ void DrawingView::SetAddCircleToolActive(bool state/*= true*/) addCircleTool = state; update(); -//printf("DrawingView::SetAddLineToolActive(). toolAction=%08X\n", toolAction); +//printf("DrawingView::SetAddCircleToolActive(). toolAction=%08X\n", toolAction); } void DrawingView::AddNewObjectToDocument(Object * object) -- 2.37.2