diff --git a/src/Gui/CMakeLists.txt b/src/Gui/CMakeLists.txt
index f44397e7c3..344a249882 100644
--- a/src/Gui/CMakeLists.txt
+++ b/src/Gui/CMakeLists.txt
@@ -224,6 +224,7 @@ generate_from_xml(DocumentPy)
generate_from_xml(PythonWorkbenchPy)
generate_from_xml(ViewProviderPy)
generate_from_xml(ViewProviderDocumentObjectPy)
+generate_from_xml(ViewProviderExtensionPy)
generate_from_xml(WorkbenchPy)
generate_from_xml(SelectionObjectPy)
generate_from_xml(LinkViewPy)
@@ -237,6 +238,7 @@ generate_from_py(FreeCADGuiInit GuiInitScript.h)
SET(FreeCADGui_XML_SRCS
ViewProviderDocumentObjectPy.xml
ViewProviderPy.xml
+ ViewProviderExtensionPy.xml
PythonWorkbenchPy.xml
WorkbenchPy.xml
SelectionObjectPy.xml
@@ -1004,6 +1006,7 @@ SOURCE_GROUP("Quarter" FILES ${Quarter_SRCS})
SET(Viewprovider_CPP_SRCS
ViewProvider.cpp
ViewProviderExtension.cpp
+ ViewProviderExtensionPyImp.cpp
ViewProviderGroupExtension.cpp
ViewProviderGeoFeatureGroupExtension.cpp
ViewProviderOriginGroupExtension.cpp
diff --git a/src/Gui/ViewProviderExtension.cpp b/src/Gui/ViewProviderExtension.cpp
index 96e0ddf131..b68e5f2378 100644
--- a/src/Gui/ViewProviderExtension.cpp
+++ b/src/Gui/ViewProviderExtension.cpp
@@ -29,7 +29,7 @@
#endif
#include "ViewProviderExtension.h"
-//#include "ViewProviderExtensionPy.h"
+#include "ViewProviderExtensionPy.h"
using namespace Gui;
@@ -61,6 +61,16 @@ void ViewProviderExtension::extensionUpdateData(const App::Property*) {
}
+PyObject* ViewProviderExtension::getExtensionPyObject(void) {
+
+ if (ExtensionPythonObject.is(Py::_None())){
+ // ref counter is set to 1
+ auto ext = new ViewProviderExtensionPy(this);
+ ExtensionPythonObject = Py::asObject(ext);
+ }
+ return Py::new_reference_to(ExtensionPythonObject);
+}
+
namespace Gui {
EXTENSION_PROPERTY_SOURCE_TEMPLATE(Gui::ViewProviderExtensionPython, Gui::ViewProviderExtension)
diff --git a/src/Gui/ViewProviderExtension.h b/src/Gui/ViewProviderExtension.h
index b88221e4e6..4d195e9bae 100644
--- a/src/Gui/ViewProviderExtension.h
+++ b/src/Gui/ViewProviderExtension.h
@@ -93,6 +93,7 @@ public:
//update data of extended opject
virtual void extensionUpdateData(const App::Property*);
+ virtual PyObject* getExtensionPyObject();
void setIgnoreOverlayIcon(bool on) {
m_ignoreOverlayIcon = on;
diff --git a/src/Gui/ViewProviderExtensionPy.xml b/src/Gui/ViewProviderExtensionPy.xml
new file mode 100644
index 0000000000..f5eb37fc61
--- /dev/null
+++ b/src/Gui/ViewProviderExtensionPy.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+ Base class for all view provider extensions
+
+
+
+ Ignore the overlay icon of an extension
+
+
+
+
+ Ignore the overlay icon of an extension
+
+
+
+
+
diff --git a/src/Gui/ViewProviderExtensionPyImp.cpp b/src/Gui/ViewProviderExtensionPyImp.cpp
new file mode 100644
index 0000000000..d5e9f30e3e
--- /dev/null
+++ b/src/Gui/ViewProviderExtensionPyImp.cpp
@@ -0,0 +1,91 @@
+/***************************************************************************
+ * Copyright (c) 2020 Werner Mayer *
+ * *
+ * This file is part of the FreeCAD CAx development system. *
+ * *
+ * This library is free software; you can redistribute it and/or *
+ * modify it under the terms of the GNU Library General Public *
+ * License as published by the Free Software Foundation; either *
+ * version 2 of the License, or (at your option) any later version. *
+ * *
+ * This library is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU Library General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Library General Public *
+ * License along with this library; see the file COPYING.LIB. If not, *
+ * write to the Free Software Foundation, Inc., 59 Temple Place, *
+ * Suite 330, Boston, MA 02111-1307, USA *
+ * *
+ ***************************************************************************/
+
+
+#include "PreCompiled.h"
+
+#ifndef _PreComp_
+# include
+#endif
+
+// inclution of the generated files (generated out of PropertyContainerPy.xml)
+#include "ViewProviderExtensionPy.h"
+#include "ViewProviderExtensionPy.cpp"
+
+using namespace Gui;
+
+// returns a string which represent the object e.g. when printed in python
+std::string ViewProviderExtensionPy::representation(void) const
+{
+ return std::string("");
+}
+
+PyObject* ViewProviderExtensionPy::setIgnoreOverlayIcon(PyObject *args)
+{
+ PyObject* ignore;
+ const char* name = nullptr;
+ if (!PyArg_ParseTuple(args, "O!s", &PyBool_Type, &ignore, &name))
+ return nullptr;
+
+ ViewProviderExtension* ext = getViewProviderExtensionPtr();
+ if (name) {
+ Base::Type type = Base::Type::fromName(name);
+ ext = dynamic_cast(ext->getExtendedContainer()->getExtension(type, true, true));
+ if (!ext) {
+ PyErr_SetString(PyExc_NameError, "no such extension");
+ return nullptr;
+ }
+ }
+
+ ext->setIgnoreOverlayIcon(PyObject_IsTrue(ignore) ? true : false);
+ Py_Return;
+}
+
+PyObject* ViewProviderExtensionPy::ignoreOverlayIcon(PyObject *args)
+{
+ const char* name = nullptr;
+ if (!PyArg_ParseTuple(args, "s", &name))
+ return nullptr;
+
+ ViewProviderExtension* ext = getViewProviderExtensionPtr();
+ if (name) {
+ Base::Type type = Base::Type::fromName(name);
+ ext = dynamic_cast(ext->getExtendedContainer()->getExtension(type, true, true));
+ if (!ext) {
+ PyErr_SetString(PyExc_NameError, "no such extension");
+ return nullptr;
+ }
+ }
+
+ bool ignore = ext->ignoreOverlayIcon();
+ return Py_BuildValue("O", (ignore ? Py_True : Py_False));
+}
+
+PyObject *ViewProviderExtensionPy::getCustomAttributes(const char* /*attr*/) const
+{
+ return 0;
+}
+
+int ViewProviderExtensionPy::setCustomAttributes(const char* /*attr*/, PyObject * /*obj*/)
+{
+ return 0;
+}
diff --git a/src/Mod/Part/BasicShapes/ViewProviderShapes.py b/src/Mod/Part/BasicShapes/ViewProviderShapes.py
index 1e308f0a20..2933eca80a 100644
--- a/src/Mod/Part/BasicShapes/ViewProviderShapes.py
+++ b/src/Mod/Part/BasicShapes/ViewProviderShapes.py
@@ -37,6 +37,7 @@ class ViewProviderTube:
''' Set this object to the proxy object of the actual view provider '''
obj.Proxy = self
obj.addExtension("PartGui::ViewProviderAttachExtensionPython", self)
+ obj.setIgnoreOverlayIcon(True, "PartGui::ViewProviderAttachExtensionPython")
def attach(self, obj):
''' Setup the scene sub-graph of the view provider, this method is mandatory '''