diff --git a/src/Mod/PartDesign/Gui/Command.cpp b/src/Mod/PartDesign/Gui/Command.cpp index f18f5d7b6b..ce7697a86d 100644 --- a/src/Mod/PartDesign/Gui/Command.cpp +++ b/src/Mod/PartDesign/Gui/Command.cpp @@ -649,6 +649,7 @@ void finishFeature(const Gui::Command* cmd, const std::string& FeatName, cmd->copyVisual(FeatName.c_str(), "LineColor", pcActiveBody->getNameInDocument()); cmd->copyVisual(FeatName.c_str(), "PointColor", pcActiveBody->getNameInDocument()); cmd->copyVisual(FeatName.c_str(), "Transparency", pcActiveBody->getNameInDocument()); + cmd->copyVisual(FeatName.c_str(), "DisplayMode", pcActiveBody->getNameInDocument()); } } diff --git a/src/Mod/PartDesign/Gui/ViewProvider.cpp b/src/Mod/PartDesign/Gui/ViewProvider.cpp index 166a51707c..0eac35772d 100644 --- a/src/Mod/PartDesign/Gui/ViewProvider.cpp +++ b/src/Mod/PartDesign/Gui/ViewProvider.cpp @@ -230,12 +230,21 @@ void ViewProvider::setBodyMode(bool bodymode) { std::vector props; getPropertyList(props); + auto vp = getBodyViewProvider(); + if(!vp) + return; + for(App::Property* prop : props) { + //we keep visibility and selectibility per object if(prop == &Visibility || prop == &Selectable) continue; + //we hide only properties which are available in the body, not special ones + if(!vp->getPropertyByName(prop->getName())) + continue; + prop->setStatus(App::Property::Hidden, bodymode); } } @@ -261,6 +270,20 @@ PyObject* ViewProvider::getPyObject() return pyViewObject; } +ViewProviderBody* ViewProvider::getBodyViewProvider() { + + auto body = PartDesign::Body::findBodyOf(getObject()); + auto doc = getDocument(); + if(body && doc) { + auto vp = doc->getViewProvider(body); + if(vp && vp->isDerivedFrom(ViewProviderBody::getClassTypeId())) + return static_cast(vp); + } + + return nullptr; +} + + namespace Gui { /// @cond DOXERR diff --git a/src/Mod/PartDesign/Gui/ViewProvider.h b/src/Mod/PartDesign/Gui/ViewProvider.h index 6abf520676..3b53b0d84a 100644 --- a/src/Mod/PartDesign/Gui/ViewProvider.h +++ b/src/Mod/PartDesign/Gui/ViewProvider.h @@ -25,6 +25,7 @@ #define PARTGUI_ViewProvider_H #include +#include "ViewProviderBody.h" #include @@ -59,6 +60,9 @@ public: //shape of this viewprovider from other viewproviders without doing anything to the //document and properties. void makeTemporaryVisible(bool); + + //Returns the ViewProvider of the body the feature belongs to, or NULL, if not in a body + ViewProviderBody* getBodyViewProvider(); virtual PyObject* getPyObject(void); diff --git a/src/Mod/PartDesign/Gui/ViewProviderBoolean.cpp b/src/Mod/PartDesign/Gui/ViewProviderBoolean.cpp index 48ec58ce83..b4cf192c23 100644 --- a/src/Mod/PartDesign/Gui/ViewProviderBoolean.cpp +++ b/src/Mod/PartDesign/Gui/ViewProviderBoolean.cpp @@ -31,21 +31,30 @@ #include "ViewProviderBoolean.h" #include "TaskBooleanParameters.h" +#include "ViewProviderBody.h" #include +#include #include #include #include #include +#include using namespace PartDesignGui; PROPERTY_SOURCE_WITH_EXTENSIONS(PartDesignGui::ViewProviderBoolean,PartDesignGui::ViewProvider) +const char* PartDesignGui::ViewProviderBoolean::DisplayEnum[] = {"Result","Tools",NULL}; + + ViewProviderBoolean::ViewProviderBoolean() { sPixmap = "PartDesign_Boolean.svg"; initExtension(this); + + ADD_PROPERTY(Display,((long)0)); + Display.setEnums(DisplayEnum); } ViewProviderBoolean::~ViewProviderBoolean() @@ -116,4 +125,27 @@ bool ViewProviderBoolean::onDelete(const std::vector &s) return ViewProvider::onDelete(s); } +void ViewProviderBoolean::attach(App::DocumentObject* obj) { + PartGui::ViewProviderPartExt::attach(obj); + + //set default display mode to override the "Group" display mode + setDisplayMode("Flat Lines"); +} +void ViewProviderBoolean::onChanged(const App::Property* prop) { + + PartDesignGui::ViewProvider::onChanged(prop); + + if(prop == &Display) { + + if(Display.getValue() == 0) { + auto vp = getBodyViewProvider(); + if(vp) + setDisplayMode(vp->DisplayMode.getValueAsString()); + else + setDisplayMode("Flat Lines"); + } else { + setDisplayMode("Group"); + } + } +} diff --git a/src/Mod/PartDesign/Gui/ViewProviderBoolean.h b/src/Mod/PartDesign/Gui/ViewProviderBoolean.h index 726ad0c80c..aa731d7902 100644 --- a/src/Mod/PartDesign/Gui/ViewProviderBoolean.h +++ b/src/Mod/PartDesign/Gui/ViewProviderBoolean.h @@ -41,13 +41,19 @@ public: /// destructor virtual ~ViewProviderBoolean(); + App::PropertyEnumeration Display; + /// grouping handling void setupContextMenu(QMenu*, QObject*, const char*); virtual bool onDelete(const std::vector &); + virtual void attach(App::DocumentObject*); + virtual void onChanged(const App::Property* prop); protected: virtual bool setEdit(int ModNum); + + static const char* DisplayEnum[]; };