Author: iainmc
Date: 2005-07-08 11:37:15 -0400 (Fri, 08 Jul 2005)
New Revision: 47106

Added:
   
trunk/mcs/class/PresentationFramework/Mono.Windows.Serialization/ObjectWriter.cs
   trunk/mcs/tools/xamlc/demo/runtimetest.cs
   trunk/mcs/tools/xamlc/demo/runtimetest.xaml
Modified:
   trunk/mcs/class/PresentationFramework/ChangeLog
   trunk/mcs/class/PresentationFramework/PresentationFramework.dll.sources
   trunk/mcs/tools/xamlc/ChangeLog
   trunk/mcs/tools/xamlc/README
   trunk/mcs/tools/xamlc/demo/Makefile
Log:
2005-07-06  Iain McCoy  <[EMAIL PROTECTED]>

        * 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



Modified: trunk/mcs/class/PresentationFramework/ChangeLog
===================================================================
--- trunk/mcs/class/PresentationFramework/ChangeLog     2005-07-08 15:32:34 UTC 
(rev 47105)
+++ trunk/mcs/class/PresentationFramework/ChangeLog     2005-07-08 15:37:15 UTC 
(rev 47106)
@@ -1,5 +1,12 @@
 2005-07-08  Iain McCoy  <[EMAIL PROTECTED]>
 
+       * 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  <[EMAIL PROTECTED]>
+
        * Mono.Windows.Serialization/XamlParser.cs,
          Mono.Windows.Serialization/XamlWriter.cs,
          Mono.Windows.Serialization/CodeWriter.cs: removed TypeConverter

Added: 
trunk/mcs/class/PresentationFramework/Mono.Windows.Serialization/ObjectWriter.cs
===================================================================
--- 
trunk/mcs/class/PresentationFramework/Mono.Windows.Serialization/ObjectWriter.cs
    2005-07-08 15:32:34 UTC (rev 47105)
+++ 
trunk/mcs/class/PresentationFramework/Mono.Windows.Serialization/ObjectWriter.cs
    2005-07-08 15:37:15 UTC (rev 47106)
@@ -0,0 +1,136 @@
+//
+// CodeWriter.cs
+//
+// Author:
+//   Iain McCoy ([EMAIL PROTECTED])
+//
+// (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();
+               }
+       }
+}

Modified: 
trunk/mcs/class/PresentationFramework/PresentationFramework.dll.sources
===================================================================
--- trunk/mcs/class/PresentationFramework/PresentationFramework.dll.sources     
2005-07-08 15:32:34 UTC (rev 47105)
+++ trunk/mcs/class/PresentationFramework/PresentationFramework.dll.sources     
2005-07-08 15:37:15 UTC (rev 47106)
@@ -2,6 +2,7 @@
 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

Modified: trunk/mcs/tools/xamlc/ChangeLog
===================================================================
--- trunk/mcs/tools/xamlc/ChangeLog     2005-07-08 15:32:34 UTC (rev 47105)
+++ trunk/mcs/tools/xamlc/ChangeLog     2005-07-08 15:37:15 UTC (rev 47106)
@@ -1,5 +1,11 @@
 2005-07-06  Iain McCoy  <[EMAIL PROTECTED]>
 
+       * demo/runtimetest.xaml
+         demo/runtimetest.cs,
+         demo/Makefile: creation of objects at runtime from a xaml file
+
+2005-07-06  Iain McCoy  <[EMAIL PROTECTED]>
+
        * demo/test.xaml: add use of x:Name attribute
 
 2005-07-06  Iain McCoy  <[EMAIL PROTECTED]>

Modified: trunk/mcs/tools/xamlc/README
===================================================================
--- trunk/mcs/tools/xamlc/README        2005-07-08 15:32:34 UTC (rev 47105)
+++ trunk/mcs/tools/xamlc/README        2005-07-08 15:37:15 UTC (rev 47106)
@@ -41,3 +41,6 @@
 Bye
 
 Hopefully you can work out how that is produced from the test.xaml file.
+
+In the same directory, "make run2" should demonstrate the runtime creation of
+objects from xaml files.

Modified: trunk/mcs/tools/xamlc/demo/Makefile
===================================================================
--- trunk/mcs/tools/xamlc/demo/Makefile 2005-07-08 15:32:34 UTC (rev 47105)
+++ trunk/mcs/tools/xamlc/demo/Makefile 2005-07-08 15:37:15 UTC (rev 47106)
@@ -10,6 +10,10 @@
        $(CSCOMPILE) -r:TestVocab.dll -o test.exe test.xaml.out.cs
        $(RUNTIME) --debug test.exe
 
+run2:
+       make runtimetest.exe
+       $(RUNTIME) --debug runtimetest.exe
+
 clean-local:
        rm -f TestVocab.dll test.xaml.out.cs
 
@@ -18,3 +22,6 @@
 TestVocab.dll: $(SOURCES)
        $(CSCOMPILE) -r:PresentationFramework.dll -r:WindowsBase.dll 
-out:TestVocab.dll -target:library $(SOURCES)
 
+
+runtimetest.exe: runtimetest.cs TestVocab.dll
+       $(CSCOMPILE) -r:PresentationFramework.dll -r:WindowsBase.dll 
-r:TestVocab.dll -out:runtimetest.exe runtimetest.cs

Added: trunk/mcs/tools/xamlc/demo/runtimetest.cs
===================================================================
--- trunk/mcs/tools/xamlc/demo/runtimetest.cs   2005-07-08 15:32:34 UTC (rev 
47105)
+++ trunk/mcs/tools/xamlc/demo/runtimetest.cs   2005-07-08 15:37:15 UTC (rev 
47106)
@@ -0,0 +1,14 @@
+using Xaml.TestVocab.Console;
+using System.Windows.Serialization;
+using Mono.Windows.Serialization;
+
+class RuntimeTest {
+       public static void Main(string[] args) {
+               ObjectWriter ow = new ObjectWriter();
+               XamlParser r = new XamlParser("runtimetest.xaml", ow);
+               r.Parse();
+
+               ConsoleApp c = (ConsoleApp)(ow.instance);
+               c.Run();
+       }
+}

Added: trunk/mcs/tools/xamlc/demo/runtimetest.xaml
===================================================================
--- trunk/mcs/tools/xamlc/demo/runtimetest.xaml 2005-07-08 15:32:34 UTC (rev 
47105)
+++ trunk/mcs/tools/xamlc/demo/runtimetest.xaml 2005-07-08 15:37:15 UTC (rev 
47106)
@@ -0,0 +1,12 @@
+<?Mapping ClrNamespace="Xaml.TestVocab.Console" Assembly="TestVocab" 
XmlNamespace="console" ?>
+
+<ConsoleApp xmlns="console" 
+               xmlns:x="http://schemas.microsoft.com/winfx/xaml/2005"; 
+               x:Class="DemoConsoleApp">
+       <ConsoleWriter>IT BEGINS!</ConsoleWriter>
+       <ConsoleWriter x:Name="_greeter" Text="Hello World" />
+       <ConsoleWriter>
+               <ConsoleWriter.Text>Goodbye.</ConsoleWriter.Text>
+       </ConsoleWriter>
+       <ConsoleWriter>Bye</ConsoleWriter>
+</ConsoleApp>

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to