diff options
| author | jpbruyere <jp.bruyere@hotmail.com> | 2015-06-10 09:40:30 +0200 |
|---|---|---|
| committer | jpbruyere <jp.bruyere@hotmail.com> | 2015-06-10 09:40:31 +0200 |
| commit | 578341c3e4410b803b65a739f950b103f3f0a95c (patch) | |
| tree | f7e90e6b204b58db5ea8fa14bba5d7e53668c744 /src/GraphicObjects/TemplatedControl.cs | |
| parent | 18e9dca6ea12f3f01a28c08f4b596268d0322a4f (diff) | |
- expandables
- events resolution stacking
- Inlined template
- xmlserialization debugging
Diffstat (limited to 'src/GraphicObjects/TemplatedControl.cs')
| -rw-r--r-- | src/GraphicObjects/TemplatedControl.cs | 66 |
1 files changed, 41 insertions, 25 deletions
diff --git a/src/GraphicObjects/TemplatedControl.cs b/src/GraphicObjects/TemplatedControl.cs index df843076..75d5b54f 100644 --- a/src/GraphicObjects/TemplatedControl.cs +++ b/src/GraphicObjects/TemplatedControl.cs @@ -21,10 +21,12 @@ using System; using System.Xml.Serialization; using System.ComponentModel; +using System.IO; +using System.Xml; namespace go { - public abstract class TemplatedControl : Container, IXmlSerializable + public abstract class TemplatedControl : PrivateContainer, IXmlSerializable { public TemplatedControl () : base() { @@ -38,11 +40,12 @@ namespace go // } - protected abstract void loadTemplate(); + protected abstract void loadTemplate(GraphicObject template = null); protected override void loadDefaultValues () { - loadTemplate (); + if (child == null)//trigger loading of default template if child is empty + loadTemplate (); base.loadDefaultValues (); this.Focusable = true; } @@ -61,29 +64,42 @@ namespace go } public override void ReadXml(System.Xml.XmlReader reader) { - base.ReadXml(reader); + using (System.Xml.XmlReader subTree = reader.ReadSubtree()) + { + subTree.Read (); + string tmp = subTree.ReadOuterXml (); -// using (System.Xml.XmlReader subTree = reader.ReadSubtree()) -// { -// subTree.Read(); //skip current node -// subTree.Read(); //read first child -// -// if (!subTree.IsStartElement()) -// return; -// -// Type t = Type.GetType("go." + subTree.Name); -// GraphicObject go = (GraphicObject)Activator.CreateInstance(t); -// -// (go as IXmlSerializable).ReadXml(subTree); -// -// setChild(go); -// -// subTree.Read(); -// -// if (!subTree.IsStartElement()) -// return; -// -// } + //seek for template tag first + using (XmlReader xr = new XmlTextReader (tmp, XmlNodeType.Element, null)) { + //load template first if inlined + + xr.Read (); //skip current node + + while (!xr.EOF) { + xr.Read (); //read first child + if (!xr.IsStartElement ()) + continue; + if (xr.Name == "Template") { + xr.Read (); + + Type t = Type.GetType ("go." + xr.Name); + GraphicObject go = (GraphicObject)Activator.CreateInstance (t); + (go as IXmlSerializable).ReadXml (xr); + + loadTemplate (go); + + xr.Read ();//go close tag + xr.Read ();//Template close tag + } else { + xr.ReadInnerXml (); + } + } + } + using (XmlReader xr = new XmlTextReader (tmp, XmlNodeType.Element, null)) { + xr.Read (); + base.ReadXml(xr); + } + } } public override void WriteXml(System.Xml.XmlWriter writer) { |