////// Load a design from a file, loaded design will be selected ////// BOOL CTinyCadDoc::ReadFileXML(CXMLReader &xml, BOOL Details, drawingCollection &drawing, BOOL AlreadyStarted) { try { // Read in the first item... CString name; bool sheets = false; if (!AlreadyStarted) { xml.nextTag( name ); if (name == "TinyCADSheets") { xml.intoTag(); sheets = true; // We must search for the first TinyCAD section while (xml.nextTag( name ) && name != GetXMLTag()) { } } // Check we are at the right point if (name != GetXMLTag()) { Message(IDS_ABORTVERSION,MB_ICONEXCLAMATION); return FALSE; } } BOOL ResetMerge = TRUE; xml.intoTag(); while ( xml.nextTag( name ) ) { // Save the old layer setting CDrawingObject *obj = NULL; if (name == "DETAILS" ) { if (Details) { GetDetails().ReadXML( xml, m_snap ); } } else if (name == "NAME") { if (Details) { xml.getChildData( m_sheet_name ); } } else if (name == "GRID") { if (Details) { m_snap.LoadXML( xml ); } } else if (name == "FONT") { if (ResetMerge) { theOptions.ResetMerge(); ResetMerge = FALSE; } theOptions.LoadFontXML(xml); } else if (name == "STYLE") { if (ResetMerge) { theOptions.ResetMerge(); ResetMerge = FALSE; } theOptions.LoadStyleXML(xml); } else if (name == "FILL") { if (ResetMerge) { theOptions.ResetMerge(); ResetMerge = FALSE; } theOptions.LoadFillStyleXML(xml); } else if (name == "META" || name == "IMAGE") { if (ResetMerge) { theOptions.ResetMerge(); ResetMerge = FALSE; } theOptions.LoadMetaFileXML(xml); } else if (name == "SYMBOLDEF") { if (ResetMerge) { theOptions.ResetMerge(); ResetMerge = FALSE; } theOptions.LoadSymbolXML(xml); } else if (name == "OPTIONS") { theOptions.ReadXML( xml ); } else if (name == CDrawBusSlash::GetXMLTag()) { obj = new CDrawBusSlash(this); } else if (name == CDrawTag::GetXMLTag()) { obj = new CDrawTag(this); } else if (name == CDrawJunction::GetXMLTag()) { obj = new CDrawJunction(this); } else if (name == CDrawLine::GetXMLTag(xBus)) { obj = new CDrawLine(this, xBus); } else if (name == CDrawLine::GetXMLTag(xWire)) { obj = new CDrawLine(this, xWire); } else if (name == CDrawLine::GetXMLTag(xLineEx2)) { obj = new CDrawLine(this, xLineEx2); } else if (name == CDrawMetaFile::GetXMLTag()) { obj = new CDrawMetaFile(this); } else if (name == CDrawMethod::GetXMLTag()) { obj = new CDrawMethod(this); } else if (name == CDrawHierarchicalSymbol::GetXMLTag()) { obj = new CDrawHierarchicalSymbol(this); } else if (name == CDrawNoConnect::GetXMLTag()) { obj = new CDrawNoConnect(this); } else if (name == CDrawPin::GetXMLTag()) { obj = new CDrawPin(this); } else if (name == CDrawRuler::GetXMLTag()) { obj = new CDrawRuler(this, FALSE); } else if (name == CDrawSquare::GetXMLTag( TRUE )) { obj = new CDrawSquare(this, xSquareEx3); } else if (name == CDrawSquare::GetXMLTag( FALSE )) { obj = new CDrawSquare(this, xCircleEx3); } else if (name == CDrawText::GetXMLTag(xTextEx2)) { obj = new CDrawText(this, xTextEx2); } else if (name == CDrawText::GetXMLTag(xBusNameEx)) { obj = new CDrawText(this, xBusNameEx); } else if (name == CDrawLabel::GetXMLTag()) { obj = new CDrawLabel(this); } else if (name == CDrawPolygon::GetXMLTag()) { obj = new CDrawPolygon(this); } else if (name == CDrawPower::GetXMLTag()) { obj = new CDrawPower(this); } if (obj != NULL) { // Load this object... obj->LoadXML( xml ); // Now add object to linked list drawing.insert( drawing.end(), obj ); } } xml.outofTag(); if (sheets) { xml.outofTag(); } } catch( CException *e ) { e->ReportError(); e->Delete(); return FALSE; } return drawing.size() > 0; }