Aaron Bockover 73ed037fa4 2006-07-13 Aaron Bockover <aaron@abock.org>
* gstreamer-sharp/BindingHelper.cs: Static helper class to assist
    in making element bindings (delegate manipulation/invocation)

    * gstreamer-sharp/DynamicSignal.cs: Updated DynamicSignalArgs so they
    can more easily be derived

    * gstreamer-sharp/Makefile.am: Updated build

    * sample/HelloWorld.cs: More cleaning

    * sample/Makefile.am:
    * sample/TypeFind.cs: Added typefind sample

    * gstreamer-sharp.mdp: Updated MonoDevelop project

    * gstreamer-sharp/plugins-base/DecodeBin.cs: Signal support rewritten
    to use BindingHelper/DynamicSignal

    * gstreamer-sharp/plugins-base/TypeFindElement.cs: New typefind
    element wrapper using BindingHelper/DynamicSignal

    * gstreamer-sharp/Element.custom: Fixed property getter/setter methods
    and added indexer wrapper for property lookup for syntax convenience



git-svn-id: svn://anonsvn.mono-project.com/source/branches/abock/gstreamer-sharp@62570 e3ebcda4-bce8-0310-ba0a-eca2169e7518
2006-07-13 16:16:51 +00:00

53 lines
1.7 KiB
C#

//
// 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,
GLib.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,
GLib.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.DynamicSignalArgs args)
{
if(!type.IsSubclassOf(typeof(GLib.DynamicSignalArgs))) {
throw new ArgumentException("Args type must derive DynamicSignalArgs");
}
if(raiseDelegate != null) {
raiseDelegate.DynamicInvoke(new object [] { o,
Activator.CreateInstance(type, new object [] { args }) });
}
}
}
}