MCPcopy Create free account
hub / github.com/FreeCAD/FreeCAD / SaveDocFile

Method SaveDocFile

src/Gui/Document.cpp:2073–2142  ·  view source on GitHub ↗

* Saves the properties of the view providers. */

Source from the content-addressed store, hash-verified

2071 * Saves the properties of the view providers.
2072 */
2073void 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())) {

Callers 1

TEST_FFunction · 0.45

Calls 13

incIndMethod · 0.80
getDocumentItemMethod · 0.80
isForceXMLMethod · 0.80
hasExtensionsMethod · 0.80
setForceXMLMethod · 0.80
decIndMethod · 0.80
instanceFunction · 0.70
SaveMethod · 0.45
sizeMethod · 0.45
getNameInDocumentMethod · 0.45
testStatusMethod · 0.45
getCameraMethod · 0.45

Tested by

no test coverage detected