1 /*
2  * Copyright (c) 2003, 2010 by the gtk2-perl team (see the file AUTHORS)
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Library General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Library General Public License for more details.
13  *
14  * You should have received a copy of the GNU Library General Public
15  * License along with this library; if not, write to the
16  * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17  * Boston, MA  02110-1301  USA.
18  *
19  * $Id$
20  */
21 
22 #include "gtk2perl.h"
23 
24 MODULE = Gtk2::RadioMenuItem	PACKAGE = Gtk2::RadioMenuItem	PREFIX = gtk_radio_menu_item_
25 
26 GtkWidget *
27 gtk_radio_menu_item_new (class, member_or_listref=NULL, label=NULL)
28 	SV          * member_or_listref
29 	const gchar * label
30     ALIAS:
31 	Gtk2::RadioMenuItem::new_with_mnemonic = 1
32 	Gtk2::RadioMenuItem::new_with_label = 2
33     PREINIT:
34 	GSList           * group = NULL;
35 	GtkRadioMenuItem * member = NULL;
36     CODE:
37 	if( gperl_sv_is_defined (member_or_listref)
38 	    && SvROK (member_or_listref)
39 	    && SvRV (member_or_listref) != &PL_sv_undef )
40 	{
41 		if( gperl_sv_is_array_ref (member_or_listref) )
42 		{
43 			AV * av = (AV*)SvRV(member_or_listref);
44 			SV ** svp = av_fetch(av, 0, 0);
45 			if( svp && gperl_sv_is_defined(*svp) )
46 				member = SvGtkRadioMenuItem(*svp);
47 		}
48 		else
49 			member = SvGtkRadioMenuItem_ornull(member_or_listref);
50 		if( member )
51 			group = member->group;
52 	}
53 
54 	if (label) {
55 		if (ix == 2)
56 			RETVAL = gtk_radio_menu_item_new_with_label (group, label);
57 		else
58 			RETVAL = gtk_radio_menu_item_new_with_mnemonic (group, label);
59 	} else
60 		RETVAL = gtk_radio_menu_item_new (group);
61     OUTPUT:
62 	RETVAL
63 
64 #if GTK_CHECK_VERSION (2, 4, 0)
65 
66 GtkWidget *
67 gtk_radio_menu_item_new_from_widget (class, group, label=NULL)
68 	GtkRadioMenuItem * group
69 	const gchar      * label
70     ALIAS:
71 	Gtk2::RadioMenuItem::new_with_mnemonic_from_widget = 1
72 	Gtk2::RadioMenuItem::new_with_label_from_widget = 2
73     CODE:
74 	if (label) {
75 		if (ix == 2)
76 			RETVAL = gtk_radio_menu_item_new_with_label_from_widget (group, label);
77 		else
78 			RETVAL = gtk_radio_menu_item_new_with_mnemonic_from_widget (group, label);
79 	} else
80 		RETVAL = gtk_radio_menu_item_new_from_widget (group);
81     OUTPUT:
82 	RETVAL
83 
84 #endif
85 
86 # GSList * gtk_radio_menu_item_get_group (GtkRadioMenuItem *radio_menu_item)
87 =for apidoc
88 Return a reference to an array of C<Gtk2::RadioMenuItem>s, the group members.
89 =cut
90 AV *
91 gtk_radio_menu_item_get_group (radio_menu_item)
92 	GtkRadioMenuItem * radio_menu_item
93     PREINIT:
94 	GSList * group;
95 	GSList * i;
96     CODE:
97 	group = gtk_radio_menu_item_get_group (radio_menu_item);
98 	RETVAL = newAV();
99 	sv_2mortal ((SV*) RETVAL);  /* typemap expects RETVAL mortalized */
100 	for( i = group; i ; i = i->next )
101 	{
102 		av_push(RETVAL, newSVGtkRadioMenuItem(GTK_RADIO_MENU_ITEM(i->data)));
103 	}
104     OUTPUT:
105 	RETVAL
106 
107 void
108 gtk_radio_menu_item_set_group (radio_menu_item, member_or_listref)
109 	GtkRadioMenuItem * radio_menu_item
110 	SV             * member_or_listref
111     PREINIT:
112 	GSList         * group = NULL;
113 	GtkRadioMenuItem * member = NULL;
114     CODE:
115 	if( gperl_sv_is_defined (member_or_listref) )
116 	{
117 		if( gperl_sv_is_array_ref (member_or_listref) )
118 		{
119 			AV * av = (AV*)SvRV(member_or_listref);
120 			SV ** svp = av_fetch(av, 0, 0);
121 			if( svp && gperl_sv_is_defined(*svp) )
122 			{
123 				member = SvGtkRadioMenuItem(*svp);
124 			}
125 		}
126 		else
127 			member = SvGtkRadioMenuItem_ornull(member_or_listref);
128 		if( member )
129 			group = member->group;
130 	}
131 	gtk_radio_menu_item_set_group(radio_menu_item, group);
132 
133