Extenions: Drop virtual inheritance

Due to problems onthe windows platform the virtual inheritance approach must be dropped. NExt to the already reimplemented proeprty interface the Type interface is reimplemented too. This change allows to revert some earlier changes.
This commit is contained in:
Stefan Tröger
2016-10-03 12:06:32 +02:00
committed by wmayer
parent a79b48bbcc
commit 3a51404dd5
24 changed files with 147 additions and 105 deletions

View File

@@ -38,7 +38,7 @@ EXTENSION_PROPERTY_SOURCE(App::GroupExtension, App::DocumentObjectExtension)
GroupExtension::GroupExtension()
{
initExtension(GroupExtension::getClassTypeId());
initExtension(GroupExtension::getExtensionClassTypeId());
EXTENSION_ADD_PROPERTY_TYPE(Group,(0),"Base",(App::PropertyType)(Prop_Output),"List of referenced objects");
}
@@ -96,8 +96,8 @@ void GroupExtension::removeObjectsFromDocument()
void GroupExtension::removeObjectFromDocument(DocumentObject* obj)
{
// remove all children
if (obj->hasExtension(GroupExtension::getClassTypeId())) {
GroupExtension *grp = static_cast<GroupExtension*>(obj->getExtension(GroupExtension::getClassTypeId()));
if (obj->hasExtension(GroupExtension::getExtensionClassTypeId())) {
GroupExtension *grp = static_cast<GroupExtension*>(obj->getExtension(GroupExtension::getExtensionClassTypeId()));
// recursive call to remove all subgroups
grp->removeObjectsFromDocument();
@@ -120,8 +120,9 @@ bool GroupExtension::hasObject(const DocumentObject* obj, bool recursive) const
for (std::vector<DocumentObject*>::const_iterator it = grp.begin(); it != grp.end(); ++it) {
if (*it == obj) {
return true;
} else if ( recursive && (*it)->hasExtension(GroupExtension::getClassTypeId()) ) {
App::GroupExtension *subGroup = static_cast<App::GroupExtension *> ((*it)->getExtension(GroupExtension::getClassTypeId()));
} else if ( recursive && (*it)->hasExtension(GroupExtension::getExtensionClassTypeId()) ) {
App::GroupExtension *subGroup = static_cast<App::GroupExtension *> (
(*it)->getExtension(GroupExtension::getExtensionClassTypeId()));
if (subGroup->hasObject (obj, recursive)) {
return true;
@@ -138,8 +139,8 @@ bool GroupExtension::isChildOf(const GroupExtension* group) const
for (std::vector<DocumentObject*>::const_iterator it = grp.begin(); it != grp.end(); ++it) {
if (*it == getExtendedObject())
return true;
if ((*it)->hasExtension(GroupExtension::getClassTypeId())) {
if (this->isChildOf(static_cast<GroupExtension*>((*it)->getExtension(GroupExtension::getClassTypeId()))))
if ((*it)->hasExtension(GroupExtension::getExtensionClassTypeId())) {
if (this->isChildOf(static_cast<GroupExtension*>((*it)->getExtension(GroupExtension::getExtensionClassTypeId()))))
return true;
}
@@ -180,7 +181,7 @@ int GroupExtension::countObjectsOfType(const Base::Type& typeId) const
DocumentObject* GroupExtension::getGroupOfObject(const DocumentObject* obj)
{
const Document* doc = obj->getDocument();
std::vector<DocumentObject*> grps = doc->getObjectsOfType(GroupExtension::getClassTypeId());
std::vector<DocumentObject*> grps = doc->getObjectsOfType(GroupExtension::getExtensionClassTypeId());
for (std::vector<DocumentObject*>::const_iterator it = grps.begin(); it != grps.end(); ++it) {
GroupExtension* grp = (GroupExtension*)(*it);
if (grp->hasObject(obj))