// This file was generated by the Gtk# code generator.
// Any changes made will be lost if regenerated.

namespace GES {

	using System;
	using System.Collections;
	using System.Collections.Generic;
	using System.Runtime.InteropServices;

#region Autogenerated code
	public partial class DiscovererManager : GLib.Object {

		public DiscovererManager (IntPtr raw) : base(raw) {}

		protected DiscovererManager() : base(IntPtr.Zero)
		{
			CreateNativeObject (new string [0], new GLib.Value [0]);
		}

		[DllImport("ges-1.0", CallingConvention = CallingConvention.Cdecl)]
		static extern ulong ges_discoverer_manager_get_timeout(IntPtr raw);

		[DllImport("ges-1.0", CallingConvention = CallingConvention.Cdecl)]
		static extern void ges_discoverer_manager_set_timeout(IntPtr raw, ulong timeout);

		[GLib.Property ("timeout")]
		public ulong Timeout {
			get  {
				ulong raw_ret = ges_discoverer_manager_get_timeout(Handle);
				ulong ret = raw_ret;
				return ret;
			}
			set  {
				ges_discoverer_manager_set_timeout(Handle, value);
			}
		}

		[DllImport("ges-1.0", CallingConvention = CallingConvention.Cdecl)]
		static extern bool ges_discoverer_manager_get_use_cache(IntPtr raw);

		[DllImport("ges-1.0", CallingConvention = CallingConvention.Cdecl)]
		static extern void ges_discoverer_manager_set_use_cache(IntPtr raw, bool use_cache);

		[GLib.Property ("use-cache")]
		public bool UseCache {
			get  {
				bool raw_ret = ges_discoverer_manager_get_use_cache(Handle);
				bool ret = raw_ret;
				return ret;
			}
			set  {
				ges_discoverer_manager_set_use_cache(Handle, value);
			}
		}

		[GLib.Signal("discovered")]
		public event GES.DiscoveredHandler Discovered {
			add {
				this.AddSignalHandler ("discovered", value, typeof (GES.DiscoveredArgs));
			}
			remove {
				this.RemoveSignalHandler ("discovered", value);
			}
		}

		[GLib.Signal("source-setup")]
		public event GES.SourceSetupHandler SourceSetup {
			add {
				this.AddSignalHandler ("source-setup", value, typeof (GES.SourceSetupArgs));
			}
			remove {
				this.RemoveSignalHandler ("source-setup", value);
			}
		}

		[GLib.Signal("load-serialized-info")]
		public event GES.LoadSerializedInfoHandler LoadSerializedInfo {
			add {
				this.AddSignalHandler ("load-serialized-info", value, typeof (GES.LoadSerializedInfoArgs));
			}
			remove {
				this.RemoveSignalHandler ("load-serialized-info", value);
			}
		}

		static DiscoveredNativeDelegate Discovered_cb_delegate;
		static DiscoveredNativeDelegate DiscoveredVMCallback {
			get {
				if (Discovered_cb_delegate == null)
					Discovered_cb_delegate = new DiscoveredNativeDelegate (Discovered_cb);
				return Discovered_cb_delegate;
			}
		}

		static void OverrideDiscovered (GLib.GType gtype)
		{
			OverrideDiscovered (gtype, DiscoveredVMCallback);
		}

		static void OverrideDiscovered (GLib.GType gtype, DiscoveredNativeDelegate callback)
		{
			OverrideVirtualMethod (gtype, "discovered", callback);
		}
		[UnmanagedFunctionPointer (CallingConvention.Cdecl)]
		delegate void DiscoveredNativeDelegate (IntPtr inst, IntPtr info, IntPtr error);

		static void Discovered_cb (IntPtr inst, IntPtr info, IntPtr error)
		{
			try {
				DiscovererManager __obj = GLib.Object.GetObject (inst, false) as DiscovererManager;
				__obj.OnDiscovered (GLib.Object.GetObject(info) as Gst.PbUtils.DiscovererInfo, error);
			} catch (Exception e) {
				GLib.ExceptionManager.RaiseUnhandledException (e, false);
			}
		}

		[GLib.DefaultSignalHandler(Type=typeof(GES.DiscovererManager), ConnectionMethod="OverrideDiscovered")]
		protected virtual void OnDiscovered (Gst.PbUtils.DiscovererInfo info, IntPtr error)
		{
			InternalDiscovered (info, error);
		}

		private void InternalDiscovered (Gst.PbUtils.DiscovererInfo info, IntPtr error)
		{
			GLib.Value ret = GLib.Value.Empty;
			GLib.ValueArray inst_and_params = new GLib.ValueArray (3);
			GLib.Value[] vals = new GLib.Value [3];
			vals [0] = new GLib.Value (this);
			inst_and_params.Append (vals [0]);
			vals [1] = new GLib.Value (info);
			inst_and_params.Append (vals [1]);
			vals [2] = new GLib.Value (error);
			inst_and_params.Append (vals [2]);
			g_signal_chain_from_overridden (inst_and_params.ArrayPtr, ref ret);
			foreach (GLib.Value v in vals)
				v.Dispose ();
		}

		static LoadSerializedInfoNativeDelegate LoadSerializedInfo_cb_delegate;
		static LoadSerializedInfoNativeDelegate LoadSerializedInfoVMCallback {
			get {
				if (LoadSerializedInfo_cb_delegate == null)
					LoadSerializedInfo_cb_delegate = new LoadSerializedInfoNativeDelegate (LoadSerializedInfo_cb);
				return LoadSerializedInfo_cb_delegate;
			}
		}

		static void OverrideLoadSerializedInfo (GLib.GType gtype)
		{
			OverrideLoadSerializedInfo (gtype, LoadSerializedInfoVMCallback);
		}

		static void OverrideLoadSerializedInfo (GLib.GType gtype, LoadSerializedInfoNativeDelegate callback)
		{
			OverrideVirtualMethod (gtype, "load-serialized-info", callback);
		}
		[UnmanagedFunctionPointer (CallingConvention.Cdecl)]
		delegate IntPtr LoadSerializedInfoNativeDelegate (IntPtr inst, IntPtr uri);

		static IntPtr LoadSerializedInfo_cb (IntPtr inst, IntPtr uri)
		{
			try {
				DiscovererManager __obj = GLib.Object.GetObject (inst, false) as DiscovererManager;
				Gst.PbUtils.DiscovererInfo __result;
				__result = __obj.OnLoadSerializedInfo (GLib.Marshaller.Utf8PtrToString (uri));
				return __result == null ? IntPtr.Zero : __result.OwnedHandle;
			} catch (Exception e) {
				GLib.ExceptionManager.RaiseUnhandledException (e, true);
				// NOTREACHED: above call does not return.
				throw e;
			}
		}

		[GLib.DefaultSignalHandler(Type=typeof(GES.DiscovererManager), ConnectionMethod="OverrideLoadSerializedInfo")]
		protected virtual Gst.PbUtils.DiscovererInfo OnLoadSerializedInfo (string uri)
		{
			return InternalLoadSerializedInfo (uri);
		}

		private Gst.PbUtils.DiscovererInfo InternalLoadSerializedInfo (string uri)
		{
			GLib.Value ret = new GLib.Value (GLib.GType.Object);
			GLib.ValueArray inst_and_params = new GLib.ValueArray (2);
			GLib.Value[] vals = new GLib.Value [2];
			vals [0] = new GLib.Value (this);
			inst_and_params.Append (vals [0]);
			vals [1] = new GLib.Value (uri);
			inst_and_params.Append (vals [1]);
			g_signal_chain_from_overridden (inst_and_params.ArrayPtr, ref ret);
			foreach (GLib.Value v in vals)
				v.Dispose ();
			Gst.PbUtils.DiscovererInfo result = (Gst.PbUtils.DiscovererInfo) ret;
			ret.Dispose ();
			return result;
		}

		static SourceSetupNativeDelegate SourceSetup_cb_delegate;
		static SourceSetupNativeDelegate SourceSetupVMCallback {
			get {
				if (SourceSetup_cb_delegate == null)
					SourceSetup_cb_delegate = new SourceSetupNativeDelegate (SourceSetup_cb);
				return SourceSetup_cb_delegate;
			}
		}

		static void OverrideSourceSetup (GLib.GType gtype)
		{
			OverrideSourceSetup (gtype, SourceSetupVMCallback);
		}

		static void OverrideSourceSetup (GLib.GType gtype, SourceSetupNativeDelegate callback)
		{
			OverrideVirtualMethod (gtype, "source-setup", callback);
		}
		[UnmanagedFunctionPointer (CallingConvention.Cdecl)]
		delegate void SourceSetupNativeDelegate (IntPtr inst, IntPtr source);

		static void SourceSetup_cb (IntPtr inst, IntPtr source)
		{
			try {
				DiscovererManager __obj = GLib.Object.GetObject (inst, false) as DiscovererManager;
				__obj.OnSourceSetup (GLib.Object.GetObject(source) as Gst.Element);
			} catch (Exception e) {
				GLib.ExceptionManager.RaiseUnhandledException (e, false);
			}
		}

		[GLib.DefaultSignalHandler(Type=typeof(GES.DiscovererManager), ConnectionMethod="OverrideSourceSetup")]
		protected virtual void OnSourceSetup (Gst.Element source)
		{
			InternalSourceSetup (source);
		}

		private void InternalSourceSetup (Gst.Element source)
		{
			GLib.Value ret = GLib.Value.Empty;
			GLib.ValueArray inst_and_params = new GLib.ValueArray (2);
			GLib.Value[] vals = new GLib.Value [2];
			vals [0] = new GLib.Value (this);
			inst_and_params.Append (vals [0]);
			vals [1] = new GLib.Value (source);
			inst_and_params.Append (vals [1]);
			g_signal_chain_from_overridden (inst_and_params.ArrayPtr, ref ret);
			foreach (GLib.Value v in vals)
				v.Dispose ();
		}


		// Internal representation of the wrapped structure ABI.
		static GLib.AbiStruct _class_abi = null;
		static public new GLib.AbiStruct class_abi {
			get {
				if (_class_abi == null)
					_class_abi = new GLib.AbiStruct (GLib.Object.class_abi.Fields);

				return _class_abi;
			}
		}


		// End of the ABI representation.

		[DllImport("ges-1.0", CallingConvention = CallingConvention.Cdecl)]
		static extern IntPtr ges_discoverer_manager_get_type();

		public static new GLib.GType GType { 
			get {
				IntPtr raw_ret = ges_discoverer_manager_get_type();
				GLib.GType ret = new GLib.GType(raw_ret);
				return ret;
			}
		}

		[DllImport("ges-1.0", CallingConvention = CallingConvention.Cdecl)]
		static extern IntPtr ges_discoverer_manager_get_default();

		public static GES.DiscovererManager Default { 
			get {
				IntPtr raw_ret = ges_discoverer_manager_get_default();
				GES.DiscovererManager ret = GLib.Object.GetObject(raw_ret, true) as GES.DiscovererManager;
				return ret;
			}
		}


		static DiscovererManager ()
		{
			GtkSharp.GstEditingServices.ObjectManager.Initialize ();
		}

		// Internal representation of the wrapped structure ABI.
		static GLib.AbiStruct _abi_info = null;
		static public new GLib.AbiStruct abi_info {
			get {
				if (_abi_info == null)
					_abi_info = new GLib.AbiStruct (GLib.Object.abi_info.Fields);

				return _abi_info;
			}
		}


		// End of the ABI representation.

#endregion
	}
}
