From bfcc3583d5dfa32ac2b314751e5cf99578da455d Mon Sep 17 00:00:00 2001 From: jpbruyere Date: Mon, 29 Feb 2016 11:38:45 +0100 Subject: [PATCH] ensure template are loaded when created in code --- src/GraphicObjects/TemplatedControl.cs | 23 ++++++++++++++--------- src/Interface.cs | 3 +++ 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/GraphicObjects/TemplatedControl.cs b/src/GraphicObjects/TemplatedControl.cs index ad7c74fe..bb2fbd28 100644 --- a/src/GraphicObjects/TemplatedControl.cs +++ b/src/GraphicObjects/TemplatedControl.cs @@ -56,7 +56,12 @@ namespace Crow public abstract class TemplatedControl : PrivateContainer, IXmlSerializable { #region CTOR - public TemplatedControl () : base() {} + public TemplatedControl () : base() + { + if (Interface.XmlLoaderCount > 0) + return; + loadTemplate (); + } #endregion string _template; @@ -91,10 +96,10 @@ namespace Crow this.SetChild (Interface.Load (dt.Path, this)); }else this.SetChild (template); - + this.ResolveBindings (); } - + #region IXmlSerializable public override System.Xml.Schema.XmlSchema GetSchema(){ return null; } public override void ReadXml(System.Xml.XmlReader reader) @@ -109,7 +114,7 @@ namespace Crow string tmp = subTree.ReadOuterXml (); //Load template from path set as attribute in templated control - if (string.IsNullOrEmpty (template)) { + if (string.IsNullOrEmpty (template)) { //seek for template tag first using (XmlReader xr = new XmlTextReader (tmp, XmlNodeType.Element, null)) { //load template first if inlined @@ -124,7 +129,7 @@ namespace Crow xr.Read (); Type t = Type.GetType ("Crow." + xr.Name); - GraphicObject go = (GraphicObject)Activator.CreateInstance (t); + GraphicObject go = (GraphicObject)Activator.CreateInstance (t); (go as IXmlSerializable).ReadXml (xr); loadTemplate (go); @@ -133,16 +138,16 @@ namespace Crow xr.Read ();//Template close tag break; } else - xr.ReadInnerXml (); + xr.ReadInnerXml (); } - } + } } else loadTemplate (Interface.Load (template, this)); - + //if no template found, load default one if (this.child == null) loadTemplate (); - + //normal xml read using (XmlReader xr = new XmlTextReader (tmp, XmlNodeType.Element, null)) { xr.Read (); diff --git a/src/Interface.cs b/src/Interface.cs index 6e9fb8a8..527e2f28 100644 --- a/src/Interface.cs +++ b/src/Interface.cs @@ -39,6 +39,7 @@ namespace Crow internal static bool XmlSerializerInit = false; /// keep ressource path for debug msg internal static string CurrentGOMLPath = ""; + internal static int XmlLoaderCount = 0; public static int TabSize = 4; public static string LineBreak = "\r\n"; @@ -122,10 +123,12 @@ namespace Crow public static GraphicObject Load (string path, object hostClass = null) { + Interface.XmlLoaderCount ++; CurrentGOMLPath = path; using (Stream stream = GetStreamFromPath (path)) { return Load(stream, GetTopContainerOfGOMLStream(stream), hostClass); } + Interface.XmlLoaderCount --; } -- 2.47.3