* 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
53 lines
1.7 KiB
C#
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 }) });
|
|
}
|
|
}
|
|
}
|
|
}
|