Gui: Replace TreeRank property with a simple int
This fixes that copied & pasted objects are not added at the end of the tree view. See https://forum.freecad.org/viewtopic.php?p=755532#p755532
This commit is contained in:
@@ -1419,6 +1419,7 @@ void Document::RestoreDocFile(Base::Reader &reader)
|
||||
for (int i=0; i<Cnt; i++) {
|
||||
localreader->readElement("ViewProvider");
|
||||
std::string name = localreader->getAttribute("name");
|
||||
|
||||
bool expanded = false;
|
||||
if (!hasExpansion && localreader->hasAttribute("expanded")) {
|
||||
const char* attr = localreader->getAttribute("expanded");
|
||||
@@ -1426,15 +1427,24 @@ void Document::RestoreDocFile(Base::Reader &reader)
|
||||
expanded = true;
|
||||
}
|
||||
}
|
||||
ViewProvider* pObj = getViewProviderByName(name.c_str());
|
||||
|
||||
int treeRank = -1;
|
||||
if (localreader->hasAttribute("treeRank")) {
|
||||
treeRank = int(localreader->getAttributeAsInteger("treeRank"));
|
||||
}
|
||||
|
||||
auto pObj = dynamic_cast<ViewProviderDocumentObject*>(getViewProviderByName(name.c_str()));
|
||||
// check if this feature has been registered
|
||||
if (pObj){
|
||||
if (pObj) {
|
||||
pObj->Restore(*localreader);
|
||||
}
|
||||
|
||||
if (pObj && treeRank >= 0) {
|
||||
pObj->setTreeRank(treeRank);
|
||||
}
|
||||
|
||||
if (pObj && expanded) {
|
||||
auto vp = static_cast<Gui::ViewProviderDocumentObject*>(pObj);
|
||||
this->signalExpandObject(*vp, TreeItemMode::ExpandItem,0,0);
|
||||
this->signalExpandObject(*pObj, TreeItemMode::ExpandItem, 0, 0);
|
||||
}
|
||||
localreader->readEndElement("ViewProvider");
|
||||
}
|
||||
@@ -1536,8 +1546,6 @@ void Document::SaveDocFile (Base::Writer &writer) const
|
||||
if(!hasExpansion)
|
||||
writer.Stream() << ">" << std::endl;
|
||||
|
||||
std::map<const App::DocumentObject*,ViewProviderDocumentObject*>::const_iterator it;
|
||||
|
||||
// writing the view provider names itself
|
||||
writer.Stream() << writer.ind() << "<ViewProviderData Count=\""
|
||||
<< d->_ViewProviderMap.size() <<"\">" << std::endl;
|
||||
@@ -1545,12 +1553,13 @@ void Document::SaveDocFile (Base::Writer &writer) const
|
||||
bool xml = writer.isForceXML();
|
||||
//writer.setForceXML(true);
|
||||
writer.incInd(); // indentation for 'ViewProvider name'
|
||||
for(it = d->_ViewProviderMap.begin(); it != d->_ViewProviderMap.end(); ++it) {
|
||||
const App::DocumentObject* doc = it->first;
|
||||
ViewProvider* obj = it->second;
|
||||
for(const auto& it : d->_ViewProviderMap) {
|
||||
const App::DocumentObject* doc = it.first;
|
||||
ViewProviderDocumentObject* obj = it.second;
|
||||
writer.Stream() << writer.ind() << "<ViewProvider name=\""
|
||||
<< doc->getNameInDocument() << "\" "
|
||||
<< "expanded=\"" << (doc->testStatus(App::Expand) ? 1:0) << "\"";
|
||||
<< doc->getNameInDocument() << "\""
|
||||
<< " expanded=\"" << (doc->testStatus(App::Expand) ? 1:0) << "\""
|
||||
<< " treeRank=\"" << obj->getTreeRank() << "\"";
|
||||
if (obj->hasExtensions())
|
||||
writer.Stream() << " Extensions=\"True\"";
|
||||
|
||||
|
||||
Reference in New Issue
Block a user