fix saving view provider attributes for Copy&Paste or Duplicate selection

This commit is contained in:
wmayer
2019-02-28 18:48:30 +01:00
parent 979177deb1
commit 59a0144a4f

View File

@@ -800,8 +800,6 @@ void Document::RestoreDocFile(Base::Reader &reader)
Base::XMLReader xmlReader("GuiDocument.xml", reader);
xmlReader.FileVersion = reader.getFileVersion();
int i,Cnt;
xmlReader.readElement("Document");
long scheme = xmlReader.getAttributeAsInteger("SchemaVersion");
xmlReader.DocumentSchema = scheme;
@@ -813,8 +811,8 @@ void Document::RestoreDocFile(Base::Reader &reader)
if (scheme == 1) {
// read the viewproviders itself
xmlReader.readElement("ViewProviderData");
Cnt = xmlReader.getAttributeAsInteger("Count");
for (i=0 ;i<Cnt ;i++) {
int Cnt = xmlReader.getAttributeAsInteger("Count");
for (int i=0; i<Cnt; i++) {
xmlReader.readElement("ViewProvider");
std::string name = xmlReader.getAttribute("name");
bool expanded = false;
@@ -923,7 +921,7 @@ void Document::SaveDocFile (Base::Writer &writer) const
writer.Stream() << writer.ind() << "<ViewProvider name=\""
<< doc->getNameInDocument() << "\" "
<< "expanded=\"" << (doc->testStatus(App::Expand) ? 1:0) << "\"";
if(obj->hasExtensions())
if (obj->hasExtensions())
writer.Stream() << " Extensions=\"True\"";
writer.Stream() << ">" << std::endl;
@@ -988,9 +986,12 @@ void Document::exportObjects(const std::vector<App::DocumentObject*>& obj, Base:
const App::DocumentObject* doc = jt->first;
ViewProvider* obj = jt->second;
writer.Stream() << writer.ind() << "<ViewProvider name=\""
<< doc->getNameInDocument() << "\" type=\""
<< obj->getTypeId().getName()
<< "\">" << std::endl;
<< doc->getNameInDocument() << "\" "
<< "expanded=\"" << (doc->testStatus(App::Expand) ? 1:0) << "\"";
if (obj->hasExtensions())
writer.Stream() << " Extensions=\"True\"";
writer.Stream() << ">" << std::endl;
obj->Save(writer);
writer.Stream() << writer.ind() << "</ViewProvider>" << std::endl;
}
@@ -1031,9 +1032,20 @@ void Document::importObjects(const std::vector<App::DocumentObject*>& obj, Base:
std::map<std::string, std::string>::const_iterator jt = nameMapping.find(name);
if (jt != nameMapping.end())
name = jt->second;
bool expanded = false;
if (xmlReader.hasAttribute("expanded")) {
const char* attr = xmlReader.getAttribute("expanded");
if (strcmp(attr,"1") == 0) {
expanded = true;
}
}
Gui::ViewProvider* pObj = this->getViewProviderByName(name.c_str());
if (pObj)
pObj->Restore(xmlReader);
if (pObj && expanded) {
Gui::ViewProviderDocumentObject* vp = static_cast<Gui::ViewProviderDocumentObject*>(pObj);
this->signalExpandObject(*vp, Gui::ExpandItem);
}
xmlReader.readEndElement("ViewProvider");
if (it == obj.end())
break;