* Saves the properties of the view providers. */
| 2071 | * Saves the properties of the view providers. |
| 2072 | */ |
| 2073 | void Document::SaveDocFile(Base::Writer& writer) const |
| 2074 | { |
| 2075 | writer.Stream() << "<?xml version='1.0' encoding='utf-8'?>" << std::endl |
| 2076 | << "<!--" << std::endl |
| 2077 | << " FreeCAD Document, see https://www.freecad.org for more information…" |
| 2078 | << std::endl |
| 2079 | << "-->" << std::endl; |
| 2080 | |
| 2081 | writer.Stream() << "<Document SchemaVersion=\"1\""; |
| 2082 | |
| 2083 | writer.incInd(); |
| 2084 | |
| 2085 | auto tree = TreeWidget::instance(); |
| 2086 | bool hasExpansion = false; |
| 2087 | if (tree) { |
| 2088 | auto docItem = tree->getDocumentItem(this); |
| 2089 | if (docItem) { |
| 2090 | hasExpansion = true; |
| 2091 | writer.Stream() << " HasExpansion=\"1\">" << std::endl; |
| 2092 | docItem->Save(writer); |
| 2093 | } |
| 2094 | } |
| 2095 | if (!hasExpansion) { |
| 2096 | writer.Stream() << ">" << std::endl; |
| 2097 | } |
| 2098 | |
| 2099 | // writing the view provider names itself |
| 2100 | writer.Stream() << writer.ind() << "<ViewProviderData Count=\"" << d->_ViewProviderMap.size() |
| 2101 | << "\">" << std::endl; |
| 2102 | |
| 2103 | bool xml = writer.isForceXML(); |
| 2104 | // writer.setForceXML(true); |
| 2105 | writer.incInd(); // indentation for 'ViewProvider name' |
| 2106 | for (const auto& it : d->_ViewProviderMap) { |
| 2107 | const App::DocumentObject* doc = it.first; |
| 2108 | ViewProviderDocumentObject* obj = it.second; |
| 2109 | writer.Stream() << writer.ind() << "<ViewProvider name=\"" << doc->getNameInDocument() << "\"" |
| 2110 | << " expanded=\"" << (doc->testStatus(App::Expand) ? 1 : 0) << "\"" |
| 2111 | << " treeRank=\"" << obj->getTreeRank() << "\""; |
| 2112 | if (obj->hasExtensions()) { |
| 2113 | writer.Stream() << " Extensions=\"True\""; |
| 2114 | } |
| 2115 | |
| 2116 | writer.Stream() << ">" << std::endl; |
| 2117 | obj->Save(writer); |
| 2118 | writer.Stream() << writer.ind() << "</ViewProvider>" << std::endl; |
| 2119 | } |
| 2120 | writer.setForceXML(xml); |
| 2121 | |
| 2122 | writer.decInd(); // indentation for 'ViewProvider name' |
| 2123 | writer.Stream() << writer.ind() << "</ViewProviderData>" << std::endl; |
| 2124 | writer.decInd(); // indentation for 'ViewProviderData Count' |
| 2125 | |
| 2126 | // save camera settings |
| 2127 | for (const auto& it : getMDIViews()) { |
| 2128 | if (auto* viewCamera = freecad_cast<MDIViewWithCamera*>(it)) { |
| 2129 | const std::string& camera = viewCamera->getCamera(); |
| 2130 | if (saveCameraSettings(camera.c_str())) { |
no test coverage detected