Extensions: Port ViewProvider of groups
This commit is contained in:
@@ -75,3 +75,15 @@ PyObject* DocumentObjectExtension::getExtensionPyObject(void) {
|
||||
}
|
||||
return Py::new_reference_to(ExtensionPythonObject);
|
||||
}
|
||||
|
||||
const DocumentObject* DocumentObjectExtension::getExtendedObject() const {
|
||||
|
||||
assert(getExtendedContainer()->isDerivedFrom(DocumentObject::getClassTypeId()));
|
||||
return static_cast<const DocumentObject*>(getExtendedContainer());
|
||||
}
|
||||
|
||||
DocumentObject* DocumentObjectExtension::getExtendedObject() {
|
||||
|
||||
assert(getExtendedContainer()->isDerivedFrom(DocumentObject::getClassTypeId()));
|
||||
return static_cast<DocumentObject*>(getExtendedContainer());
|
||||
}
|
||||
|
||||
@@ -45,6 +45,9 @@ public:
|
||||
DocumentObjectExtension ();
|
||||
virtual ~DocumentObjectExtension ();
|
||||
|
||||
App::DocumentObject* getExtendedObject();
|
||||
const App::DocumentObject* getExtendedObject() const;
|
||||
|
||||
//override if execution is nesseccary
|
||||
virtual short extensionMustExecute(void);
|
||||
virtual App::DocumentObjectExecReturn *extensionExecute(void);
|
||||
@@ -58,6 +61,10 @@ public:
|
||||
virtual void onExtendedUnsetupObject();
|
||||
|
||||
virtual PyObject* getExtensionPyObject(void);
|
||||
|
||||
/// returns the type name of the ViewProviderExtension which is automatically attached
|
||||
/// to the viewprovider object when it is initiated
|
||||
virtual const char* getViewProviderExtensionName(void) const {return "";};
|
||||
};
|
||||
|
||||
} //App
|
||||
|
||||
@@ -66,7 +66,7 @@ void Extension::initExtension(Base::Type type) {
|
||||
throw Base::Exception("Extension: Extension type not set");
|
||||
}
|
||||
|
||||
void Extension::initExtension(DocumentObject* obj) {
|
||||
void Extension::initExtension(ExtensionContainer* obj) {
|
||||
|
||||
if(m_extensionType.isBad())
|
||||
throw Base::Exception("Extension: Extension type not set");
|
||||
|
||||
@@ -31,6 +31,8 @@
|
||||
|
||||
namespace App {
|
||||
|
||||
class ExtensionContainer;
|
||||
|
||||
/**
|
||||
* @brief Base class for all extension that can be added to a DocumentObject
|
||||
*
|
||||
@@ -135,10 +137,10 @@ public:
|
||||
Extension();
|
||||
virtual ~Extension();
|
||||
|
||||
void initExtension(App::DocumentObject* obj);
|
||||
void initExtension(App::ExtensionContainer* obj);
|
||||
|
||||
App::DocumentObject* getExtendedObject() {return m_base;};
|
||||
const App::DocumentObject* getExtendedObject() const {return m_base;};
|
||||
App::ExtensionContainer* getExtendedContainer() {return m_base;};
|
||||
const App::ExtensionContainer* getExtendedContainer() const {return m_base;};
|
||||
|
||||
//get extension name without namespace
|
||||
const char* name();
|
||||
@@ -153,8 +155,8 @@ protected:
|
||||
Py::Object ExtensionPythonObject;
|
||||
|
||||
private:
|
||||
Base::Type m_extensionType;
|
||||
App::DocumentObject* m_base = nullptr;
|
||||
Base::Type m_extensionType;
|
||||
App::ExtensionContainer* m_base = nullptr;
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -47,7 +47,7 @@ ExtensionContainer::~ExtensionContainer() {
|
||||
|
||||
void ExtensionContainer::registerExtension(Base::Type extension, Extension* ext) {
|
||||
|
||||
if(ext->getExtendedObject() != this)
|
||||
if(ext->getExtendedContainer() != this)
|
||||
throw Base::Exception("ExtensionContainer::registerExtension: Extension has not this as base object");
|
||||
|
||||
//no duplicate extensions (including base classes)
|
||||
|
||||
Reference in New Issue
Block a user