App: add upgrade() method to PropertyLinkSubList

This commit is contained in:
wmayer
2021-11-12 07:49:44 +01:00
parent 15225b3b09
commit 8dc4c857f0
2 changed files with 31 additions and 0 deletions

View File

@@ -2180,6 +2180,36 @@ void PropertyLinkSubList::Restore(Base::XMLReader &reader)
_mapped.swap(mapped);
}
bool PropertyLinkSubList::upgrade(Base::XMLReader &reader, const char *typeName)
{
Base::Type type = Base::Type::fromName(typeName);
if (type.isDerivedFrom(PropertyLink::getClassTypeId())) {
PropertyLink prop;
prop.setContainer(getContainer());
prop.Restore(reader);
setValue(prop.getValue());
return true;
}
else if (type.isDerivedFrom(PropertyLinkList::getClassTypeId())) {
PropertyLinkList prop;
prop.setContainer(getContainer());
prop.Restore(reader);
std::vector<std::string> subnames;
subnames.resize(prop.getSize());
setValues(prop.getValues(), subnames);
return true;
}
else if (type.isDerivedFrom(PropertyLinkSub::getClassTypeId())) {
PropertyLinkSub prop;
prop.setContainer(getContainer());
prop.Restore(reader);
setValue(prop.getValue(), prop.getSubValues());
return true;
}
return false;
}
Property *PropertyLinkSubList::CopyOnImportExternal(
const std::map<std::string,std::string> &nameMap) const
{

View File

@@ -973,6 +973,7 @@ public:
virtual void Save (Base::Writer &writer) const override;
virtual void Restore(Base::XMLReader &reader) override;
bool upgrade(Base::XMLReader &reader, const char *typeName);
virtual Property *Copy(void) const override;
virtual void Paste(const Property &from) override;