diff options
| author | Jean-Philippe Bruyère <jp_bruyere@hotmail.com> | 2018-02-26 12:47:39 +0100 |
|---|---|---|
| committer | Jean-Philippe Bruyère <jp_bruyere@hotmail.com> | 2018-02-26 12:47:39 +0100 |
| commit | 225d8384090e77e6099010fdb0dfb474ab5c9a8f (patch) | |
| tree | 2681a1105edac064f2cfbf53d9a1d0aee04d7de8 /src/GraphicObjects | |
| parent | 57f94308df1d6c5ac4b4c94df47ba57a955b365d (diff) | |
in design saving of GraphicObject
Diffstat (limited to 'src/GraphicObjects')
| -rw-r--r-- | src/GraphicObjects/Container.cs | 12 | ||||
| -rw-r--r-- | src/GraphicObjects/GraphicObject.cs | 42 | ||||
| -rw-r--r-- | src/GraphicObjects/Group.cs | 12 | ||||
| -rw-r--r-- | src/GraphicObjects/TemplatedContainer.cs | 12 | ||||
| -rw-r--r-- | src/GraphicObjects/TemplatedControl.cs | 14 | ||||
| -rw-r--r-- | src/GraphicObjects/TemplatedGroup.cs | 21 |
6 files changed, 113 insertions, 0 deletions
diff --git a/src/GraphicObjects/Container.cs b/src/GraphicObjects/Container.cs index fedee0af..364bad83 100644 --- a/src/GraphicObjects/Container.cs +++ b/src/GraphicObjects/Container.cs @@ -38,6 +38,18 @@ namespace Crow /// </summary> public class Container : PrivateContainer { + #if DESIGN_MODE + public override void getIML (System.Xml.XmlDocument doc, System.Xml.XmlNode parentElem) + { + if (this.design_isTGItem) + return; + base.getIML (doc, parentElem); + if (child == null) + return; + child.getIML (doc, parentElem.LastChild); + } + #endif + #region CTOR protected Container() : base(){} public Container (Interface iface) : base(iface){} diff --git a/src/GraphicObjects/GraphicObject.cs b/src/GraphicObjects/GraphicObject.cs index 768b5c07..fadbe124 100644 --- a/src/GraphicObjects/GraphicObject.cs +++ b/src/GraphicObjects/GraphicObject.cs @@ -36,6 +36,12 @@ using System.Diagnostics; using Crow.IML; using System.Threading; + +#if DESIGN_MODE +using System.Xml; +using System.IO; +#endif + namespace Crow { /// <summary> @@ -50,6 +56,42 @@ namespace Crow public int design_column; public string design_imlPath; public Dictionary<string,string> design_members = new Dictionary<string, string>(); + public bool design_isTGItem = false; + + public string GetIML(){ + XmlDocument doc = new XmlDocument( ); + + using (StringWriter sw = new StringWriter ()) { + XmlWriterSettings settings = new XmlWriterSettings { + Indent = true, + IndentChars = "\t", + }; + using (XmlWriter xtw = XmlWriter.Create (sw, settings)) { + //(1) the xml declaration is recommended, but not mandatory + XmlDeclaration xmlDeclaration = doc.CreateXmlDeclaration ("1.0", "UTF-8", null); + doc.InsertBefore (xmlDeclaration, null); + getIML (doc, (XmlNode)doc); + doc.WriteTo (xtw); + } + return sw.ToString (); + } + } + + public virtual void getIML(XmlDocument doc, XmlNode parentElem) { + if (this.design_isTGItem) + return; + + XmlElement xe = doc.CreateElement(this.GetType().Name); + + foreach (KeyValuePair<string,string> kv in design_members) { + XmlAttribute xa = doc.CreateAttribute (kv.Key); + xa.Value = kv.Value; + xe.Attributes.Append (xa); + } + + parentElem.AppendChild (xe); + } + #endif #region IDisposable implementation diff --git a/src/GraphicObjects/Group.cs b/src/GraphicObjects/Group.cs index cfec7774..2875b4de 100644 --- a/src/GraphicObjects/Group.cs +++ b/src/GraphicObjects/Group.cs @@ -38,6 +38,18 @@ namespace Crow { public class Group : GraphicObject { + #if DESIGN_MODE + public override void getIML (System.Xml.XmlDocument doc, System.Xml.XmlNode parentElem) + { + if (this.design_isTGItem) + return; + base.getIML (doc, parentElem); + foreach (GraphicObject g in Children) { + g.getIML (doc, parentElem.LastChild); + } + } + #endif + protected ReaderWriterLockSlim childrenRWLock = new ReaderWriterLockSlim(); #region CTOR diff --git a/src/GraphicObjects/TemplatedContainer.cs b/src/GraphicObjects/TemplatedContainer.cs index 3e0dd801..a779595d 100644 --- a/src/GraphicObjects/TemplatedContainer.cs +++ b/src/GraphicObjects/TemplatedContainer.cs @@ -38,6 +38,18 @@ namespace Crow /// </summary> public class TemplatedContainer : TemplatedControl { + #if DESIGN_MODE + public override void getIML (System.Xml.XmlDocument doc, System.Xml.XmlNode parentElem) + { + if (this.design_isTGItem) + return; + base.getIML (doc, parentElem); + if (!HasContent) + return; + Content.getIML (doc, parentElem.LastChild); + } + #endif + #region CTOR protected TemplatedContainer() : base(){} public TemplatedContainer (Interface iface) : base(iface){} diff --git a/src/GraphicObjects/TemplatedControl.cs b/src/GraphicObjects/TemplatedControl.cs index c231fd0f..54991a41 100644 --- a/src/GraphicObjects/TemplatedControl.cs +++ b/src/GraphicObjects/TemplatedControl.cs @@ -43,6 +43,20 @@ namespace Crow /// </summary> public abstract class TemplatedControl : PrivateContainer { + #if DESIGN_MODE + public bool design_inlineTemplate = false; + public override void getIML (System.Xml.XmlDocument doc, System.Xml.XmlNode parentElem) + { + if (this.design_isTGItem) + return; + base.getIML (doc, parentElem); + if (child == null || !design_inlineTemplate) + return; + XmlElement xe = doc.CreateElement("Template"); + child.getIML (doc, xe); + parentElem.LastChild.AppendChild (xe); + } + #endif #region CTOR protected TemplatedControl() : base(){} public TemplatedControl (Interface iface) : base(iface){} diff --git a/src/GraphicObjects/TemplatedGroup.cs b/src/GraphicObjects/TemplatedGroup.cs index 8e0ffb44..a5cd2dd6 100644 --- a/src/GraphicObjects/TemplatedGroup.cs +++ b/src/GraphicObjects/TemplatedGroup.cs @@ -40,6 +40,24 @@ namespace Crow { public abstract class TemplatedGroup : TemplatedControl { + #if DESIGN_MODE + public override void getIML (System.Xml.XmlDocument doc, System.Xml.XmlNode parentElem) + { + if (this.design_isTGItem) + return; + base.getIML (doc, parentElem); + + if (string.IsNullOrEmpty(_itemTemplate)) { + foreach (ItemTemplate it in ItemTemplates.Values) + it.getIML (doc, parentElem.LastChild); + } + + foreach (GraphicObject g in Items) { + g.getIML (doc, parentElem.LastChild); + } + } + #endif + #region CTOR protected TemplatedGroup() : base(){} public TemplatedGroup (Interface iface) : base(iface){} @@ -429,6 +447,9 @@ namespace Crow lock (IFace.LayoutMutex) { g = iTemp.CreateInstance(); + #if DESIGN_MODE + g.design_isTGItem = true; + #endif page.AddChild (g); // if (isPaged) g.LogicalParent = this; |