Disabled, because it makes the nightly builds fail quite often and it's already
[AROS-Contrib.git] / mui / gtk-mui / classes / checkbutton.c
blobfba0d76f2a3ebbc88daf7439f316bdff42668ca8
1 /*****************************************************************************
2 *
3 * mui-gtk - a wrapper library to wrap GTK+ calls to MUI
5 * Copyright (C) 2005 Oliver Brunner
6 *
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21 * Contact information:
23 * Oliver Brunner
25 * E-Mail: mui-gtk "at" oliver-brunner.de
27 * $Id$
29 *****************************************************************************/
31 #include <stdlib.h>
32 #include <proto/utility.h>
33 #include <mui.h>
35 #include "debug.h"
36 #include "classes.h"
37 #include "gtk.h"
38 #include "gtk_globals.h"
40 struct Data
42 GtkWidget *widget;
43 Object *box;
44 Object *check;
45 Object *labelobj;
48 /*******************************************
49 * mgtk_check_value_update(GtkWidget *widget)
51 *******************************************/
52 /*internal */
53 static void mgtk_check_value_update0(GtkWidget *widget,struct Data *data, int b) {
55 DebOut("mgtk_check_value_update0(%x,%x,%d)\n",widget,data,b);
57 DebOut(" data->check=%lx\n",data->check);
58 setcheckmark(data->check,b);
59 widget->active=b;
62 /*******************************************
63 * MUIHook_checkbutton
64 *******************************************/
65 HOOKPROTO(MUIHook_check, ULONG, MGTK_HOOK_OBJECT_POINTER obj, MGTK_HOOK_APTR hookpointer)
67 MGTK_USERFUNC_INIT
68 GtkWidget *widget;
70 DebOut("MUIHook_check called\n");
71 widget=mgtk_get_widget_from_obj(obj);
72 DebOut(" widget=%x\n",(int) widget);
74 widget->active=xget(widget->MuiObject,MA_Toggle_Value);
76 DebOut(" emit toggled signal\n");
77 g_signal_emit(widget,g_signal_lookup("toggled",0),0);
79 return 0;
80 MGTK_USERFUNC_EXIT
82 MakeHook(MyMuiHook_check, MUIHook_check);
84 /*******************************************
85 * mNew
87 * requires MA_Widget!
88 *******************************************/
89 static ULONG mNew(struct IClass *cl, APTR obj, Msg msg) {
90 Object *box;
91 Object *check;
92 Object *labelobj;
93 GtkWidget *widget;
94 const char *label;
95 struct TagItem *tstate, *tag;
97 DebOut("mNew (checkbutton)\n");
99 obj = (APTR)DoSuperMethodA(cl, obj, msg);
101 if(!obj) {
102 ErrOut("checkbutton: unable to create object!");
103 return (ULONG) NULL;
105 else
107 GETDATA;
109 DebOut(" new obj=%lx\n",obj);
111 tstate=((struct opSet *)msg)->ops_AttrList;
113 widget=NULL;
114 label=NULL;
115 while ((tag = (struct TagItem *) NextTagItem(&tstate)))
117 switch (tag->ti_Tag)
119 case MA_Widget:
120 widget = (GtkWidget *) tag->ti_Data;
121 break;
122 case MA_Check_Label:
123 label = (const char *) tag->ti_Data;
124 break;
128 if(!widget) {
129 ErrOut("classes/checkbutton.c: mNew: MA_Widget not supplied!\n");
130 CoerceMethod(cl, obj, OM_DISPOSE);
131 return (ULONG) NULL;
134 DebOut(" widget=%d\n",widget);
136 box=(APTR) HGroup,
137 MUIA_CycleChain, 1,
138 End;
140 check=(APTR) MUI_MakeObject(MUIO_Checkmark, label);
142 labelobj=Label1(label);
144 DoMethod(obj,OM_ADDMEMBER,box);
145 DoMethod(box,OM_ADDMEMBER,check);
146 DoMethod(box,OM_ADDMEMBER,labelobj);
147 DoMethod(box,OM_ADDMEMBER,HSpace(0));
149 /* setup internal hooks */
150 DoMethod(check,MUIM_Notify,MUIA_Selected,MUIV_EveryTime, check,2,MUIM_CallHook,&MyMuiHook_check);
152 data->box=box;
153 data->check=check;
154 data->labelobj=labelobj;
155 data->widget=widget;
158 return (ULONG)obj;
161 /*******************************************
162 * mSet
164 * MA_Toggle_Value only usefull TAG here
165 * MA_Check_String_Value *private*
166 *******************************************/
167 static VOID mSet(struct Data *data, APTR obj, struct opSet *msg) {
168 struct TagItem *tstate, *tag;
169 GtkWidget *widget;
171 DebOut("mSet(%lx,%lx,%lx)\n",data,obj,msg);
173 tstate = msg->ops_AttrList;
175 while ((tag = (struct TagItem *) NextTagItem(&tstate)))
177 switch (tag->ti_Tag)
179 case MA_Toggle_Value:
180 DebOut("mSet(%lx) to %d\n",obj,tag->ti_Data);
181 widget=mgtk_get_widget_from_obj(obj);
182 mgtk_check_value_update0(widget,data,(int)tag->ti_Data);
183 break;
188 /*******************************************
189 * mGet
191 * MA_Toggle_Value: value as string
192 * MA_Widget: GtkWidget of this check
193 *******************************************/
194 static ULONG mGet(struct Data *data, APTR obj, struct opGet *msg, struct IClass *cl) {
195 ULONG rc;
197 switch (msg->opg_AttrID) {
198 case MA_Widget :
199 DebOut("mGet: data->widget=%x\n",(int) data->widget);
200 rc = (ULONG) data->widget;
201 break;
202 case MA_Toggle_Value :
203 rc=xget(data->check, MUIA_Selected);
204 DebOut("mGet: MA_Toggle_Value =%d\n", rc);
205 break;
206 default: return DoSuperMethodA(cl, obj, (Msg)msg);
209 *msg->opg_Storage = rc;
210 return TRUE;
213 /*******************************************
214 * Dispatcher
215 *******************************************/
216 BEGINMTABLE
217 GETDATA;
219 switch (msg->MethodID)
221 case OM_NEW : return mNew (cl, obj, msg);
222 case OM_SET : mSet (data, obj, (APTR)msg); break;
223 case OM_GET : return mGet (data, obj, (APTR)msg, cl);
226 ENDMTABLE
228 /*******************************************
229 * Custom class create/delete
230 *******************************************/
231 int mgtk_create_checkbutton_class(void)
233 DebOut("mgtk_create_checkbutton_class()\n");
235 CL_CheckButton = MUI_CreateCustomClass(NULL, MUIC_Group, NULL, sizeof(struct Data), (APTR)&mDispatcher);
237 DebOut("CL_CheckButton=%lx\n",CL_CheckButton);
239 return CL_CheckButton ? 1 : 0;
242 void mgtk_delete_checkbutton_class(void)
244 if (CL_CheckButton)
246 MUI_DeleteCustomClass(CL_CheckButton);