<?xml version="1.0"?>\r
-<VerticalStack Name="List">\r
-</VerticalStack>
\ No newline at end of file
+<Border Fit="True" Background="Gray">\r
+ <VerticalStack Name="List" Margin="5">\r
+ </VerticalStack>\r
+</Border>
\ No newline at end of file
\r
namespace test\r
{\r
- public class ClsItem\r
- {\r
- public string Field;\r
- public ClsItem(){\r
- }\r
- public ClsItem(string str){\r
- Field = str;\r
- }\r
- }\r
+\r
class GOLIBTest_4 : OpenTKGameWindow, IValueChange\r
{\r
#region IValueChange implementation\r
--- /dev/null
+#define MONO_CAIRO_DEBUG_DISPOSE\r
+\r
+\r
+using System;\r
+using System.Runtime.InteropServices;\r
+using OpenTK;\r
+using OpenTK.Graphics.OpenGL;\r
+using OpenTK.Input;\r
+\r
+using System.Diagnostics;\r
+\r
+//using GGL;\r
+using go;\r
+using System.Threading;\r
+using System.Collections.Generic;\r
+\r
+\r
+namespace test\r
+{\r
+ public class ClsItem : IValueChange\r
+ {\r
+ #region IValueChange implementation\r
+\r
+ public event EventHandler<ValueChangeEventArgs> ValueChanged;\r
+\r
+ #endregion\r
+\r
+ public string field;\r
+\r
+ public string Field {\r
+ get {\r
+ return field;\r
+ }\r
+ set {\r
+ field = value;\r
+ ValueChanged.Raise(this, new ValueChangeEventArgs ("Field", null, field));\r
+ }\r
+ }\r
+\r
+ public ClsItem(){\r
+ }\r
+ public ClsItem(string str){\r
+ Field = str;\r
+ }\r
+ }\r
+ \r
+ class GOLIBTest_Listbox : OpenTKGameWindow, IValueChange\r
+ {\r
+ #region IValueChange implementation\r
+\r
+ public event EventHandler<ValueChangeEventArgs> ValueChanged;\r
+\r
+ #endregion\r
+ \r
+ public GOLIBTest_Listbox ()\r
+ : base(1024, 600,"test")\r
+ {}\r
+\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
+ ListBox g;\r
+\r
+ protected override void OnLoad (EventArgs e)\r
+ {\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
+ }\r
+ protected override void OnRenderFrame (FrameEventArgs e)\r
+ {\r
+ GL.Clear (ClearBufferMask.ColorBufferBit);\r
+ base.OnRenderFrame (e);\r
+ SwapBuffers ();\r
+ }\r
+\r
+ protected override void OnUpdateFrame (FrameEventArgs e)\r
+ {\r
+ base.OnUpdateFrame (e);\r
+ }\r
+\r
+ [STAThread]\r
+ static void Main ()\r
+ {\r
+ Console.WriteLine ("starting example");\r
+\r
+ using (GOLIBTest_Listbox win = new GOLIBTest_Listbox( )) {\r
+ win.Run (30.0);\r
+ }\r
+ }\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+<?xml version="1.0"?>\r
+ <ListBox Data="{TestList}">\r
+ </ListBox>\r
<OutputType>Exe</OutputType>
<RootNamespace>Tests</RootNamespace>
<AssemblyName>Tests</AssemblyName>
- <StartupObject>test.GOLIBTest_4</StartupObject>
+ <StartupObject>test.GOLIBTest_Listbox</StartupObject>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<OutputPath>..\bin\$(configuration)</OutputPath>
<IntermediateOutputPath>obj\$(configuration)</IntermediateOutputPath>
<LogicalName>
</LogicalName>
</Compile>
+ <Compile Include="GOLIBTest_Listbox.cs">
+ <LogicalName>
+ </LogicalName>
+ </Compile>
</ItemGroup>
<ItemGroup>
<None Include="image\u.svg">
</LogicalName>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
+ <None Include="Interfaces\test_Listbox.goml">
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+ <LogicalName>
+ </LogicalName>
+ </None>
</ItemGroup>
<ItemGroup>
<Folder Include="Interfaces\">
if (!srcValueType.IsValueType)
il.Emit(OpCodes.Castclass, srcValueType);
- il.Emit(OpCodes.Callvirt, miToStr);
+ 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);
fi.SetValue(es.Source, del);
}
}
-
- foreach (DynAttribute binding in Bindings) {
-// Type tSource = binding.Source.GetType ();
-// if (!tSource.GetInterfaces ().Any (i => i.Name == "IValueChange")){
-// Debug.WriteLine ("Binding source does not implement IValueChange.");
-// continue;
-// }
- //MemberInfo mi = binding.Source.GetType ().GetMember (binding.MemberName);
+ while (Bindings.Count > 0) {
+ DynAttribute binding = Bindings [0];
+ Bindings.RemoveAt (0);
CompilerServices.CreateBinding (binding, hostClass);
}
+// foreach (DynAttribute binding in Bindings) {
+//// Type tSource = binding.Source.GetType ();
+//// if (!tSource.GetInterfaces ().Any (i => i.Name == "IValueChange")){
+//// Debug.WriteLine ("Binding source does not implement IValueChange.");
+//// continue;
+//// }
+// //MemberInfo mi = binding.Source.GetType ().GetMember (binding.MemberName);
+// CompilerServices.CreateBinding (binding, hostClass);
+// }
+// Bindings.Clear ();
}
public static GraphicObject Load(Stream stream, Type type, object hostClass = null)
{
fi.SetValue(es.Source, del);
}
}
-
- foreach (DynAttribute binding in Bindings) {
- // Type tSource = binding.Source.GetType ();
- // if (!tSource.GetInterfaces ().Any (i => i.Name == "IValueChange")){
- // Debug.WriteLine ("Binding source does not implement IValueChange.");
- // continue;
- // }
- //MemberInfo mi = binding.Source.GetType ().GetMember (binding.MemberName);
+ while (Bindings.Count > 0) {
+ DynAttribute binding = Bindings [0];
+ Bindings.RemoveAt (0);
CompilerServices.CreateBinding (binding, hostClass);
}
+// foreach (DynAttribute binding in Bindings) {
+// // Type tSource = binding.Source.GetType ();
+// // if (!tSource.GetInterfaces ().Any (i => i.Name == "IValueChange")){
+// // Debug.WriteLine ("Binding source does not implement IValueChange.");
+// // continue;
+// // }
+// //MemberInfo mi = binding.Source.GetType ().GetMember (binding.MemberName);
+// CompilerServices.CreateBinding (binding, hostClass);
+// }
+// Bindings.Clear ();
return result;
}