aboutsummaryrefslogtreecommitdiffstatsci
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/GraphicObjects/TemplatedControl.cs3
-rw-r--r--src/IMLStream.cs25
-rw-r--r--src/Interface.cs1
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;