public override void Save(XmlDocument doc, XmlNode node, MpeParser parser, MpeControl reference) { if (doc != null && node != null) { base.Save(doc, node, parser, reference); //parser.SetValue(doc, node, "animation", Animation.ToString()); XmlElement mpenode = doc.CreateElement("mpe"); node.AppendChild(mpenode); parser.SetValue(doc, mpenode, "layout", LayoutStyle.ToString()); parser.SetValue(doc, mpenode, "spring", Spring ? "yes" : "no"); parser.SetInt(doc, mpenode, "spacing", Spacing); parser.SetPadding(doc, mpenode, "padding", Padding); if (backImage != null && backImage.Texture != null) { XmlElement image = doc.CreateElement("control"); backImage.Location = AbsoluteLocation; backImage.Save(doc, image, parser, parser.GetControl(MpeControlType.Image)); backImage.Location = Point.Empty; node.AppendChild(image); } if (reference != null) { for (int i = Controls.Count - 1; i >= 0; i--) { if (Controls[i] is MpeControl) { MpeControl control = (MpeControl)Controls[i]; try { XmlElement element = doc.CreateElement("control"); MpeControl referenceControl = parser.GetControl(control.Type); control.Save(doc, element, parser, referenceControl); node.AppendChild(element); } catch (Exception e) { MpeLog.Debug(e); MpeLog.Error(e); throw new MpeParserException(e.Message); } } } } } }
public override void Save(XmlDocument doc, XmlNode node, MpeParser parser, MpeControl reference) { if (reference == null) { // Update reference.xml file if (node.Name != "controls") { throw new MpeParserException("Invalid root node <" + node.Name + "> provided."); } // Update the skin node XmlNode skin = node.SelectSingleNode("skin"); if (skin == null) { throw new MpeParserException( "Invalid reference.xml file. The <skin> element must be the first child in the document."); } skin.RemoveAll(); parser.SetValue(doc, skin, "width", Width.ToString()); parser.SetValue(doc, skin, "height", Height.ToString()); // Update the image control node that defines the window background XmlNode image = skin.NextSibling; if (image == null || image.Name.Equals("control") == false) { throw new MpeParserException( "Invalid reference.xml file. A <control> element of type image must follow the <skin> element."); } XmlNode test = image.SelectSingleNode("type"); if (test == null || test.InnerXml.Equals("image") == false) { throw new MpeParserException( "Invalid reference.xml file. A <control> element of type image must follow the <skin> element."); } image.RemoveAll(); backImage.Save(doc, image, parser, null); } else { // Update screen.xml file if (node == null || node.Name.Equals("window") == false) { throw new MpeParserException("Invalid root node <" + node.Name + "> provided. Looking for a <window> element."); } node.RemoveAll(); if (screenType != MpeScreenType.Window) { parser.SetValue(doc, node, "type", screenType.ToString().ToLower()); } parser.SetValue(doc, node, "id", Id.ToString()); parser.SetValue(doc, node, "defaultcontrol", DefaultControl.ToString()); parser.SetValue(doc, node, "allowoverlay", AllowOverlay ? "yes" : "no"); parser.SetValue(doc, node, "autohidetopbar", AutohideTopbar ? "yes" : "no"); XmlElement controls = doc.CreateElement("controls"); node.AppendChild(controls); if (ScreenType == MpeScreenType.Dialog) { MpeGroup dg = DialogGroup; //if (dg.TextureBack != null) { XmlElement image = doc.CreateElement("control"); dg.TextureBackImage.Save(doc, image, parser, parser.GetControl(MpeControlType.Image)); controls.AppendChild(image); //} for (int i = dg.Controls.Count - 1; i >= 0; i--) { if (dg.Controls[i] is MpeControl) { MpeControl control = (MpeControl)dg.Controls[i]; try { XmlElement element = doc.CreateElement("control"); MpeControl referenceControl = parser.GetControl(control.Type); control.Save(doc, element, parser, referenceControl); controls.AppendChild(element); } catch (Exception e) { MpeLog.Debug(e); MpeLog.Error(e); throw new MpeParserException(e.Message); } } } } else { if (TextureBack != null) { XmlElement image = doc.CreateElement("control"); backImage.Save(doc, image, parser, parser.GetControl(MpeControlType.Image)); controls.AppendChild(image); } for (int i = Controls.Count - 1; i >= 0; i--) { if (Controls[i] is MpeControl) { MpeControl control = (MpeControl)Controls[i]; try { XmlElement element = doc.CreateElement("control"); MpeControl referenceControl = parser.GetControl(control.Type); control.Save(doc, element, parser, referenceControl); controls.AppendChild(element); } catch (Exception e) { MpeLog.Debug(e); MpeLog.Error(e); throw new MpeParserException(e.Message); } } } } } }
public void SaveControl(MpeControl control) { MpeLog.Debug("MpeParser.SaveControl(" + control.Type.ToString() + ")"); XmlTextWriter writer = null; try { XmlDocument d = new XmlDocument(); d.Load(controlFile.FullName); XmlNode node = null; if (control.Type != MpeControlType.Screen) { node = d.SelectSingleNode("/controls/control[type='" + control.Type.ToString() + "']", null); if (node == null) { XmlNode n = d.SelectSingleNode("/controls"); if (n == null) { throw new MpeParserException("Invalid reference.xml file. Incorrect root node."); } node = d.CreateElement("control"); n.AppendChild(node); } else { node.RemoveAll(); } } else { node = d.SelectSingleNode("/controls"); } control.Save(d, node, this, null); controls.Remove(control.Type); controls.Add(control.Type, control); writer = new XmlTextWriter(controlFile.FullName, Encoding.UTF8); writer.Formatting = Formatting.Indented; writer.Indentation = 3; d.WriteTo(writer); writer.Close(); } catch (Exception e) { MpeLog.Debug(e); throw new MpeParserException("Error saving control: " + e.Message, e); } finally { if (writer != null) { writer.Close(); } } }