Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mcs/class/PresentationFramework/ChangeLog7
-rw-r--r--mcs/class/PresentationFramework/Mono.Windows.Serialization/ObjectWriter.cs136
-rw-r--r--mcs/class/PresentationFramework/PresentationFramework.dll.sources1
-rw-r--r--mcs/tools/xamlc/ChangeLog6
-rw-r--r--mcs/tools/xamlc/README3
-rw-r--r--mcs/tools/xamlc/demo/Makefile7
-rw-r--r--mcs/tools/xamlc/demo/runtimetest.cs14
-rw-r--r--mcs/tools/xamlc/demo/runtimetest.xaml12
8 files changed, 186 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
diff --git a/mcs/tools/xamlc/ChangeLog b/mcs/tools/xamlc/ChangeLog
index f757c0e7662..05f44e677dd 100644
--- a/mcs/tools/xamlc/ChangeLog
+++ b/mcs/tools/xamlc/ChangeLog
@@ -1,5 +1,11 @@
2005-07-06 Iain McCoy <iain@mccoy.id.au>
+ * demo/runtimetest.xaml
+ demo/runtimetest.cs,
+ demo/Makefile: creation of objects at runtime from a xaml file
+
+2005-07-06 Iain McCoy <iain@mccoy.id.au>
+
* demo/test.xaml: add use of x:Name attribute
2005-07-06 Iain McCoy <iain@mccoy.id.au>
diff --git a/mcs/tools/xamlc/README b/mcs/tools/xamlc/README
index 46a40e0045b..33f0b33f419 100644
--- a/mcs/tools/xamlc/README
+++ b/mcs/tools/xamlc/README
@@ -41,3 +41,6 @@ Bye
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.
diff --git a/mcs/tools/xamlc/demo/Makefile b/mcs/tools/xamlc/demo/Makefile
index 1c925b6c497..2d0591ced3d 100644
--- a/mcs/tools/xamlc/demo/Makefile
+++ b/mcs/tools/xamlc/demo/Makefile
@@ -10,6 +10,10 @@ run:
$(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 @@ all-local: TestVocab.dll
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
diff --git a/mcs/tools/xamlc/demo/runtimetest.cs b/mcs/tools/xamlc/demo/runtimetest.cs
new file mode 100644
index 00000000000..1aa0419b308
--- /dev/null
+++ b/mcs/tools/xamlc/demo/runtimetest.cs
@@ -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();
+ }
+}
diff --git a/mcs/tools/xamlc/demo/runtimetest.xaml b/mcs/tools/xamlc/demo/runtimetest.xaml
new file mode 100644
index 00000000000..b449c3068d6
--- /dev/null
+++ b/mcs/tools/xamlc/demo/runtimetest.xaml
@@ -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>