1 /*****************************************************************************
3 * mui-gtk - a wrapper library to wrap GTK+ calls to MUI
5 * Copyright (C) 2005 Oliver Brunner
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:
25 * E-Mail: mui-gtk "at" oliver-brunner.de
29 *****************************************************************************/
32 #include <proto/utility.h>
38 #include "gtk_globals.h"
48 /*******************************************
49 * mgtk_check_value_update(GtkWidget *widget)
51 *******************************************/
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
);
62 /*******************************************
64 *******************************************/
65 HOOKPROTO(MUIHook_check
, ULONG
, MGTK_HOOK_OBJECT_POINTER obj
, MGTK_HOOK_APTR hookpointer
)
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);
82 MakeHook(MyMuiHook_check
, MUIHook_check
);
84 /*******************************************
88 *******************************************/
89 static ULONG
mNew(struct IClass
*cl
, APTR obj
, Msg msg
) {
95 struct TagItem
*tstate
, *tag
;
97 DebOut("mNew (checkbutton)\n");
99 obj
= (APTR
)DoSuperMethodA(cl
, obj
, msg
);
102 ErrOut("checkbutton: unable to create object!");
109 DebOut(" new obj=%lx\n",obj
);
111 tstate
=((struct opSet
*)msg
)->ops_AttrList
;
115 while ((tag
= (struct TagItem
*) NextTagItem(&tstate
)))
120 widget
= (GtkWidget
*) tag
->ti_Data
;
123 label
= (const char *) tag
->ti_Data
;
129 ErrOut("classes/checkbutton.c: mNew: MA_Widget not supplied!\n");
130 CoerceMethod(cl
, obj
, OM_DISPOSE
);
134 DebOut(" widget=%d\n",widget
);
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
);
154 data
->labelobj
=labelobj
;
161 /*******************************************
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
;
171 DebOut("mSet(%lx,%lx,%lx)\n",data
,obj
,msg
);
173 tstate
= msg
->ops_AttrList
;
175 while ((tag
= (struct TagItem
*) NextTagItem(&tstate
)))
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
);
188 /*******************************************
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
) {
197 switch (msg
->opg_AttrID
) {
199 DebOut("mGet: data->widget=%x\n",(int) data
->widget
);
200 rc
= (ULONG
) data
->widget
;
202 case MA_Toggle_Value
:
203 rc
=xget(data
->check
, MUIA_Selected
);
204 DebOut("mGet: MA_Toggle_Value =%d\n", rc
);
206 default: return DoSuperMethodA(cl
, obj
, (Msg
)msg
);
209 *msg
->opg_Storage
= rc
;
213 /*******************************************
215 *******************************************/
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
);
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)
246 MUI_DeleteCustomClass(CL_CheckButton
);