diff --git a/src/Gui/ViewProviderPy.xml b/src/Gui/ViewProviderPy.xml
index 9b34564dee..e44d383d78 100644
--- a/src/Gui/ViewProviderPy.xml
+++ b/src/Gui/ViewProviderPy.xml
@@ -64,6 +64,12 @@
+
+
+ The icon of this ViewProvider
+
+
+
A pivy Separator with the root of this ViewProvider
diff --git a/src/Gui/ViewProviderPyImp.cpp b/src/Gui/ViewProviderPyImp.cpp
index c01223ea22..0f00442dd0 100644
--- a/src/Gui/ViewProviderPyImp.cpp
+++ b/src/Gui/ViewProviderPyImp.cpp
@@ -24,6 +24,8 @@
#include "PreCompiled.h"
#ifndef _PreComp_
# include
+# include
+# include
#endif
#include
@@ -32,6 +34,7 @@
#include
#include "ViewProvider.h"
+#include "WidgetFactory.h"
// inclusion of the generated files (generated out of ViewProviderPy2.xml)
#include "ViewProviderPy.h"
@@ -232,3 +235,19 @@ Py::String ViewProviderPy::getIV(void) const
SbString buf = buffer_writeaction(getViewProviderPtr()->getRoot());
return Py::String(buf.getString());
}
+
+Py::Object ViewProviderPy::getIcon(void) const
+{
+#if 0
+ QByteArray ba;
+ QDataStream str(&ba, QIODevice::WriteOnly);
+ QIcon icon = getViewProviderPtr()->getIcon();
+ str << icon;
+ return Py::String(ba.constData(), ba.size());
+#else
+ PythonWrapper wrap;
+ wrap.loadGuiModule();
+ QIcon icon = getViewProviderPtr()->getIcon();
+ return wrap.fromQIcon(new QIcon(icon));
+#endif
+}
diff --git a/src/Gui/WidgetFactory.cpp b/src/Gui/WidgetFactory.cpp
index a82ab2eafb..cc5dfa7475 100644
--- a/src/Gui/WidgetFactory.cpp
+++ b/src/Gui/WidgetFactory.cpp
@@ -44,6 +44,7 @@
# undef _POSIX_C_SOURCE
# undef _XOPEN_SOURCE
# include
+# include
# include
# include
# include
@@ -179,6 +180,16 @@ QObject* PythonWrapper::toQObject(const Py::Object& pyobject)
return 0;
}
+Py::Object PythonWrapper::fromQIcon(const QIcon* icon)
+{
+#if defined (HAVE_SHIBOKEN) && defined(HAVE_PYSIDE)
+ PyObject* pyobj = Shiboken::createWrapper(icon, true);
+ if (pyobj)
+ return Py::asObject(pyobj);
+#endif
+ throw Py::RuntimeError("Failed to wrap icon");
+}
+
Py::Object PythonWrapper::fromQWidget(QWidget* widget, const char* className)
{
#if defined (HAVE_SHIBOKEN) && defined(HAVE_PYSIDE)
diff --git a/src/Gui/WidgetFactory.h b/src/Gui/WidgetFactory.h
index 9fda8dd653..50c8e11c28 100644
--- a/src/Gui/WidgetFactory.h
+++ b/src/Gui/WidgetFactory.h
@@ -49,6 +49,11 @@ public:
bool toCString(const Py::Object&, std::string&);
QObject* toQObject(const Py::Object&);
Py::Object fromQWidget(QWidget*, const char* className=0);
+ /*!
+ Create a Python wrapper for the icon. The icon must be created on the heap
+ and the Python wrapper takes ownership of it.
+ */
+ Py::Object fromQIcon(const QIcon*);
static void createChildrenNameAttributes(PyObject* root, QObject* object);
static void setParent(PyObject* pyWdg, QObject* parent);
};