protected virtual bool PopulateXmlDocument(XmlDocument xmlDoc)
{
try
{
var root = xmlDoc.DocumentElement;
root.SetAttribute("Version", WorkspaceVersion.ToString());
root.SetAttribute("X", X.ToString(CultureInfo.InvariantCulture));
root.SetAttribute("Y", Y.ToString(CultureInfo.InvariantCulture));
root.SetAttribute("zoom", Zoom.ToString(CultureInfo.InvariantCulture));
root.SetAttribute("Name", Name);
root.SetAttribute("Description", Description);
SerializeElementResolver(xmlDoc);
var elementList = xmlDoc.CreateElement("Elements");
//write the root element
root.AppendChild(elementList);
foreach (var dynEl in Nodes.Select(el => el.Serialize(xmlDoc, SaveContext.File)))
elementList.AppendChild(dynEl);
//write only the output connectors
var connectorList = xmlDoc.CreateElement("Connectors");
//write the root element
root.AppendChild(connectorList);
foreach (var el in Nodes)
{
foreach (var port in el.OutPorts)
{
foreach (
var c in
port.Connectors.Where(c => c.Start != null && c.End != null))
{
var connector = xmlDoc.CreateElement(c.GetType().ToString());
connectorList.AppendChild(connector);
connector.SetAttribute("start", c.Start.Owner.GUID.ToString());
connector.SetAttribute("start_index", c.Start.Index.ToString());
connector.SetAttribute("end", c.End.Owner.GUID.ToString());
connector.SetAttribute("end_index", c.End.Index.ToString());
if (c.End.PortType == PortType.Input)
connector.SetAttribute("portType", "0");
}
}
}
//save the notes
var noteList = xmlDoc.CreateElement("Notes"); //write the root element
root.AppendChild(noteList);
foreach (var n in Notes)
{
var note = n.Serialize(xmlDoc, SaveContext.File);
noteList.AppendChild(note);
}
//save the annotation
var annotationList = xmlDoc.CreateElement("Annotations");
root.AppendChild(annotationList);
foreach (var n in annotations)
{
var annotation = n.Serialize(xmlDoc, SaveContext.File);
annotationList.AppendChild(annotation);
}
//save the presets into the dyn file as a seperate element on the root
var presetsElement = xmlDoc.CreateElement("Presets");
root.AppendChild(presetsElement);
foreach (var preset in Presets)
{
var presetState = preset.Serialize(xmlDoc, SaveContext.File);
presetsElement.AppendChild(presetState);
}
OnSaving(xmlDoc);
return true;
}
catch (Exception ex)
{
Log(ex.Message);
Log(ex.StackTrace);
return false;
}
}