summaryrefslogtreecommitdiff
path: root/gstreamer-sharp/glib-sharp/ParamSpec.cs
diff options
context:
space:
mode:
Diffstat (limited to 'gstreamer-sharp/glib-sharp/ParamSpec.cs')
-rw-r--r--gstreamer-sharp/glib-sharp/ParamSpec.cs206
1 files changed, 206 insertions, 0 deletions
diff --git a/gstreamer-sharp/glib-sharp/ParamSpec.cs b/gstreamer-sharp/glib-sharp/ParamSpec.cs
new file mode 100644
index 0000000..2dc0b31
--- /dev/null
+++ b/gstreamer-sharp/glib-sharp/ParamSpec.cs
@@ -0,0 +1,206 @@
+// ParamSpec.cs - GParamSpec class wrapper implementation
+//
+// Authors: Mike Kestner <mkestner@novell.com>
+//
+// Copyright (c) 2008 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the Lesser GNU General
+// Public License as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GLib {
+
+ using System;
+ using System.Runtime.InteropServices;
+
+ internal enum ParamFlags {
+ None = 0,
+ Readable = 1 << 0,
+ Writable = 1 << 1,
+ Construct = 1 << 2,
+ ConstructOnly = 1 << 3,
+ }
+
+ public class ParamSpec {
+
+ IntPtr handle;
+
+ private static IntPtr CreateParamSpec (string name, string nick, string blurb, GType type, ParamFlags pflags) {
+ int flags = (int) pflags;
+ IntPtr ret;
+
+ IntPtr p_name = GLib.Marshaller.StringToPtrGStrdup (name);
+ IntPtr p_nick = GLib.Marshaller.StringToPtrGStrdup (nick);
+ IntPtr p_blurb = GLib.Marshaller.StringToPtrGStrdup (blurb);
+
+ if (type == GType.Char)
+ ret = g_param_spec_char (p_name, p_nick, p_blurb, SByte.MinValue, SByte.MaxValue, 0, flags);
+ else if (type == GType.UChar)
+ ret = g_param_spec_uchar (p_name, p_nick, p_blurb, Byte.MinValue, Byte.MaxValue, 0, flags);
+ else if (type == GType.Boolean)
+ ret = g_param_spec_boolean (p_name, p_nick, p_blurb, false, flags);
+ else if (type == GType.Int)
+ ret = g_param_spec_int (p_name, p_nick, p_blurb, Int32.MinValue, Int32.MaxValue, 0, flags);
+ else if (type == GType.UInt)
+ ret = g_param_spec_uint (p_name, p_nick, p_blurb, 0, UInt32.MaxValue, 0, flags);
+ else if (type == GType.Long)
+ ret = g_param_spec_long (p_name, p_nick, p_blurb, IntPtr.Zero, IntPtr.Size == 4 ? new IntPtr (Int32.MaxValue) : new IntPtr (Int64.MaxValue), IntPtr.Zero, flags);
+ else if (type == GType.ULong)
+ ret = g_param_spec_ulong (p_name, p_nick, p_blurb, UIntPtr.Zero, UIntPtr.Size == 4 ? new UIntPtr (UInt32.MaxValue) : new UIntPtr (UInt64.MaxValue), UIntPtr.Zero, flags);
+ else if (type == GType.Int64)
+ ret = g_param_spec_int64 (p_name, p_nick, p_blurb, Int64.MinValue, Int64.MaxValue, 0, flags);
+ else if (type == GType.UInt64)
+ ret = g_param_spec_uint64 (p_name, p_nick, p_blurb, 0, UInt64.MaxValue, 0, flags);
+ /*
+ else if (type == GType.Enum)
+ else if (type == GType.Flags)
+ * TODO:
+ * Both g_param_spec_enum and g_param_spec_flags expect default property values and the members of the enum seemingly cannot be enumerated
+ */
+ else if (type == GType.Float)
+ ret = g_param_spec_float (p_name, p_nick, p_blurb, Single.MinValue, Single.MaxValue, 0.0f, flags);
+ else if (type == GType.Double)
+ ret = g_param_spec_double (p_name, p_nick, p_blurb, Double.MinValue, Double.MaxValue, 0.0, flags);
+ else if (type == GType.String)
+ ret = g_param_spec_string (p_name, p_nick, p_blurb, IntPtr.Zero, flags);
+ else if (type == GType.Pointer)
+ ret = g_param_spec_pointer (p_name, p_nick, p_blurb, flags);
+ else if (type.Val == g_gtype_get_type ())
+ ret = g_param_spec_gtype (p_name, p_nick, p_blurb, GType.None.Val, flags);
+ else if (g_type_is_a (type.Val, GType.Boxed.Val))
+ ret = g_param_spec_boxed (p_name, p_nick, p_blurb, type.Val, flags);
+ else if (g_type_is_a (type.Val, GType.Object.Val))
+ ret = g_param_spec_object (p_name, p_nick, p_blurb, type.Val, flags);
+ else
+ throw new ArgumentException ("type");
+
+ GLib.Marshaller.Free (p_name);
+ GLib.Marshaller.Free (p_nick);
+ GLib.Marshaller.Free (p_blurb);
+
+ return ret;
+ }
+
+ internal ParamSpec (string name, string nick, string blurb, GType type, ParamFlags pflags) {
+ handle = CreateParamSpec (name, nick, blurb, type, pflags);
+ }
+
+ public ParamSpec (string name, string nick, string blurb, GType type, bool readable, bool writable)
+ {
+ ParamFlags pflags = ParamFlags.None;
+ if (readable) pflags |= ParamFlags.Readable;
+ if (writable) pflags |= ParamFlags.Writable;
+
+ handle = CreateParamSpec (name, nick, blurb, type, pflags);
+ }
+
+ public ParamSpec (IntPtr native)
+ {
+ handle = native;
+ }
+
+ public IntPtr Handle {
+ get { return handle; }
+ }
+
+ public GType ValueType {
+ get {
+ GParamSpec spec = (GParamSpec) Marshal.PtrToStructure (Handle, typeof (GParamSpec));
+ return new GType (spec.value_type);
+ }
+ }
+
+ public string Name {
+ get {
+ GParamSpec spec = (GParamSpec) Marshal.PtrToStructure (Handle, typeof (GParamSpec));
+ return GLib.Marshaller.Utf8PtrToString (spec.name);
+ }
+ }
+
+ struct GTypeInstance {
+ IntPtr g_class;
+ }
+
+ struct GParamSpec {
+ GTypeInstance g_type_instance;
+
+ public IntPtr name;
+ ParamFlags flags;
+ public IntPtr value_type;
+ IntPtr owner_type;
+
+ IntPtr _nick;
+ IntPtr _blurb;
+ IntPtr qdata;
+ uint ref_count;
+ uint param_id;
+ }
+
+ [DllImport("libgobject-2.0-0.dll")]
+ static extern IntPtr g_param_spec_char (IntPtr name, IntPtr nick, IntPtr blurb, sbyte min, sbyte max, sbyte dval, int flags);
+
+ [DllImport("libgobject-2.0-0.dll")]
+ static extern IntPtr g_param_spec_uchar (IntPtr name, IntPtr nick, IntPtr blurb, byte min, byte max, byte dval, int flags);
+
+ [DllImport("libgobject-2.0-0.dll")]
+ static extern IntPtr g_param_spec_boolean (IntPtr name, IntPtr nick, IntPtr blurb, bool dval, int flags);
+
+ [DllImport("libgobject-2.0-0.dll")]
+ static extern IntPtr g_param_spec_int (IntPtr name, IntPtr nick, IntPtr blurb, int min, int max, int dval, int flags);
+
+ [DllImport("libgobject-2.0-0.dll")]
+ static extern IntPtr g_param_spec_uint (IntPtr name, IntPtr nick, IntPtr blurb, uint min, uint max, uint dval, int flags);
+
+ [DllImport("libgobject-2.0-0.dll")]
+ static extern IntPtr g_param_spec_long (IntPtr name, IntPtr nick, IntPtr blurb, IntPtr min, IntPtr max, IntPtr dval, int flags);
+
+ [DllImport("libgobject-2.0-0.dll")]
+ static extern IntPtr g_param_spec_ulong (IntPtr name, IntPtr nick, IntPtr blurb, UIntPtr min, UIntPtr max, UIntPtr dval, int flags);
+
+ [DllImport("libgobject-2.0-0.dll")]
+ static extern IntPtr g_param_spec_int64 (IntPtr name, IntPtr nick, IntPtr blurb, long min, long max, long dval, int flags);
+
+ [DllImport("libgobject-2.0-0.dll")]
+ static extern IntPtr g_param_spec_uint64 (IntPtr name, IntPtr nick, IntPtr blurb, ulong min, ulong max, ulong dval, int flags);
+
+ [DllImport("libgobject-2.0-0.dll")]
+ static extern IntPtr g_param_spec_float (IntPtr name, IntPtr nick, IntPtr blurb, float min, float max, float dval, int flags);
+
+ [DllImport("libgobject-2.0-0.dll")]
+ static extern IntPtr g_param_spec_double (IntPtr name, IntPtr nick, IntPtr blurb, double min, double max, double dval, int flags);
+
+ [DllImport("libgobject-2.0-0.dll")]
+ static extern IntPtr g_param_spec_string (IntPtr name, IntPtr nick, IntPtr blurb, IntPtr dval, int flags);
+
+ [DllImport("libgobject-2.0-0.dll")]
+ static extern IntPtr g_param_spec_pointer (IntPtr name, IntPtr nick, IntPtr blurb, int flags);
+
+ [DllImport("libgobject-2.0-0.dll")]
+ static extern IntPtr g_param_spec_gtype (IntPtr name, IntPtr nick, IntPtr blurb, IntPtr dval, int flags);
+
+ [DllImport("libgobject-2.0-0.dll")]
+ static extern IntPtr g_param_spec_boxed (IntPtr name, IntPtr nick, IntPtr blurb, IntPtr return_type, int flags);
+
+ [DllImport("libgobject-2.0-0.dll")]
+ static extern IntPtr g_param_spec_object (IntPtr name, IntPtr nick, IntPtr blurb, IntPtr return_type, int flags);
+
+ [DllImport("libgobject-2.0-0.dll")]
+ static extern IntPtr g_gtype_get_type ();
+
+ [DllImport("libgobject-2.0-0.dll")]
+ static extern bool g_type_is_a (IntPtr a, IntPtr b);
+
+ }
+}
+