// // BindingHelper.cs: Utility methods to make creating // element bindings by hand an easier task // // Authors: // Aaron Bockover (abockover@novell.com) // // (C) 2006 Novell, Inc. // using System; using GLib; namespace Gst { public static class BindingHelper { public static Delegate AddProxySignalDelegate(Element element, string signal, DynamicSignalHandler baseHandler, Delegate existingHandler, Delegate addHandler) { if(existingHandler == null) { element.Connect(signal, baseHandler); } return Delegate.Combine(existingHandler, addHandler); } public static Delegate RemoveProxySignalDelegate(Element element, string signal, DynamicSignalHandler baseHandler, Delegate existingHandler, Delegate removeHandler) { Delegate temp_delegate = Delegate.Remove(existingHandler, removeHandler); if(temp_delegate == null) { element.Disconnect(signal, baseHandler); } return temp_delegate; } public static void InvokeProxySignalDelegate(Delegate raiseDelegate, Type type, object o, GLib.SignalArgs args) { if(!type.IsSubclassOf(typeof(GLib.SignalArgs))) { throw new ArgumentException("Args type must derive SignalArgs"); } if(raiseDelegate != null) { GLib.SignalArgs new_args = (GLib.SignalArgs) Activator.CreateInstance (type); new_args.RetVal = args.RetVal; new_args.Args = args.Args; raiseDelegate.DynamicInvoke(new object [] { o, new_args }); } } } }