示例#1
0
////// 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;
}