aboutsummaryrefslogtreecommitdiffstatsci
path: root/src/GraphicObjects
diff options
context:
space:
mode:
authorJean-Philippe Bruyère <jp_bruyere@hotmail.com>2018-02-26 12:47:39 +0100
committerJean-Philippe Bruyère <jp_bruyere@hotmail.com>2018-02-26 12:47:39 +0100
commit225d8384090e77e6099010fdb0dfb474ab5c9a8f (patch)
tree2681a1105edac064f2cfbf53d9a1d0aee04d7de8 /src/GraphicObjects
parent57f94308df1d6c5ac4b4c94df47ba57a955b365d (diff)
in design saving of GraphicObject
Diffstat (limited to 'src/GraphicObjects')
-rw-r--r--src/GraphicObjects/Container.cs12
-rw-r--r--src/GraphicObjects/GraphicObject.cs42
-rw-r--r--src/GraphicObjects/Group.cs12
-rw-r--r--src/GraphicObjects/TemplatedContainer.cs12
-rw-r--r--src/GraphicObjects/TemplatedControl.cs14
-rw-r--r--src/GraphicObjects/TemplatedGroup.cs21
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;