From 92757a8d629812303ff3665343bd098917cca611 Mon Sep 17 00:00:00 2001 From: fcolin Date: Thu, 1 Feb 2007 12:04:16 +0000 Subject: modification structure svn --- Ivy/IvyApplicationBinding.cs | 186 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 186 insertions(+) create mode 100644 Ivy/IvyApplicationBinding.cs (limited to 'Ivy/IvyApplicationBinding.cs') diff --git a/Ivy/IvyApplicationBinding.cs b/Ivy/IvyApplicationBinding.cs new file mode 100644 index 0000000..9183850 --- /dev/null +++ b/Ivy/IvyApplicationBinding.cs @@ -0,0 +1,186 @@ +using System; +using System.Collections.Generic; +using System.Collections.Specialized; +using System.Text; +using System.ComponentModel; +using System.Threading; + +namespace IvyBus +{ + /* This is the Application side of binding storage */ + /* association of a generated Key and a delegate and the expression */ + /* this is SEND to other client */ +#if (!PocketPC) + [PropertyTab(typeof(System.Windows.Forms.Design.EventsTab), PropertyTabScope.Component)] + [DefaultEvent("Callback")] +#endif + [DesignerCategory("Component")] + [DesignTimeVisible(false)] /* should be added via Ivy component */ + public class IvyApplicationBinding : System.ComponentModel.Component + { + private BindingType binding; + +#if (!PocketPC) + [Category("Ivy")] +#endif + public BindingType Binding + { + get { return binding; } + set { binding = value; } + } + private ushort key; + + #if (!PocketPC) + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] +#endif + public ushort Key + { + get { return key; } + set { key = value; } + } + + private object[] args; +#if (!PocketPC) + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] +#endif + public object[] Args + { + get { return args; } + set { args = value; } + } + private string expression; +#if (!PocketPC) + [Category("Ivy")] +#endif + [DefaultValue(null)] + public string Expression + { + get { return expression; } + set { expression = value; } + } + private string formated_expression; + public string FormatedExpression + { + get + { + FormatExpression(); + return formated_expression; + } + } + + private List arguments; + ///SentMessageClasses the first word token of sent messages + /// optimise the parsing process when sending messages + /// +#if (!PocketPC) + [Category("Ivy")] + + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + + // sinon bug System.String constructor not found ! + [Editor( + "System.Windows.Forms.Design.StringCollectionEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "System.Drawing.Design.UITypeEditor,System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" + )] + + [Description("Arguments used when formating the expression")] +#endif + public List Arguments + { + get + { + return arguments; + } + } + +#if (!PocketPC) + [Category("Ivy")] + [Description("Event fired when Message Matching expression received")] +#endif + public event EventHandler Callback; + + public IvyApplicationBinding() + { + arguments = new List(); + } + public IvyApplicationBinding(IContainer container) + : this() + { + container.Add(this); + } + // translate part of expression to object property + public void FormatExpression() + { + //// Safely : +#if (!PocketPC)//TODO Pocket PC doesn't have Target Member + EventHandler temp = Callback; + if (temp != null) + { + //TODO Pocket PC doesn't have Target Member + object target = temp.Target; + if (args == null) + { + args = new object[arguments.Count]; + for (int i = 0; i < arguments.Count; i++) + { + System.Reflection.PropertyInfo prop = target.GetType().GetProperty(arguments[i]); + if (prop != null) + args[i] = prop.GetValue(target, null); + else //TODO what else BUG msgbox in desing mode !!! + args[i] = arguments[i]; + } + } + formated_expression = string.Format(expression, args); + } + else //TODO Abnormal condition Design Time +#endif + formated_expression = expression; + + } + +#if ( PocketPC ) + internal void Firevent(System.Windows.Forms.Control control, IvyMessageEventArgs e) + { + //// Safely invoke an event: + EventHandler temp = Callback; + + if (temp == null) + { + throw new IvyException("(callCallback) Not callback for id " + e.Id); + } + if (control != null) + { + control.Invoke(temp, this, e); + } + else + temp(this, e); + } +#else + internal void Firevent(System.Threading.SynchronizationContext syncContext, IvyMessageEventArgs e) + { + //// Safely invoke an event: + EventHandler temp = Callback; + + if (temp == null) + { + throw new IvyException("(callCallback) Not callback for id " + e.Id); + } + if (syncContext != null) + { + SendOrPostCallback update = delegate(object state) + { + IvyMessageEventArgs args = (IvyMessageEventArgs)state; + temp(this, args); + }; + syncContext.Post(update, e); + } + else + temp(this, e); + } + +#endif + } + +} -- cgit v1.1