diff options
| author | jpbruyere <jp.bruyere@hotmail.com> | 2016-08-05 05:32:49 +0200 |
|---|---|---|
| committer | jpbruyere <jp.bruyere@hotmail.com> | 2016-08-05 05:32:49 +0200 |
| commit | 47dad629d4ff744071f06a342f5f2eabaa879d71 (patch) | |
| tree | 61c6128415244f7f9751856cbbb6c248f005c515 /src/IMLStream.cs | |
| parent | 4ca12da2740078a292600736c60c09897263ef95 (diff) | |
First MSIL expand in TreeView with ItemTemplate, need to share
ItemTemplates.
modifié : Tests/Interfaces/Unsorted/testTreeView.crow
modifié : src/GraphicObjects/TemplatedControl.cs
modifié : src/IMLStream.cs
modifié : src/Interface.cs
Diffstat (limited to 'src/IMLStream.cs')
| -rw-r--r-- | src/IMLStream.cs | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/src/IMLStream.cs b/src/IMLStream.cs index 14262595..c7e26d5d 100644 --- a/src/IMLStream.cs +++ b/src/IMLStream.cs @@ -48,10 +48,11 @@ namespace Crow public void CreateExpandDelegate (string strDataType, string method){ Type dataType = Type.GetType(strDataType); - Type host_type = typeof(ItemTemplate);//not sure is the best place to put the dyn method - Type evt_type = typeof(EventHandler); + Type hostType = typeof(ItemTemplate);//not sure is the best place to put the dyn method + Type evtType = typeof(EventHandler); + Type listBoxType = typeof(ListBox); - MethodInfo evtInvoke = evt_type.GetMethod ("Invoke"); + MethodInfo evtInvoke = evtType.GetMethod ("Invoke"); ParameterInfo [] evtParams = evtInvoke.GetParameters (); Type handlerArgsType = evtParams [1].ParameterType; @@ -59,17 +60,31 @@ namespace Crow DynamicMethod dm = new DynamicMethod ("dyn_expand_" + method, typeof (void), args, - host_type); + hostType); #region IL generation ILGenerator il = dm.GetILGenerator (256); + il.Emit (OpCodes.Ldarg_1); + + MethodInfo miFindByName = typeof(GraphicObject).GetMethod("FindByName"); + il.Emit(OpCodes.Ldstr, "List"); + il.Emit (OpCodes.Callvirt, miFindByName); + + il.Emit (OpCodes.Ldarg_1); + il.Emit (OpCodes.Callvirt, typeof(GraphicObject).GetProperty("DataSource").GetGetMethod ()); + + MethodInfo miGetDatas = dataType.GetMethod (method, new Type[] {}); + il.Emit (OpCodes.Callvirt, miGetDatas); + + il.Emit (OpCodes.Callvirt, listBoxType.GetProperty("Data").GetSetMethod ()); + il.Emit (OpCodes.Ret); #endregion - Expand = (EventHandler)dm.CreateDelegate (evt_type, this); + Expand = (EventHandler)dm.CreateDelegate (evtType, this); } } } |