diff options
author | Iain McCoy <iainmc@mono-cvs.ximian.com> | 2005-07-08 19:37:15 +0400 |
---|---|---|
committer | Iain McCoy <iainmc@mono-cvs.ximian.com> | 2005-07-08 19:37:15 +0400 |
commit | 432349b6340c70d334769fcecc9d41c52dc0c07d (patch) | |
tree | aa975cc8496c39a3f9fc534250384529e5f52ca1 /mcs/class/PresentationFramework | |
parent | f0d220c939b8023d725a848bcd4291314a50dbbf (diff) |
2005-07-06 Iain McCoy <iain@mccoy.id.au>
* Mono.Windows.Serialization/ObjectWriter.cs: code to build objects at
runtime from a xaml file. Current problems are with events and
delegates (current behaviour is untested and possibly useless) and
DependencyProperties (not implemented yet)
* demo/runtimetest.xaml
demo/runtimetest.cs,
demo/Makefile: creation of objects at runtime from a xaml file
svn path=/trunk/mcs/; revision=47106
Diffstat (limited to 'mcs/class/PresentationFramework')
3 files changed, 144 insertions, 0 deletions
diff --git a/mcs/class/PresentationFramework/ChangeLog b/mcs/class/PresentationFramework/ChangeLog index ebdb2d7bb4e..e10b953e243 100644 --- a/mcs/class/PresentationFramework/ChangeLog +++ b/mcs/class/PresentationFramework/ChangeLog @@ -1,5 +1,12 @@ 2005-07-08 Iain McCoy <iain@mccoy.id.au> + * Mono.Windows.Serialization/ObjectWriter.cs: code to build objects at + runtime from a xaml file. Current problems are with events and + delegates (current behaviour is untested and possibly useless) and + DependencyProperties (not implemented yet) + +2005-07-08 Iain McCoy <iain@mccoy.id.au> + * Mono.Windows.Serialization/XamlParser.cs, Mono.Windows.Serialization/XamlWriter.cs, Mono.Windows.Serialization/CodeWriter.cs: removed TypeConverter diff --git a/mcs/class/PresentationFramework/Mono.Windows.Serialization/ObjectWriter.cs b/mcs/class/PresentationFramework/Mono.Windows.Serialization/ObjectWriter.cs new file mode 100644 index 00000000000..e4a13f8a56f --- /dev/null +++ b/mcs/class/PresentationFramework/Mono.Windows.Serialization/ObjectWriter.cs @@ -0,0 +1,136 @@ +// +// CodeWriter.cs +// +// Author: +// Iain McCoy (iain@mccoy.id.au) +// +// (C) 2005 Iain McCoy +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// + +using System; +using System.Reflection; +using System.IO; +using System.Collections; +using System.CodeDom; +using System.CodeDom.Compiler; +using System.Windows.Serialization; + +namespace Mono.Windows.Serialization { + public class ObjectWriter : XamlWriter { + public object instance; + ArrayList objects = new ArrayList(); + + public void CreateTopLevel(Type parent, string className) + { + instance = Activator.CreateInstance(parent); + objects.Add(instance); + } + + public void CreateObject(Type type, string varName) + { + Object o = Activator.CreateInstance(type); + ((IAddChild)objects[objects.Count - 1]).AddChild(o); + objects.Add(o); + } + + public void CreateProperty(PropertyInfo property) + { + objects.Add(property); + } + + // top of stack is a reference to an object + // pushes a reference to the event + public void CreateEvent(EventInfo evt) + { + objects.Add(evt); + } + + public void CreateDependencyProperty(Type attachedTo, string propertyName, Type propertyType) + { + throw new NotImplementedException(); + } + + public void EndDependencyProperty() + { + throw new NotImplementedException(); + } + + public void CreateElementText(string text) + { + ((IAddChild)objects[objects.Count - 1]).AddText(text); + } + + // top of stack is reference to an event + public void CreateEventDelegate(string functionName, Type eventDelegateType) + { + EventInfo e = (EventInfo)objects[objects.Count-1]; + object o = objects[objects.Count-2]; + e.AddEventHandler(o, Delegate.CreateDelegate(o.GetType(), o, functionName)); + } + // top of stack is reference to a property + public void CreatePropertyDelegate(string functionName, Type propertyType) + { + PropertyInfo p = (PropertyInfo)objects[objects.Count-1]; + object o = objects[objects.Count-2]; + p.SetValue(o, Delegate.CreateDelegate(o.GetType(), o, functionName), null); + } + + public void CreatePropertyText(string text, Type propertyType) + { + if (propertyType != typeof(string)) + throw new NotImplementedException(); + PropertyInfo p = (PropertyInfo)objects[objects.Count-1]; + object o = objects[objects.Count-2]; + p.SetValue(o, text, null); + } + + // top of stack is reference to an attached property + public void CreateDependencyPropertyText(string text, Type propertyType) + { + throw new NotImplementedException(); + } + + public void EndObject() + { + objects.RemoveAt(objects.Count - 1); + } + + public void EndProperty() + { + objects.RemoveAt(objects.Count - 1); + } + + public void EndEvent() + { + objects.RemoveAt(objects.Count - 1); + } + + public void Finish() + { + } + + public void CreateCode(string code) + { + throw new NotImplementedException(); + } + } +} diff --git a/mcs/class/PresentationFramework/PresentationFramework.dll.sources b/mcs/class/PresentationFramework/PresentationFramework.dll.sources index 441e473e613..a39ed38938a 100644 --- a/mcs/class/PresentationFramework/PresentationFramework.dll.sources +++ b/mcs/class/PresentationFramework/PresentationFramework.dll.sources @@ -2,6 +2,7 @@ System.Windows.Serialization/IAddChild.cs System.Windows.Serialization/Mapper.cs System.Windows.Serialization/NamespaceMapEntry.cs Mono.Windows.Serialization/CodeWriter.cs +Mono.Windows.Serialization/ObjectWriter.cs Mono.Windows.Serialization/Exceptions.cs Mono.Windows.Serialization/XamlParser.cs Mono.Windows.Serialization/XamlWriter.cs |