<?xml version="1.0"?>\r
-<Label Text="{Field}"/>\r
+<Label Margin="2" Focusable="true" Text="{}" \r
+ MouseEnter="{Background=SteelBlue}"\r
+ MouseLeave="{Background=Transparent}"\r
+/>\r
\r
namespace test\r
{\r
- public class ClsItem : IValueChange\r
+ public class ClsItem\r
{\r
- #region IValueChange implementation\r
-\r
- public event EventHandler<ValueChangeEventArgs> ValueChanged;\r
-\r
- #endregion\r
+// #region IValueChange implementation\r
+//\r
+// public event EventHandler<ValueChangeEventArgs> ValueChanged;\r
+//\r
+// #endregion\r
\r
public string field;\r
\r
}\r
set {\r
field = value;\r
- ValueChanged.Raise(this, new ValueChangeEventArgs ("Field", null, field));\r
+ //ValueChanged.Raise(this, new ValueChangeEventArgs ("Field", null, field));\r
}\r
}\r
\r
: base(1024, 600,"test")\r
{}\r
\r
- public List<ClsItem> TestList = new List<ClsItem>(new ClsItem[] \r
+// public List<ClsItem> TestList = new List<ClsItem>(new ClsItem[] \r
+// {\r
+// new ClsItem("string 1"),\r
+// new ClsItem("string 2"),\r
+// new ClsItem("string 3")\r
+// });\r
+ public List<string> TestList = new List<string>(new string[] \r
{\r
- new ClsItem("string 1"),\r
- new ClsItem("string 2"),\r
- new ClsItem("string 3")\r
- });\r
+ "string 1",\r
+ "string 2",\r
+ "string 3"\r
+ }); \r
+// string[] TestList = new string[] \r
+// {\r
+// "string 1",\r
+// "string 2",\r
+// "string 3"\r
+// }; \r
ListBox g;\r
\r
protected override void OnLoad (EventArgs e)\r
base.OnLoad (e);\r
LoadInterface("Interfaces/test_Listbox.goml", out g);\r
\r
- ValueChanged.Raise(this, new ValueChangeEventArgs ("TestList", null, TestList));\r
- TestList [1].Field = "test string";\r
+// TestList [1].Field = "test string";\r
+// ValueChanged.Raise(this, new ValueChangeEventArgs ("TestList", null, TestList));\r
+\r
+\r
}\r
protected override void OnRenderFrame (FrameEventArgs e)\r
{\r
evtFi.SetValue(es.Source, del);
}
- public static void CreateBinding(DynAttribute binding, object _source)
- {
-
+ public static void ResolveBinding(DynAttribute binding, object _source)
+ {
Type srcType = _source.GetType ();
Type dstType = binding.Source.GetType ();
+ MemberInfo miDst = dstType.GetMember (binding.MemberName).FirstOrDefault ();
MemberInfo miSrc = srcType.GetMember (binding.Value).FirstOrDefault();
- Type srcValueType = null;
- if (miSrc.MemberType == MemberTypes.Property)
- srcValueType = (miSrc as PropertyInfo).PropertyType;
- else if (miSrc.MemberType == MemberTypes.Field)
- srcValueType = (miSrc as FieldInfo).FieldType;
- else
- throw new Exception("unandled source type for binding");
+ //initialize target with actual value
+ if (miDst.MemberType == MemberTypes.Property) {
+ if (miSrc == null)//if no member is provided for binding, source raw value is taken
+ (miDst as PropertyInfo).GetSetMethod ().Invoke (binding.Source, new object[] { _source });
+ else if (miSrc.MemberType == MemberTypes.Property)
+ (miDst as PropertyInfo).GetSetMethod ().Invoke (binding.Source, new object[] { (miSrc as PropertyInfo).GetGetMethod ().Invoke (_source, null) });
+ else if (miSrc.MemberType == MemberTypes.Field)
+ (miDst as PropertyInfo).GetSetMethod ().Invoke (binding.Source, new object[] { (miSrc as FieldInfo).GetValue (_source) });
+ } else if (miDst.MemberType == MemberTypes.Field) {
+ if (miSrc == null)//if no member is provided for binding, source raw value is taken
+ (miDst as FieldInfo).SetValue (binding.Source, _source );
+ else if (miSrc.MemberType == MemberTypes.Property)
+ (miDst as FieldInfo).SetValue (binding.Source, (miSrc as PropertyInfo).GetGetMethod ().Invoke (_source, null));
+ else if (miSrc.MemberType == MemberTypes.Field)
+ (miDst as FieldInfo).SetValue (binding.Source, (miSrc as FieldInfo).GetValue (_source));
+ }else
+ throw new Exception("unandled destination member type for binding");
+
#region Retrieve EventHandler parameter type
EventInfo ei = srcType.GetEvent ("ValueChanged");
+ if (ei == null)
+ return; //no dynamic update if ValueChanged interface is not implemented
+
MethodInfo evtInvoke = ei.EventHandlerType.GetMethod ("Invoke");
ParameterInfo[] evtParams = evtInvoke.GetParameters ();
-
Type handlerArgsType = evtParams [1].ParameterType;
+
#endregion
Type[] args = {typeof(object), handlerArgsType};
string[] srcLines = binding.Value.Trim().Split (new char[] { ';' });
foreach (string srcLine in srcLines) {
- MethodInfo infoWriteLine = typeof(System.Diagnostics.Debug).GetMethod("WriteLine", new Type[] { typeof(string) });
+ //MethodInfo infoWriteLine = typeof(System.Diagnostics.Debug).GetMethod("WriteLine", new Type[] { typeof(string) });
string statement = srcLine.Trim ();
FieldInfo fiNewValue = typeof(ValueChangeEventArgs).GetField("NewValue");
il.Emit(OpCodes.Ldfld, fiNewValue);
- PropertyInfo piTarget = dstType.GetProperty(binding.MemberName);
+
MethodInfo miToStr = typeof(object).GetMethod("ToString",Type.EmptyTypes);
+ PropertyInfo piTarget = dstType.GetProperty(binding.MemberName);
+ Type srcValueType = null;
+ if (miSrc.MemberType == MemberTypes.Property)
+ srcValueType = (miSrc as PropertyInfo).PropertyType;
+ else if (miSrc.MemberType == MemberTypes.Field)
+ srcValueType = (miSrc as FieldInfo).FieldType;
+ else
+ throw new Exception("unandled source member type for binding");
+
if (!srcValueType.IsValueType)
il.Emit(OpCodes.Castclass, srcValueType);
if (piTarget.PropertyType == typeof(string))
il.Emit(OpCodes.Callvirt, miToStr);
il.Emit(OpCodes.Callvirt, piTarget.GetSetMethod());
-
- //initialize target with actual value
- if (miSrc.MemberType == MemberTypes.Property)
- piTarget.GetSetMethod().Invoke(binding.Source, new object[] { (miSrc as PropertyInfo).GetGetMethod().Invoke(_source,null)});
- else if (miSrc.MemberType == MemberTypes.Field){
- MethodInfo miSetTarget = piTarget.GetSetMethod();
- FieldInfo fiSource = miSrc as FieldInfo;
- miSetTarget.Invoke(binding.Source, new object[] { fiSource.GetValue(_source)});
- }
}
il.MarkLabel(labFailed);
il.Emit(OpCodes.Ret);
}
#endregion
- IList data;
+ ICollection data;
+ int _selectedIndex;
+
+ public int SelectedIndex{
+ get { return _selectedIndex; }
+ set { _selectedIndex = value; }
+ }
[XmlAttributeAttribute()][DefaultValue(null)]
- public IList Data {
+ public ICollection Data {
get {
return data;
}
- set {
- if (data == value)
- return;
-
+ set {
data = value;
-
+ _list.Children.Clear ();
+ if (data == null)
+ return;
foreach (var item in data) {
- _list.addChild(Interface.Load ("#go.Templates.ItemTemplate.goml", item));
+ GraphicObject g = Interface.Load ("#go.Templates.ItemTemplate.goml", item);
+// g.Tag = item;
+// g.MouseClick += (object sender, OpenTK.Input.MouseButtonEventArgs e) => {
+//
+// };
+ _list.addChild(g);
}
}
namespace go
{
- public abstract class TemplatedControl : Container
+ public abstract class TemplatedControl : Container, IXmlSerializable
{
public TemplatedControl () : base()
{
//prevent name searching in template
return nameToFind == this.Name ? this : null;
}
+
+ #region IXmlSerializable
+
+ public override System.Xml.Schema.XmlSchema GetSchema()
+ {
+ return null;
+ }
+ public override void ReadXml(System.Xml.XmlReader reader)
+ {
+ base.ReadXml(reader);
+
+// using (System.Xml.XmlReader subTree = reader.ReadSubtree())
+// {
+// subTree.Read(); //skip current node
+// subTree.Read(); //read first child
+//
+// if (!subTree.IsStartElement())
+// return;
+//
+// Type t = Type.GetType("go." + subTree.Name);
+// GraphicObject go = (GraphicObject)Activator.CreateInstance(t);
+//
+// (go as IXmlSerializable).ReadXml(subTree);
+//
+// setChild(go);
+//
+// subTree.Read();
+//
+// if (!subTree.IsStartElement())
+// return;
+//
+// }
+ }
+ public override void WriteXml(System.Xml.XmlWriter writer)
+ {
+ base.WriteXml(writer);
+//
+// if (child == null)
+// return;
+//
+// writer.WriteStartElement(child.GetType().Name);
+// (child as IXmlSerializable).WriteXml(writer);
+// writer.WriteEndElement();
+ }
+
+ #endregion
}
}
}
public static void Load<T>(string file, out T result, object hostClass = null)
{
+ //result = (T)(Load (file, hostClass) as object);
+
EventsToResolve = new List<DynAttribute>();
Bindings = new List<DynAttribute> ();
while (Bindings.Count > 0) {
DynAttribute binding = Bindings [0];
Bindings.RemoveAt (0);
- CompilerServices.CreateBinding (binding, hostClass);
+ CompilerServices.ResolveBinding (binding, hostClass);
}
// foreach (DynAttribute binding in Bindings) {
//// Type tSource = binding.Source.GetType ();
while (Bindings.Count > 0) {
DynAttribute binding = Bindings [0];
Bindings.RemoveAt (0);
- CompilerServices.CreateBinding (binding, hostClass);
+ CompilerServices.ResolveBinding (binding, hostClass);
}
// foreach (DynAttribute binding in Bindings) {