From 72821eb51378cf4f78fd80918129a56a4bef4827 Mon Sep 17 00:00:00 2001 From: Max Wilfinger Date: Wed, 27 Dec 2023 09:10:30 +0100 Subject: [PATCH] Change the description of the default 'Toggle active object' command in the right click menu based on the current state of the selected object. --- src/Gui/ViewProviderPart.cpp | 19 +++++++++++++++++-- src/Mod/PartDesign/Gui/ViewProviderBody.cpp | 15 ++++++++++++++- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/src/Gui/ViewProviderPart.cpp b/src/Gui/ViewProviderPart.cpp index 21f8f3d310..0c9dbd38d5 100644 --- a/src/Gui/ViewProviderPart.cpp +++ b/src/Gui/ViewProviderPart.cpp @@ -68,11 +68,26 @@ void ViewProviderPart::onChanged(const App::Property* prop) { void ViewProviderPart::setupContextMenu(QMenu* menu, QObject* receiver, const char* member) { + App::DocumentObject* activePart = nullptr; + auto activeDoc = Gui::Application::Instance->activeDocument(); + if(!activeDoc) + activeDoc = getDocument(); + auto activeView = activeDoc->setActiveView(this); + activePart = activeView->getActiveObject (PARTKEY); + auto func = new Gui::ActionFunction(menu); - QAction* act = menu->addAction(QObject::tr("Toggle active part")); - func->trigger(act, [this](){ + + if (activePart == this->getObject()){ + QAction* act = menu->addAction(QObject::tr("Unset active object")); + func->trigger(act, [this](){ this->doubleClicked(); }); + } else { + QAction* act = menu->addAction(QObject::tr("Set active object")); + func->trigger(act, [this](){ + this->doubleClicked(); + }); + } ViewProviderDragger::setupContextMenu(menu, receiver, member); } diff --git a/src/Mod/PartDesign/Gui/ViewProviderBody.cpp b/src/Mod/PartDesign/Gui/ViewProviderBody.cpp index 59341b9822..697d9ce879 100644 --- a/src/Mod/PartDesign/Gui/ViewProviderBody.cpp +++ b/src/Mod/PartDesign/Gui/ViewProviderBody.cpp @@ -132,10 +132,23 @@ void ViewProviderBody::setupContextMenu(QMenu* menu, QObject* receiver, const ch Q_UNUSED(receiver); Q_UNUSED(member); Gui::ActionFunction* func = new Gui::ActionFunction(menu); - QAction* act = menu->addAction(tr("Toggle active body")); + + auto activeDoc = Gui::Application::Instance->activeDocument(); + if(!activeDoc) + activeDoc = getDocument(); + auto activeView = activeDoc->setActiveView(this); + + if (activeView->isActiveObject(getObject(),PDBODYKEY)) { + QAction* act = menu->addAction(tr("Unset active body")); func->trigger(act, [this]() { this->doubleClicked(); }); + } else { + QAction* act = menu->addAction(tr("Set active body")); + func->trigger(act, [this]() { + this->doubleClicked(); + }); + } Gui::ViewProviderGeometryObject::setupContextMenu(menu, receiver, member); // clazy:exclude=skipped-base-method }