diff --git a/src/Mod/PartDesign/Gui/TaskPipeParameters.cpp b/src/Mod/PartDesign/Gui/TaskPipeParameters.cpp index e91022cd28..673614ee6b 100644 --- a/src/Mod/PartDesign/Gui/TaskPipeParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskPipeParameters.cpp @@ -43,15 +43,16 @@ #include #include #include +#include #include #include #include #include #include -#include #include #include #include +#include #include #include #include @@ -248,7 +249,6 @@ void TaskPipeParameters::onTransitionChanged(int idx) void TaskPipeParameters::onButtonRefAdd(bool checked) { if (checked) { - clearButtons(refAdd); //hideObject(); Gui::Selection().clearSelection(); selectionMode = refAdd; @@ -256,7 +256,8 @@ void TaskPipeParameters::onButtonRefAdd(bool checked) } else { Gui::Selection().clearSelection(); - selectionMode = none; + if (selectionMode == refAdd) + selectionMode = none; static_cast(vp)->highlightReferences(ViewProviderPipe::Spine, false); } } @@ -264,7 +265,6 @@ void TaskPipeParameters::onButtonRefAdd(bool checked) void TaskPipeParameters::onButtonRefRemove(bool checked) { if (checked) { - clearButtons(refRemove); //hideObject(); Gui::Selection().clearSelection(); selectionMode = refRemove; @@ -272,7 +272,8 @@ void TaskPipeParameters::onButtonRefRemove(bool checked) } else { Gui::Selection().clearSelection(); - selectionMode = none; + if (selectionMode == refRemove) + selectionMode = none; static_cast(vp)->highlightReferences(ViewProviderPipe::Spine, false); } } @@ -280,7 +281,6 @@ void TaskPipeParameters::onButtonRefRemove(bool checked) void TaskPipeParameters::onBaseButton(bool checked) { if (checked) { - clearButtons(refObjAdd); //hideObject(); Gui::Selection().clearSelection(); selectionMode = refObjAdd; @@ -288,7 +288,8 @@ void TaskPipeParameters::onBaseButton(bool checked) } else { Gui::Selection().clearSelection(); - selectionMode = none; + if (selectionMode == refObjAdd) + selectionMode = none; static_cast(vp)->highlightReferences(ViewProviderPipe::Spine, false); } } @@ -304,7 +305,6 @@ void TaskPipeParameters::onProfileButton(bool checked) pvp->setVisible(true); } - clearButtons(refProfile); //hideObject(); Gui::Selection().clearSelection(); selectionMode = refProfile; @@ -312,7 +312,8 @@ void TaskPipeParameters::onProfileButton(bool checked) } else { Gui::Selection().clearSelection(); - selectionMode = none; + if (selectionMode == refProfile) + selectionMode = none; static_cast(vp)->highlightReferences(ViewProviderPipe::Profile, false); } } @@ -700,14 +701,14 @@ void TaskPipeOrientation::exitSelectionMode() void TaskPipeOrientation::onButtonRefAdd(bool checked) { if (checked) { - clearButtons(refAdd); Gui::Selection().clearSelection(); selectionMode = refAdd; static_cast(vp)->highlightReferences(ViewProviderPipe::AuxiliarySpine, true); } else { Gui::Selection().clearSelection(); - selectionMode = none; + if (selectionMode == refAdd) + selectionMode = none; static_cast(vp)->highlightReferences(ViewProviderPipe::AuxiliarySpine, false); } } @@ -715,14 +716,14 @@ void TaskPipeOrientation::onButtonRefAdd(bool checked) void TaskPipeOrientation::onButtonRefRemove(bool checked) { if (checked) { - clearButtons(refRemove); Gui::Selection().clearSelection(); selectionMode = refRemove; static_cast(vp)->highlightReferences(ViewProviderPipe::AuxiliarySpine, true); } else { Gui::Selection().clearSelection(); - selectionMode = none; + if (selectionMode == refRemove) + selectionMode = none; static_cast(vp)->highlightReferences(ViewProviderPipe::AuxiliarySpine, false); } } @@ -730,14 +731,14 @@ void TaskPipeOrientation::onButtonRefRemove(bool checked) void TaskPipeOrientation::onBaseButton(bool checked) { if (checked) { - clearButtons(refObjAdd); Gui::Selection().clearSelection(); selectionMode = refObjAdd; static_cast(vp)->highlightReferences(ViewProviderPipe::AuxiliarySpine, true); } else { Gui::Selection().clearSelection(); - selectionMode = none; + if (selectionMode == refObjAdd) + selectionMode = none; static_cast(vp)->highlightReferences(ViewProviderPipe::AuxiliarySpine, false); } } @@ -1009,14 +1010,14 @@ void TaskPipeScaling::exitSelectionMode() void TaskPipeScaling::onButtonRefAdd(bool checked) { if (checked) { - clearButtons(refAdd); Gui::Selection().clearSelection(); selectionMode = refAdd; static_cast(vp)->highlightReferences(ViewProviderPipe::Section, true); } else { Gui::Selection().clearSelection(); - selectionMode = none; + if (selectionMode == refAdd) + selectionMode = none; static_cast(vp)->highlightReferences(ViewProviderPipe::Section, false); } } @@ -1024,14 +1025,14 @@ void TaskPipeScaling::onButtonRefAdd(bool checked) void TaskPipeScaling::onButtonRefRemove(bool checked) { if (checked) { - clearButtons(refRemove); Gui::Selection().clearSelection(); selectionMode = refRemove; static_cast(vp)->highlightReferences(ViewProviderPipe::Section, true); } else { Gui::Selection().clearSelection(); - selectionMode = none; + if (selectionMode == refRemove) + selectionMode = none; static_cast(vp)->highlightReferences(ViewProviderPipe::Section, false); } } @@ -1180,6 +1181,22 @@ TaskDlgPipeParameters::TaskDlgPipeParameters(ViewProviderPipe *PipeView,bool new Content.push_back(parameter); Content.push_back(orientation); Content.push_back(scaling); + + + buttonGroup = new ButtonGroup(this); + buttonGroup->setExclusive(true); + + buttonGroup->addButton(parameter->ui->buttonProfileBase); + buttonGroup->addButton(parameter->ui->buttonRefAdd); + buttonGroup->addButton(parameter->ui->buttonRefRemove); + buttonGroup->addButton(parameter->ui->buttonSpineBase); + + buttonGroup->addButton(orientation->ui->buttonRefAdd); + buttonGroup->addButton(orientation->ui->buttonRefRemove); + buttonGroup->addButton(orientation->ui->buttonProfileBase); + + buttonGroup->addButton(scaling->ui->buttonRefAdd); + buttonGroup->addButton(scaling->ui->buttonRefRemove); } TaskDlgPipeParameters::~TaskDlgPipeParameters() diff --git a/src/Mod/PartDesign/Gui/TaskPipeParameters.h b/src/Mod/PartDesign/Gui/TaskPipeParameters.h index f080561792..e365a5b001 100644 --- a/src/Mod/PartDesign/Gui/TaskPipeParameters.h +++ b/src/Mod/PartDesign/Gui/TaskPipeParameters.h @@ -27,6 +27,7 @@ #include #include #include +#include #include "TaskSketchBasedParameters.h" #include "ViewProviderPipe.h" @@ -91,6 +92,7 @@ private: private: QWidget* proxy; std::unique_ptr ui; + friend class TaskDlgPipeParameters; }; class TaskPipeOrientation : public TaskSketchBasedParameters @@ -128,6 +130,7 @@ private: private: QWidget* proxy; std::unique_ptr ui; + friend class TaskDlgPipeParameters; }; @@ -162,6 +165,7 @@ private: private: QWidget* proxy; std::unique_ptr ui; + friend class TaskDlgPipeParameters; }; @@ -183,6 +187,8 @@ protected: TaskPipeParameters *parameter; TaskPipeOrientation *orientation; TaskPipeScaling *scaling; + + Gui::ButtonGroup *buttonGroup; }; } //namespace PartDesignGui