aboutsummaryrefslogtreecommitdiffstatsci
path: root/src/IMLStream.cs
diff options
context:
space:
mode:
authorjpbruyere <jp.bruyere@hotmail.com>2016-08-05 05:32:49 +0200
committerjpbruyere <jp.bruyere@hotmail.com>2016-08-05 05:32:49 +0200
commit47dad629d4ff744071f06a342f5f2eabaa879d71 (patch)
tree61c6128415244f7f9751856cbbb6c248f005c515 /src/IMLStream.cs
parent4ca12da2740078a292600736c60c09897263ef95 (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.cs25
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);
}
}
}