diff --git a/src/Gui/ViewProviderBuilder.cpp b/src/Gui/ViewProviderBuilder.cpp index 4bcb73f73..66dde49e3 100644 --- a/src/Gui/ViewProviderBuilder.cpp +++ b/src/Gui/ViewProviderBuilder.cpp @@ -28,6 +28,8 @@ #endif #include "ViewProviderBuilder.h" +#include "SoFCSelection.h" +#include "Window.h" #include using namespace Gui; @@ -55,6 +57,40 @@ ViewProvider* ViewProviderBuilder::create(const Base::Type& type) return 0; } +Gui::SoFCSelection* ViewProviderBuilder::createSelection() +{ + Gui::SoFCSelection* sel = new Gui::SoFCSelection(); + + float transparency; + ParameterGrp::handle hGrp = Gui::WindowParameter::getDefaultParameter()->GetGroup("View"); + bool enablePre = hGrp->GetBool("EnablePreselection", true); + bool enableSel = hGrp->GetBool("EnableSelection", true); + if (!enablePre) { + sel->highlightMode = Gui::SoFCSelection::OFF; + } + else { + // Search for a user defined value with the current color as default + SbColor highlightColor = sel->colorHighlight.getValue(); + unsigned long highlight = (unsigned long)(highlightColor.getPackedValue()); + highlight = hGrp->GetUnsigned("HighlightColor", highlight); + highlightColor.setPackedValue((uint32_t)highlight, transparency); + sel->colorHighlight.setValue(highlightColor); + } + if (!enableSel) { + sel->selectionMode = Gui::SoFCSelection::SEL_OFF; + } + else { + // Do the same with the selection color + SbColor selectionColor = sel->colorSelection.getValue(); + unsigned long selection = (unsigned long)(selectionColor.getPackedValue()); + selection = hGrp->GetUnsigned("SelectionColor", selection); + selectionColor.setPackedValue((uint32_t)selection, transparency); + sel->colorSelection.setValue(selectionColor); + } + + return sel; +} + // -------------------------------------- ViewProviderColorBuilder::ViewProviderColorBuilder() diff --git a/src/Gui/ViewProviderBuilder.h b/src/Gui/ViewProviderBuilder.h index b97d57d1f..0cd3dbf0a 100644 --- a/src/Gui/ViewProviderBuilder.h +++ b/src/Gui/ViewProviderBuilder.h @@ -40,6 +40,7 @@ namespace Gui { class ViewProvider; +class SoFCSelection; class GuiExport ViewProviderBuilder { public: @@ -50,6 +51,7 @@ public: static void add(const Base::Type&, const Base::Type&); static ViewProvider* create(const Base::Type&); + static SoFCSelection* createSelection(); private: static std::map _prop_to_view; diff --git a/src/Mod/Mesh/Gui/ViewProvider.cpp b/src/Mod/Mesh/Gui/ViewProvider.cpp index fc0b8dd50..c8389960e 100644 --- a/src/Mod/Mesh/Gui/ViewProvider.cpp +++ b/src/Mod/Mesh/Gui/ViewProvider.cpp @@ -244,7 +244,7 @@ ViewProviderMesh::ViewProviderMesh() : pcOpenEdge(0) ADD_PROPERTY(LineColor,(0,0,0)); // Create the selection node - pcHighlight = createFromSettings(); + pcHighlight = Gui::ViewProviderBuilder::createSelection(); pcHighlight->ref(); if (pcHighlight->selectionMode.getValue() == Gui::SoFCSelection::SEL_OFF) Selectable.setValue(false); @@ -325,40 +325,6 @@ ViewProviderMesh::~ViewProviderMesh() pLineColor->unref(); } -Gui::SoFCSelection* ViewProviderMesh::createFromSettings() const -{ - Gui::SoFCSelection* sel = new Gui::SoFCSelection(); - - float transparency; - ParameterGrp::handle hGrp = Gui::WindowParameter::getDefaultParameter()->GetGroup("View"); - bool enablePre = hGrp->GetBool("EnablePreselection", true); - bool enableSel = hGrp->GetBool("EnableSelection", true); - if (!enablePre) { - sel->highlightMode = Gui::SoFCSelection::OFF; - } - else { - // Search for a user defined value with the current color as default - SbColor highlightColor = sel->colorHighlight.getValue(); - unsigned long highlight = (unsigned long)(highlightColor.getPackedValue()); - highlight = hGrp->GetUnsigned("HighlightColor", highlight); - highlightColor.setPackedValue((uint32_t)highlight, transparency); - sel->colorHighlight.setValue(highlightColor); - } - if (!enableSel || !Selectable.getValue()) { - sel->selectionMode = Gui::SoFCSelection::SEL_OFF; - } - else { - // Do the same with the selection color - SbColor selectionColor = sel->colorSelection.getValue(); - unsigned long selection = (unsigned long)(selectionColor.getPackedValue()); - selection = hGrp->GetUnsigned("SelectionColor", selection); - selectionColor.setPackedValue((uint32_t)selection, transparency); - sel->colorSelection.setValue(selectionColor); - } - - return sel; -} - void ViewProviderMesh::onChanged(const App::Property* prop) { // we gonna change the number of colors to one @@ -474,7 +440,7 @@ void ViewProviderMesh::attach(App::DocumentObject *pcFeat) addDisplayMaskMode(pcWireRoot, "Wireframe"); // faces+wires - Gui::SoFCSelection* selGroup = createFromSettings(); + Gui::SoFCSelection* selGroup = Gui::ViewProviderBuilder::createSelection(); selGroup->objectName = getObject()->getNameInDocument(); selGroup->documentName = getObject()->getDocument()->getName(); selGroup->subElementName = "Main"; diff --git a/src/Mod/Mesh/Gui/ViewProvider.h b/src/Mod/Mesh/Gui/ViewProvider.h index d0e5af03d..18fd34589 100644 --- a/src/Mod/Mesh/Gui/ViewProvider.h +++ b/src/Mod/Mesh/Gui/ViewProvider.h @@ -184,7 +184,6 @@ protected: virtual SoShape* getShapeNode() const; virtual SoNode* getCoordNode() const; - Gui::SoFCSelection* createFromSettings() const; public: static void faceInfoCallback(void * ud, SoEventCallback * n); diff --git a/src/Mod/Points/Gui/ViewProvider.cpp b/src/Mod/Points/Gui/ViewProvider.cpp index 5d41b4a5a..e6a386de4 100644 --- a/src/Mod/Points/Gui/ViewProvider.cpp +++ b/src/Mod/Points/Gui/ViewProvider.cpp @@ -75,7 +75,7 @@ ViewProviderPoints::ViewProviderPoints() PointSize.setConstraints(&floatRange); // Create the selection node - pcHighlight = createFromSettings(); + pcHighlight = Gui::ViewProviderBuilder::createSelection(); pcHighlight->ref(); if (pcHighlight->selectionMode.getValue() == Gui::SoFCSelection::SEL_OFF) Selectable.setValue(false); @@ -102,40 +102,6 @@ ViewProviderPoints::~ViewProviderPoints() pcPointStyle->unref(); } -Gui::SoFCSelection* ViewProviderPoints::createFromSettings() const -{ - Gui::SoFCSelection* sel = new Gui::SoFCSelection(); - - float transparency; - ParameterGrp::handle hGrp = Gui::WindowParameter::getDefaultParameter()->GetGroup("View"); - bool enablePre = hGrp->GetBool("EnablePreselection", true); - bool enableSel = hGrp->GetBool("EnableSelection", true); - if (!enablePre) { - sel->highlightMode = Gui::SoFCSelection::OFF; - } - else { - // Search for a user defined value with the current color as default - SbColor highlightColor = sel->colorHighlight.getValue(); - unsigned long highlight = (unsigned long)(highlightColor.getPackedValue()); - highlight = hGrp->GetUnsigned("HighlightColor", highlight); - highlightColor.setPackedValue((uint32_t)highlight, transparency); - sel->colorHighlight.setValue(highlightColor); - } - if (!enableSel || !Selectable.getValue()) { - sel->selectionMode = Gui::SoFCSelection::SEL_OFF; - } - else { - // Do the same with the selection color - SbColor selectionColor = sel->colorSelection.getValue(); - unsigned long selection = (unsigned long)(selectionColor.getPackedValue()); - selection = hGrp->GetUnsigned("SelectionColor", selection); - selectionColor.setPackedValue((uint32_t)selection, transparency); - sel->colorSelection.setValue(selectionColor); - } - - return sel; -} - void ViewProviderPoints::onChanged(const App::Property* prop) { if (prop == &PointSize) { diff --git a/src/Mod/Points/Gui/ViewProvider.h b/src/Mod/Points/Gui/ViewProvider.h index 52fc7f72d..c7b8e9885 100644 --- a/src/Mod/Points/Gui/ViewProvider.h +++ b/src/Mod/Points/Gui/ViewProvider.h @@ -95,7 +95,6 @@ public: static void clipPointsCallback(void * ud, SoEventCallback * n); protected: - Gui::SoFCSelection* createFromSettings() const; void onChanged(const App::Property* prop); void setVertexColorMode(App::PropertyColorList*); void setVertexGreyvalueMode(Points::PropertyGreyValueList*);