void WriteTo(XmlWriter writer, ExtensibleTreeView.TreeOptions parentOptions) { writer.WriteStartElement(Node); if (NodeName != null) { writer.WriteAttributeString(nameAttribute, NodeName); } if (Expanded) { writer.WriteAttributeString(expandedAttribute, bool.TrueString); } if (Selected) { writer.WriteAttributeString(selectedAttribute, bool.TrueString); } ExtensibleTreeView.TreeOptions ops = Options; if (ops != null) { foreach (DictionaryEntry de in ops) { object parentVal = parentOptions != null ? parentOptions [de.Key] : null; if (parentVal != null && !parentVal.Equals(de.Value) || (parentVal == null && de.Value != null) || parentOptions == null) { writer.WriteStartElement("Option"); writer.WriteAttributeString("id", de.Key.ToString()); writer.WriteAttributeString("value", de.Value.ToString()); writer.WriteEndElement(); // Option } } } if (ChildrenState != null) { foreach (NodeState ces in ChildrenState) { ces.WriteTo(writer, Options != null ? Options : parentOptions); } } writer.WriteEndElement(); // NodeState }
static NodeState SaveStateRec(ExtensibleTreeView pad, ITreeNavigator nav) { List <NodeState> childrenState = null; if (nav.Filled && nav.MoveToFirstChild()) { do { NodeState cs = SaveStateRec(pad, nav); if (cs != null) { cs.NodeName = nav.NodeName; if (childrenState == null) { childrenState = new List <NodeState> (); } childrenState.Add(cs); } } while (nav.MoveNext()); nav.MoveToParent(); } ExtensibleTreeView.TreeOptions ops = pad.GetNodeOptions(nav); if (ops != null || nav.Expanded || childrenState != null || nav.Selected) { NodeState es = new NodeState(); es.Expanded = nav.Expanded; es.Selected = nav.Selected; es.Options = ops; es.ChildrenState = childrenState; return(es); } else { return(null); } }
ICustomXmlSerializer ReadFrom(XmlReader reader, ExtensibleTreeView.TreeOptions parentOptions) { NodeState result = new NodeState(); result.NodeName = reader.GetAttribute(nameAttribute); if (!String.IsNullOrEmpty(reader.GetAttribute(expandedAttribute))) { result.Expanded = Boolean.Parse(reader.GetAttribute(expandedAttribute)); } if (!String.IsNullOrEmpty(reader.GetAttribute(selectedAttribute))) { result.Selected = Boolean.Parse(reader.GetAttribute(selectedAttribute)); } XmlReadHelper.ReadList(reader, reader.LocalName, delegate() { switch (reader.LocalName) { case "Option": if (result.Options == null) { result.Options = parentOptions != null ? parentOptions.CloneOptions(Gtk.TreeIter.Zero) : new ExtensibleTreeView.TreeOptions(); } result.Options [reader.GetAttribute("id")] = bool.Parse(reader.GetAttribute("value")); return(true); case "Node": if (result.ChildrenState == null) { result.ChildrenState = new List <NodeState> (); } result.ChildrenState.Add((NodeState)ReadFrom(reader, result.Options != null ? result.Options : parentOptions)); return(true); } return(false); }); return(result); }