From 397d7b74c060faf137ced577791be0a2bae8b833 Mon Sep 17 00:00:00 2001 From: wmayer Date: Sun, 1 Oct 2017 19:32:11 +0200 Subject: [PATCH] handle editing of view provider of base feature --- src/Mod/PartDesign/Gui/ViewProviderBase.cpp | 54 +++++++++++++++++++++ src/Mod/PartDesign/Gui/ViewProviderBase.h | 8 ++- 2 files changed, 61 insertions(+), 1 deletion(-) diff --git a/src/Mod/PartDesign/Gui/ViewProviderBase.cpp b/src/Mod/PartDesign/Gui/ViewProviderBase.cpp index 505c64075b..c728137cd8 100644 --- a/src/Mod/PartDesign/Gui/ViewProviderBase.cpp +++ b/src/Mod/PartDesign/Gui/ViewProviderBase.cpp @@ -27,6 +27,8 @@ #endif #include "ViewProviderBase.h" +#include +#include using namespace PartDesignGui; @@ -43,3 +45,55 @@ ViewProviderBase::~ViewProviderBase() } +bool ViewProviderBase::doubleClicked(void) +{ + // If the Placement is mutable then open the transform panel. + // If the Placement can't be modified then just do nothing on double-click. + PartDesign::FeatureBase* base = static_cast(getObject()); + if (!base->Placement.testStatus(App::Property::Immutable) && + !base->Placement.testStatus(App::Property::ReadOnly) && + !base->Placement.testStatus(App::Property::Hidden)) { + + try { + std::string Msg("Edit "); + Msg += base->Label.getValue(); + Gui::Command::openCommand(Msg.c_str()); + Gui::Command::doCommand(Gui::Command::Gui,"Gui.activeDocument().setEdit('%s',0)", + base->getNameInDocument()); + } + catch (const Base::Exception&) { + Gui::Command::abortCommand(); + } + return true; + } + + return false; +} + +void ViewProviderBase::setupContextMenu(QMenu* menu, QObject* receiver, const char* member) +{ + // If the Placement is mutable then show the context-menu of the base class. + PartDesign::FeatureBase* base = static_cast(getObject()); + if (!base->Placement.testStatus(App::Property::Immutable) && + !base->Placement.testStatus(App::Property::ReadOnly) && + !base->Placement.testStatus(App::Property::Hidden)) { + PartDesignGui::ViewProvider::setupContextMenu(menu, receiver, member); + } +} + +bool ViewProviderBase::setEdit(int ModNum) +{ + PartDesign::FeatureBase* base = static_cast(getObject()); + if (!base->Placement.testStatus(App::Property::Immutable) && + !base->Placement.testStatus(App::Property::ReadOnly) && + !base->Placement.testStatus(App::Property::Hidden)) { + return PartGui::ViewProviderPart::setEdit(ModNum); + } + + return false; +} + +void ViewProviderBase::unsetEdit(int ModNum) +{ + PartGui::ViewProviderPart::unsetEdit(ModNum); +} diff --git a/src/Mod/PartDesign/Gui/ViewProviderBase.h b/src/Mod/PartDesign/Gui/ViewProviderBase.h index 07a5da0988..6158fc99b0 100644 --- a/src/Mod/PartDesign/Gui/ViewProviderBase.h +++ b/src/Mod/PartDesign/Gui/ViewProviderBase.h @@ -37,7 +37,13 @@ public: ViewProviderBase(); /// destructor virtual ~ViewProviderBase(); - + + virtual bool doubleClicked(void); + virtual void setupContextMenu(QMenu* menu, QObject* receiver, const char* member); + +protected: + virtual bool setEdit(int ModNum); + virtual void unsetEdit(int ModNum); }; } // namespace PartDesignGui