diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/GraphicObjects/TemplatedControl.cs | 3 | ||||
| -rw-r--r-- | src/IMLStream.cs | 25 | ||||
| -rw-r--r-- | src/Interface.cs | 1 |
3 files changed, 23 insertions, 6 deletions
diff --git a/src/GraphicObjects/TemplatedControl.cs b/src/GraphicObjects/TemplatedControl.cs index d3feb1d2..b04fe204 100644 --- a/src/GraphicObjects/TemplatedControl.cs +++ b/src/GraphicObjects/TemplatedControl.cs @@ -154,7 +154,8 @@ namespace Crow itemTemplates = new Dictionary<string, ItemTemplate> (); //TODO:check encoding itemTemplates[dataType] = new ItemTemplate (Encoding.UTF8.GetBytes(itemTmp)); - itemTemplates [dataType].CreateExpandDelegate(dataType, datas); + if (!string.IsNullOrEmpty (datas)) + itemTemplates [dataType].CreateExpandDelegate(dataType, datas); continue; } 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); } } } diff --git a/src/Interface.cs b/src/Interface.cs index 3233cdfe..350ef075 100644 --- a/src/Interface.cs +++ b/src/Interface.cs @@ -84,6 +84,7 @@ namespace Crow internal bool XmlLoading = false; + public Dictionary<string,object> Ressources = new Dictionary<string, object>(); public Queue<LayoutingQueueItem> LayoutingQueue = new Queue<LayoutingQueueItem> (); public Queue<LayoutingQueueItem> DiscardQueue; public Queue<LayoutingQueueItem> ProcessedLayoutingQueue; |