From 1287f3007a19d882f3d565a86408371cd2f04f0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20Tr=C3=B6ger?= Date: Thu, 25 Aug 2016 17:50:31 +0200 Subject: [PATCH] Extensions: Fix rebase errors --- src/App/Application.cpp | 3 ++ src/App/DocumentObjectGroup.cpp | 2 +- src/App/PropertyFile.cpp | 5 ++-- src/Gui/Application.cpp | 39 +++++++++++++------------ src/Gui/Document.cpp | 5 ++-- src/Gui/TreeView.cpp | 5 ++-- src/Gui/propertyeditor/PropertyItem.cpp | 5 ++-- 7 files changed, 36 insertions(+), 28 deletions(-) diff --git a/src/App/Application.cpp b/src/App/Application.cpp index 72e956f3c..0c7b6432a 100644 --- a/src/App/Application.cpp +++ b/src/App/Application.cpp @@ -1137,11 +1137,14 @@ void Application::initTypes(void) // Extension classes App ::Extension ::init(); + App ::ExtensionContainer ::init(); App ::DocumentObjectExtension ::init(); App ::GroupExtension ::init(); App ::GroupExtensionPython ::init(); App ::GeoFeatureGroupExtension ::init(); + App ::GeoFeatureGroupExtensionPython::init(); App ::OriginGroupExtension ::init(); + App ::OriginGroupExtensionPython::init(); // Document classes App ::TransactionalObject ::init(); diff --git a/src/App/DocumentObjectGroup.cpp b/src/App/DocumentObjectGroup.cpp index e005dc596..818134018 100644 --- a/src/App/DocumentObjectGroup.cpp +++ b/src/App/DocumentObjectGroup.cpp @@ -61,7 +61,7 @@ namespace App { /// @cond DOXERR PROPERTY_SOURCE_TEMPLATE(App::DocumentObjectGroupPython, App::DocumentObjectGroup) template<> const char* App::DocumentObjectGroupPython::getViewProviderName(void) const { - return "Gui::ViewProviderGroupExtensionPython"; + return "Gui::ViewProviderDocumentObjectGroupPython"; } template<> PyObject* App::DocumentObjectGroupPython::getPyObject(void) { if (PythonObject.is(Py::_None())) { diff --git a/src/App/PropertyFile.cpp b/src/App/PropertyFile.cpp index 26919ad64..2a8d3777c 100644 --- a/src/App/PropertyFile.cpp +++ b/src/App/PropertyFile.cpp @@ -89,8 +89,9 @@ std::string PropertyFileIncluded::getDocTransientPath(void) const { std::string path; PropertyContainer *co = getContainer(); - if (co->isDerivedFrom(DocumentObject::getClassTypeId())) { - path = static_cast(co)->getDocument()->TransientDir.getValue(); + auto obj = dynamic_cast(co); + if (obj) { + path = obj->getDocument()->TransientDir.getValue(); std::replace(path.begin(), path.end(), '\\', '/'); } return path; diff --git a/src/Gui/Application.cpp b/src/Gui/Application.cpp index 8a04bf8f7..ae7cefaa0 100644 --- a/src/Gui/Application.cpp +++ b/src/Gui/Application.cpp @@ -275,27 +275,28 @@ FreeCADGui_subgraphFromObject(PyObject * /*self*/, PyObject *args) SoNode* node = 0; try { Base::BaseClass* base = static_cast(Base::Type::createInstanceByName(vp.c_str(), true)); - if (base && base->getTypeId().isDerivedFrom(Gui::ViewProviderDocumentObject::getClassTypeId())) { - std::unique_ptr vp(static_cast(base)); - std::map Map; - obj->getPropertyMap(Map); - vp->attach(obj); - for (std::map::iterator it = Map.begin(); it != Map.end(); ++it) { - vp->updateData(it->second); - } + //throws if dynamic_cast fails, hence no check needed + std::unique_ptr vp(dynamic_cast(base)); - std::vector modes = vp->getDisplayModes(); - if (!modes.empty()) - vp->setDisplayMode(modes.front().c_str()); - node = vp->getRoot()->copy(); - node->ref(); - std::string type = "So"; - type += node->getTypeId().getName().getString(); - type += " *"; - PyObject* proxy = 0; - proxy = Base::Interpreter().createSWIGPointerObj("pivy.coin", type.c_str(), (void*)node, 1); - return Py::new_reference_to(Py::Object(proxy, true)); + std::map Map; + obj->getPropertyMap(Map); + vp->attach(obj); + for (std::map::iterator it = Map.begin(); it != Map.end(); ++it) { + vp->updateData(it->second); } + + std::vector modes = vp->getDisplayModes(); + if (!modes.empty()) + vp->setDisplayMode(modes.front().c_str()); + node = vp->getRoot()->copy(); + node->ref(); + std::string type = "So"; + type += node->getTypeId().getName().getString(); + type += " *"; + PyObject* proxy = 0; + proxy = Base::Interpreter().createSWIGPointerObj("pivy.coin", type.c_str(), (void*)node, 1); + return Py::new_reference_to(Py::Object(proxy, true)); + } catch (const Base::Exception& e) { if (node) node->unref(); diff --git a/src/Gui/Document.cpp b/src/Gui/Document.cpp index a8bbe86b6..feaf339df 100644 --- a/src/Gui/Document.cpp +++ b/src/Gui/Document.cpp @@ -420,9 +420,10 @@ void Document::slotNewObject(const App::DocumentObject& Obj) setModified(true); Base::BaseClass* base = static_cast(Base::Type::createInstanceByName(cName.c_str(),true)); if (base) { + pcProvider = dynamic_cast(base); // type not derived from ViewProviderDocumentObject!!! - assert(base->getTypeId().isDerivedFrom(Gui::ViewProviderDocumentObject::getClassTypeId())); - pcProvider = static_cast(base); + assert(pcProvider); + d->_ViewProviderMap[&Obj] = pcProvider; try { diff --git a/src/Gui/TreeView.cpp b/src/Gui/TreeView.cpp index 3c708c4c9..1dd44aba3 100644 --- a/src/Gui/TreeView.cpp +++ b/src/Gui/TreeView.cpp @@ -71,8 +71,9 @@ void TreeView::mouseDoubleClickEvent (QMouseEvent * event) if (!view) return; getMainWindow()->setActiveWindow(view); } - else if (item->getTypeId().isDerivedFrom(ViewProvider::getClassTypeId())) { - if (static_cast(item)->doubleClicked() == false) + else { + auto* vp = dynamic_cast(item); + if (vp && vp->doubleClicked() == false) QTreeView::mouseDoubleClickEvent(event); } } diff --git a/src/Gui/propertyeditor/PropertyItem.cpp b/src/Gui/propertyeditor/PropertyItem.cpp index 0e04c0892..0180b61ec 100644 --- a/src/Gui/propertyeditor/PropertyItem.cpp +++ b/src/Gui/propertyeditor/PropertyItem.cpp @@ -297,8 +297,9 @@ QString PropertyItem::pythonIdentifier(const App::Property* prop) const return QString::fromLatin1("FreeCAD.getDocument(\"%1\").getObject(\"%2\").%3") .arg(docName).arg(objName).arg(propName); } - if (parent->getTypeId().isDerivedFrom(Gui::ViewProviderDocumentObject::getClassTypeId())) { - App::DocumentObject* obj = static_cast(parent)->getObject(); + auto* vp = dynamic_cast(parent); + if (vp) { + App::DocumentObject* obj = vp->getObject(); App::Document* doc = obj->getDocument(); QString docName = QString::fromLatin1(App::GetApplication().getDocumentName(doc)); QString objName = QString::fromLatin1(obj->getNameInDocument());