1// Gtk.RadioToolButton.cs - Gtk RadioToolButton class customizations
2//
3// Author: Mike Kestner <mkestner@novell.com>
4//
5// Copyright (c) 2006 Novell, Inc.
6//
7// This program is free software; you can redistribute it and/or
8// modify it under the terms of version 2 of the Lesser GNU General
9// Public License as published by the Free Software Foundation.
10//
11// This program is distributed in the hope that it will be useful,
12// but WITHOUT ANY WARRANTY; without even the implied warranty of
13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14// Lesser General Public License for more details.
15//
16// You should have received a copy of the GNU Lesser General Public
17// License along with this program; if not, write to the
18// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19// Boston, MA 02111-1307, USA.
20
21namespace Gtk {
22
23 using System;
24 using System.Runtime.InteropServices;
25
26 public partial class RadioToolButton {
27
28 [DllImport (Global.GtkNativeDll, CallingConvention = CallingConvention.Cdecl)]
29 static extern IntPtr gtk_radio_tool_button_new (IntPtr group);
30
31 public RadioToolButton (RadioToolButton[] group) : base (IntPtr.Zero)
32 {
33 if (GetType () != typeof (RadioToolButton)) {
34 CreateNativeObject (new string [0], new GLib.Value [0]);
35 Group = group;
36 return;
37 }
38 IntPtr native_group = IntPtr.Zero;
39 if (group != null) {
40 GLib.List list = new GLib.List(IntPtr.Zero);
41 foreach (RadioToolButton item in group) {
42 list.Append (item.Handle);
43 }
44 native_group = list.Handle;
45 }
46 Raw = gtk_radio_tool_button_new(native_group);
47 }
48
49 [DllImport (Global.GtkNativeDll, CallingConvention = CallingConvention.Cdecl)]
50 static extern IntPtr gtk_radio_tool_button_new_from_stock (IntPtr group, IntPtr stock_id);
51
52 public RadioToolButton (RadioToolButton[] group, string stock_id) : base (IntPtr.Zero)
53 {
54 if (GetType () != typeof (RadioToolButton)) {
55 GLib.Value[] vals = new GLib.Value [1];
56 string[] names = { "stock_id" };
57 vals [0] = new GLib.Value (stock_id);
58 CreateNativeObject (names, vals);
59 Group = group;
60 return;
61 }
62 IntPtr stock_id_as_native = GLib.Marshaller.StringToPtrGStrdup (stock_id);
63 IntPtr native_group = IntPtr.Zero;
64 if (group != null) {
65 GLib.List list = new GLib.List(IntPtr.Zero);
66 foreach (RadioToolButton item in group) {
67 list.Append (item.Handle);
68 }
69 native_group = list.Handle;
70 }
71 Raw = gtk_radio_tool_button_new_from_stock(native_group, stock_id_as_native);
72 GLib.Marshaller.Free (stock_id_as_native);
73 }
74
75 [DllImport(Global.GtkNativeDll, CallingConvention = CallingConvention.Cdecl)]
76 static extern IntPtr gtk_radio_tool_button_get_group(IntPtr raw);
77
78 [DllImport (Global.GtkNativeDll, CallingConvention = CallingConvention.Cdecl)]
79 static extern void gtk_radio_tool_button_set_group(IntPtr raw, IntPtr list);
80
81 [GLib.Property ("group")]
82 public RadioToolButton[] Group {
83 get {
84 IntPtr raw_ret = gtk_radio_tool_button_get_group(Handle);
85 RadioToolButton[] ret = (RadioToolButton[]) GLib.Marshaller.ListPtrToArray (raw_ret, typeof(GLib.SList), false, false, typeof(RadioToolButton));
86 return ret;
87 }
88 set {
89 IntPtr native_group = IntPtr.Zero;
90 if (value != null) {
91 GLib.List list = new GLib.List(IntPtr.Zero);
92 foreach (RadioToolButton item in value) {
93 list.Append (item.Handle);
94 }
95 native_group = list.Handle;
96 }
97 gtk_radio_tool_button_set_group(Handle, native_group);
98 }
99 }
100 }
101}
102