1 /* Copyright (c) 1997-1999 Miller Puckette.
2 * For information on usage and redistribution, and for a DISCLAIMER OF ALL
3 * WARRANTIES, see the file, "LICENSE.txt," in this distribution. */
5 /* g_7_guis.c written by Thomas Musil (c) IEM KUG Graz Austria 2000-2001 */
6 /* thanks to Miller Puckette, Guenther Geiger and Krzystof Czaja */
8 /* name change to hradio by MSP and changed to
9 put out a "float" as in sliders, toggles, etc. */
13 #include "../../pdbox.h"
16 #include "g_all_guis.h"
25 #include "g_all_guis.h"
35 /* ------------- hdl gui-horicontal dial ---------------------- */
37 t_widgetbehavior hradio_widgetbehavior
;
38 static t_class
*hradio_class
, *hradio_old_class
;
40 /* widget helper functions */
42 void hradio_draw_update(t_hradio
*x
, t_glist
*glist
)
48 if(glist_isvisible(glist
))
50 t_canvas
*canvas
=glist_getcanvas(glist
);
52 sys_vgui(".x%x.c itemconfigure %xBUT%d -fill #%6.6x -outline #%6.6x\n",
53 canvas
, x
, x
->x_on_old
,
54 x
->x_gui
.x_bcol
, x
->x_gui
.x_bcol
);
55 sys_vgui(".x%x.c itemconfigure %xBUT%d -fill #%6.6x -outline #%6.6x\n",
57 x
->x_gui
.x_fcol
, x
->x_gui
.x_fcol
);
62 void hradio_draw_new(t_hradio
*x
, t_glist
*glist
)
68 t_canvas
*canvas
=glist_getcanvas(glist
);
69 int n
=x
->x_number
, i
, dx
=x
->x_gui
.x_w
, s4
=dx
/4;
70 int yy11
=text_ypix(&x
->x_gui
.x_obj
, glist
), yy12
=yy11
+dx
;
71 int yy21
=yy11
+s4
, yy22
=yy12
-s4
;
72 int xx11b
=text_xpix(&x
->x_gui
.x_obj
, glist
), xx11
=xx11b
, xx21
=xx11b
+s4
;
77 sys_vgui(".x%x.c create rectangle %d %d %d %d -fill #%6.6x -tags %xBASE%d\n",
78 canvas
, xx11
, yy11
, xx11
+dx
, yy12
,
79 x
->x_gui
.x_bcol
, x
, i
);
80 sys_vgui(".x%x.c create rectangle %d %d %d %d -fill #%6.6x -outline #%6.6x -tags %xBUT%d\n",
81 canvas
, xx21
, yy21
, xx22
, yy22
,
82 (x
->x_on
==i
)?x
->x_gui
.x_fcol
:x
->x_gui
.x_bcol
,
83 (x
->x_on
==i
)?x
->x_gui
.x_fcol
:x
->x_gui
.x_bcol
, x
, i
);
88 sys_vgui(".x%x.c create text %d %d -text {%s} -anchor w \
89 -font {%s %d bold} -fill #%6.6x -tags %xLABEL\n",
90 canvas
, xx11b
+x
->x_gui
.x_ldx
, yy11
+x
->x_gui
.x_ldy
,
91 strcmp(x
->x_gui
.x_lab
->s_name
, "empty")?x
->x_gui
.x_lab
->s_name
:"",
92 x
->x_gui
.x_font
, x
->x_gui
.x_fontsize
,
94 if(!x
->x_gui
.x_fsf
.x_snd_able
)
95 sys_vgui(".x%x.c create rectangle %d %d %d %d -tags %xOUT%d\n",
96 canvas
, xx11b
, yy12
-1, xx11b
+ IOWIDTH
, yy12
, x
, 0);
97 if(!x
->x_gui
.x_fsf
.x_rcv_able
)
98 sys_vgui(".x%x.c create rectangle %d %d %d %d -tags %xIN%d\n",
99 canvas
, xx11b
, yy11
, xx11b
+ IOWIDTH
, yy11
+1, x
, 0);
103 void hradio_draw_move(t_hradio
*x
, t_glist
*glist
)
109 t_canvas
*canvas
=glist_getcanvas(glist
);
110 int n
=x
->x_number
, i
, dx
=x
->x_gui
.x_w
, s4
=dx
/4;
111 int yy11
=text_ypix(&x
->x_gui
.x_obj
, glist
), yy12
=yy11
+dx
;
112 int yy21
=yy11
+s4
, yy22
=yy12
-s4
;
113 int xx11b
=text_xpix(&x
->x_gui
.x_obj
, glist
), xx11
=xx11b
, xx21
=xx11b
+s4
;
114 int xx22
=xx11b
+dx
-s4
;
121 sys_vgui(".x%x.c coords %xBASE%d %d %d %d %d\n",
122 canvas
, x
, i
, xx11
, yy11
, xx11
+dx
, yy12
);
123 sys_vgui(".x%x.c coords %xBUT%d %d %d %d %d\n",
124 canvas
, x
, i
, xx21
, yy21
, xx22
, yy22
);
129 sys_vgui(".x%x.c coords %xLABEL %d %d\n",
130 canvas
, x
, xx11b
+x
->x_gui
.x_ldx
, yy11
+x
->x_gui
.x_ldy
);
131 if(!x
->x_gui
.x_fsf
.x_snd_able
)
132 sys_vgui(".x%x.c coords %xOUT%d %d %d %d %d\n",
133 canvas
, x
, 0, xx11b
, yy12
-1, xx11b
+ IOWIDTH
, yy12
);
134 if(!x
->x_gui
.x_fsf
.x_rcv_able
)
135 sys_vgui(".x%x.c coords %xIN%d %d %d %d %d\n",
136 canvas
, x
, 0, xx11b
, yy11
, xx11b
+ IOWIDTH
, yy11
+1);
140 void hradio_draw_erase(t_hradio
* x
, t_glist
* glist
)
146 t_canvas
*canvas
=glist_getcanvas(glist
);
147 int n
=x
->x_number
, i
;
151 sys_vgui(".x%x.c delete %xBASE%d\n", canvas
, x
, i
);
152 sys_vgui(".x%x.c delete %xBUT%d\n", canvas
, x
, i
);
154 sys_vgui(".x%x.c delete %xLABEL\n", canvas
, x
);
155 if(!x
->x_gui
.x_fsf
.x_snd_able
)
156 sys_vgui(".x%x.c delete %xOUT%d\n", canvas
, x
, 0);
157 if(!x
->x_gui
.x_fsf
.x_rcv_able
)
158 sys_vgui(".x%x.c delete %xIN%d\n", canvas
, x
, 0);
162 void hradio_draw_config(t_hradio
* x
, t_glist
* glist
)
168 t_canvas
*canvas
=glist_getcanvas(glist
);
169 int n
=x
->x_number
, i
;
171 sys_vgui(".x%x.c itemconfigure %xLABEL -font {%s %d bold} -fill #%6.6x -text {%s} \n",
172 canvas
, x
, x
->x_gui
.x_font
, x
->x_gui
.x_fontsize
,
173 x
->x_gui
.x_fsf
.x_selected
?IEM_GUI_COLOR_SELECTED
:x
->x_gui
.x_lcol
,
174 strcmp(x
->x_gui
.x_lab
->s_name
, "empty")?x
->x_gui
.x_lab
->s_name
:"");
177 sys_vgui(".x%x.c itemconfigure %xBASE%d -fill #%6.6x\n", canvas
, x
, i
,
179 sys_vgui(".x%x.c itemconfigure %xBUT%d -fill #%6.6x -outline #%6.6x\n", canvas
, x
, i
,
180 (x
->x_on
==i
)?x
->x_gui
.x_fcol
:x
->x_gui
.x_bcol
,
181 (x
->x_on
==i
)?x
->x_gui
.x_fcol
:x
->x_gui
.x_bcol
);
186 void hradio_draw_io(t_hradio
* x
, t_glist
* glist
, int old_snd_rcv_flags
)
191 (void) old_snd_rcv_flags
;
193 t_canvas
*canvas
=glist_getcanvas(glist
);
194 int xpos
=text_xpix(&x
->x_gui
.x_obj
, glist
);
195 int ypos
=text_ypix(&x
->x_gui
.x_obj
, glist
);
197 if((old_snd_rcv_flags
& IEM_GUI_OLD_SND_FLAG
) && !x
->x_gui
.x_fsf
.x_snd_able
)
198 sys_vgui(".x%x.c create rectangle %d %d %d %d -tags %xOUT%d\n",
200 xpos
, ypos
+ x
->x_gui
.x_w
-1,
201 xpos
+ IOWIDTH
, ypos
+ x
->x_gui
.x_w
,
203 if(!(old_snd_rcv_flags
& IEM_GUI_OLD_SND_FLAG
) && x
->x_gui
.x_fsf
.x_snd_able
)
204 sys_vgui(".x%x.c delete %xOUT%d\n", canvas
, x
, 0);
205 if((old_snd_rcv_flags
& IEM_GUI_OLD_RCV_FLAG
) && !x
->x_gui
.x_fsf
.x_rcv_able
)
206 sys_vgui(".x%x.c create rectangle %d %d %d %d -tags %xIN%d\n",
209 xpos
+ IOWIDTH
, ypos
+1, x
, 0);
210 if(!(old_snd_rcv_flags
& IEM_GUI_OLD_RCV_FLAG
) && x
->x_gui
.x_fsf
.x_rcv_able
)
211 sys_vgui(".x%x.c delete %xIN%d\n", canvas
, x
, 0);
215 void hradio_draw_select(t_hradio
* x
, t_glist
* glist
)
221 t_canvas
*canvas
=glist_getcanvas(glist
);
222 int n
=x
->x_number
, i
;
224 if(x
->x_gui
.x_fsf
.x_selected
)
228 sys_vgui(".x%x.c itemconfigure %xBASE%d -outline #%6.6x\n", canvas
, x
, i
,
229 IEM_GUI_COLOR_SELECTED
);
231 sys_vgui(".x%x.c itemconfigure %xLABEL -fill #%6.6x\n", canvas
, x
, IEM_GUI_COLOR_SELECTED
);
237 sys_vgui(".x%x.c itemconfigure %xBASE%d -outline #%6.6x\n", canvas
, x
, i
,
238 IEM_GUI_COLOR_NORMAL
);
240 sys_vgui(".x%x.c itemconfigure %xLABEL -fill #%6.6x\n", canvas
, x
,
246 void hradio_draw(t_hradio
*x
, t_glist
*glist
, int mode
)
248 if(mode
== IEM_GUI_DRAW_MODE_UPDATE
)
249 hradio_draw_update(x
, glist
);
250 else if(mode
== IEM_GUI_DRAW_MODE_MOVE
)
251 hradio_draw_move(x
, glist
);
252 else if(mode
== IEM_GUI_DRAW_MODE_NEW
)
253 hradio_draw_new(x
, glist
);
254 else if(mode
== IEM_GUI_DRAW_MODE_SELECT
)
255 hradio_draw_select(x
, glist
);
256 else if(mode
== IEM_GUI_DRAW_MODE_ERASE
)
257 hradio_draw_erase(x
, glist
);
258 else if(mode
== IEM_GUI_DRAW_MODE_CONFIG
)
259 hradio_draw_config(x
, glist
);
260 else if(mode
>= IEM_GUI_DRAW_MODE_IO
)
261 hradio_draw_io(x
, glist
, mode
- IEM_GUI_DRAW_MODE_IO
);
264 /* ------------------------ hdl widgetbehaviour----------------------------- */
266 static void hradio_getrect(t_gobj
*z
, t_glist
*glist
, int *xp1
, int *yp1
, int *xp2
, int *yp2
)
268 t_hradio
*x
= (t_hradio
*)z
;
270 *xp1
= text_xpix(&x
->x_gui
.x_obj
, glist
);
271 *yp1
= text_ypix(&x
->x_gui
.x_obj
, glist
);
272 *xp2
= *xp1
+ x
->x_gui
.x_w
*x
->x_number
;
273 *yp2
= *yp1
+ x
->x_gui
.x_h
;
276 static void hradio_save(t_gobj
*z
, t_binbuf
*b
)
278 t_hradio
*x
= (t_hradio
*)z
;
282 iemgui_save(&x
->x_gui
, srl
, bflcol
);
283 binbuf_addv(b
, "ssiisiiiisssiiiiiiii", gensym("#X"),gensym("obj"),
284 (t_int
)text_xpix(&x
->x_gui
.x_obj
, x
->x_gui
.x_glist
),
285 (t_int
)text_ypix(&x
->x_gui
.x_obj
, x
->x_gui
.x_glist
),
286 (pd_class(&x
->x_gui
.x_obj
.ob_pd
) == hradio_old_class
?
287 gensym("hdl") : gensym("hradio")),
289 x
->x_change
, iem_symargstoint(&x
->x_gui
.x_isa
), x
->x_number
,
290 srl
[0], srl
[1], srl
[2],
291 x
->x_gui
.x_ldx
, x
->x_gui
.x_ldy
,
292 iem_fstyletoint(&x
->x_gui
.x_fsf
), x
->x_gui
.x_fontsize
,
293 bflcol
[0], bflcol
[1], bflcol
[2], x
->x_on
);
297 static void hradio_properties(t_gobj
*z
, t_glist
*owner
)
303 t_hradio
*x
= (t_hradio
*)z
;
308 iemgui_properties(&x
->x_gui
, srl
);
309 if (pd_class(&x
->x_gui
.x_obj
.ob_pd
) == hradio_old_class
)
310 hchange
= x
->x_change
;
311 sprintf(buf
, "pdtk_iemgui_dialog %%s hradio \
312 ----------dimensions(pix):----------- %d %d size: 0 0 empty \
313 empty 0.0 empty 0.0 empty %d \
314 %d new-only new&old %d %d number: %d \
319 x
->x_gui
.x_w
, IEM_GUI_MINSIZE
,
321 hchange
, x
->x_gui
.x_isa
.x_loadinit
, -1, x
->x_number
,
322 srl
[0]->s_name
, srl
[1]->s_name
,
323 srl
[2]->s_name
, x
->x_gui
.x_ldx
, x
->x_gui
.x_ldy
,
324 x
->x_gui
.x_fsf
.x_font_style
, x
->x_gui
.x_fontsize
,
325 0xffffff & x
->x_gui
.x_bcol
, 0xffffff & x
->x_gui
.x_fcol
, 0xffffff & x
->x_gui
.x_lcol
);
326 gfxstub_new(&x
->x_gui
.x_obj
.ob_pd
, x
, buf
);
330 static void hradio_dialog(t_hradio
*x
, t_symbol
*s
, int argc
, t_atom
*argv
)
333 int a
= (int)atom_getintarg(0, argc
, argv
);
334 int chg
= (int)atom_getintarg(4, argc
, argv
);
335 int num
= (int)atom_getintarg(6, argc
, argv
);
342 if(chg
!= 0) chg
= 1;
344 sr_flags
= iemgui_dialog(&x
->x_gui
, srl
, argc
, argv
);
345 x
->x_gui
.x_w
= iemgui_clip_size(a
);
346 x
->x_gui
.x_h
= x
->x_gui
.x_w
;
347 if(x
->x_number
!= num
)
349 (*x
->x_gui
.x_draw
)(x
, x
->x_gui
.x_glist
, IEM_GUI_DRAW_MODE_ERASE
);
351 if(x
->x_on
>= x
->x_number
)
353 x
->x_on
= x
->x_number
- 1;
354 x
->x_on_old
= x
->x_on
;
356 (*x
->x_gui
.x_draw
)(x
, x
->x_gui
.x_glist
, IEM_GUI_DRAW_MODE_NEW
);
360 (*x
->x_gui
.x_draw
)(x
, x
->x_gui
.x_glist
, IEM_GUI_DRAW_MODE_CONFIG
);
361 (*x
->x_gui
.x_draw
)(x
, x
->x_gui
.x_glist
, IEM_GUI_DRAW_MODE_IO
+ sr_flags
);
362 (*x
->x_gui
.x_draw
)(x
, x
->x_gui
.x_glist
, IEM_GUI_DRAW_MODE_MOVE
);
363 canvas_fixlinesfor(glist_getcanvas(x
->x_gui
.x_glist
), (t_text
*)x
);
368 static void hradio_set(t_hradio
*x
, t_floatarg f
)
377 if(x
->x_on
!= x
->x_on_old
)
380 x
->x_on_old
= x
->x_on
;
382 (*x
->x_gui
.x_draw
)(x
, x
->x_gui
.x_glist
, IEM_GUI_DRAW_MODE_UPDATE
);
388 (*x
->x_gui
.x_draw
)(x
, x
->x_gui
.x_glist
, IEM_GUI_DRAW_MODE_UPDATE
);
392 static void hradio_bang(t_hradio
*x
)
394 /* compatibility with earlier "hdial" behavior */
395 if (pd_class(&x
->x_gui
.x_obj
.ob_pd
) == hradio_old_class
)
397 if((x
->x_change
)&&(x
->x_on
!= x
->x_on_old
))
399 SETFLOAT(x
->x_at
, (float)x
->x_on_old
);
400 SETFLOAT(x
->x_at
+1, 0.0);
401 outlet_list(x
->x_gui
.x_obj
.ob_outlet
, &s_list
, 2, x
->x_at
);
402 if(x
->x_gui
.x_fsf
.x_snd_able
&& x
->x_gui
.x_snd
->s_thing
)
403 pd_list(x
->x_gui
.x_snd
->s_thing
, &s_list
, 2, x
->x_at
);
405 x
->x_on_old
= x
->x_on
;
406 SETFLOAT(x
->x_at
, (float)x
->x_on
);
407 SETFLOAT(x
->x_at
+1, 1.0);
408 outlet_list(x
->x_gui
.x_obj
.ob_outlet
, &s_list
, 2, x
->x_at
);
409 if(x
->x_gui
.x_fsf
.x_snd_able
&& x
->x_gui
.x_snd
->s_thing
)
410 pd_list(x
->x_gui
.x_snd
->s_thing
, &s_list
, 2, x
->x_at
);
414 outlet_float(x
->x_gui
.x_obj
.ob_outlet
, x
->x_on
);
415 if(x
->x_gui
.x_fsf
.x_snd_able
&& x
->x_gui
.x_snd
->s_thing
)
416 pd_float(x
->x_gui
.x_snd
->s_thing
, x
->x_on
);
420 static void hradio_fout(t_hradio
*x
, t_floatarg f
)
429 if (pd_class(&x
->x_gui
.x_obj
.ob_pd
) == hradio_old_class
)
431 if((x
->x_change
)&&(i
!= x
->x_on_old
))
433 SETFLOAT(x
->x_at
, (float)x
->x_on_old
);
434 SETFLOAT(x
->x_at
+1, 0.0);
435 outlet_list(x
->x_gui
.x_obj
.ob_outlet
, &s_list
, 2, x
->x_at
);
436 if(x
->x_gui
.x_fsf
.x_snd_able
&& x
->x_gui
.x_snd
->s_thing
)
437 pd_list(x
->x_gui
.x_snd
->s_thing
, &s_list
, 2, x
->x_at
);
439 if(x
->x_on
!= x
->x_on_old
)
440 x
->x_on_old
= x
->x_on
;
442 (*x
->x_gui
.x_draw
)(x
, x
->x_gui
.x_glist
, IEM_GUI_DRAW_MODE_UPDATE
);
443 x
->x_on_old
= x
->x_on
;
444 SETFLOAT(x
->x_at
, (float)x
->x_on
);
445 SETFLOAT(x
->x_at
+1, 1.0);
446 outlet_list(x
->x_gui
.x_obj
.ob_outlet
, &s_list
, 2, x
->x_at
);
447 if(x
->x_gui
.x_fsf
.x_snd_able
&& x
->x_gui
.x_snd
->s_thing
)
448 pd_list(x
->x_gui
.x_snd
->s_thing
, &s_list
, 2, x
->x_at
);
452 x
->x_on_old
= x
->x_on
;
454 (*x
->x_gui
.x_draw
)(x
, x
->x_gui
.x_glist
, IEM_GUI_DRAW_MODE_UPDATE
);
455 outlet_float(x
->x_gui
.x_obj
.ob_outlet
, x
->x_on
);
456 if(x
->x_gui
.x_fsf
.x_snd_able
&& x
->x_gui
.x_snd
->s_thing
)
457 pd_float(x
->x_gui
.x_snd
->s_thing
, x
->x_on
);
461 static void hradio_float(t_hradio
*x
, t_floatarg f
)
470 if (pd_class(&x
->x_gui
.x_obj
.ob_pd
) == hradio_old_class
)
472 /* compatibility with earlier "vdial" behavior */
473 if((x
->x_change
)&&(i
!= x
->x_on_old
))
475 if(x
->x_gui
.x_fsf
.x_put_in2out
)
477 SETFLOAT(x
->x_at
, (float)x
->x_on_old
);
478 SETFLOAT(x
->x_at
+1, 0.0);
479 outlet_list(x
->x_gui
.x_obj
.ob_outlet
, &s_list
, 2, x
->x_at
);
480 if(x
->x_gui
.x_fsf
.x_snd_able
&& x
->x_gui
.x_snd
->s_thing
)
481 pd_list(x
->x_gui
.x_snd
->s_thing
, &s_list
, 2, x
->x_at
);
484 if(x
->x_on
!= x
->x_on_old
)
485 x
->x_on_old
= x
->x_on
;
487 (*x
->x_gui
.x_draw
)(x
, x
->x_gui
.x_glist
, IEM_GUI_DRAW_MODE_UPDATE
);
488 x
->x_on_old
= x
->x_on
;
489 if(x
->x_gui
.x_fsf
.x_put_in2out
)
491 SETFLOAT(x
->x_at
, (float)x
->x_on
);
492 SETFLOAT(x
->x_at
+1, 1.0);
493 outlet_list(x
->x_gui
.x_obj
.ob_outlet
, &s_list
, 2, x
->x_at
);
494 if(x
->x_gui
.x_fsf
.x_snd_able
&& x
->x_gui
.x_snd
->s_thing
)
495 pd_list(x
->x_gui
.x_snd
->s_thing
, &s_list
, 2, x
->x_at
);
500 x
->x_on_old
= x
->x_on
;
502 (*x
->x_gui
.x_draw
)(x
, x
->x_gui
.x_glist
, IEM_GUI_DRAW_MODE_UPDATE
);
503 if (x
->x_gui
.x_fsf
.x_put_in2out
)
505 outlet_float(x
->x_gui
.x_obj
.ob_outlet
, x
->x_on
);
506 if(x
->x_gui
.x_fsf
.x_snd_able
&& x
->x_gui
.x_snd
->s_thing
)
507 pd_float(x
->x_gui
.x_snd
->s_thing
, x
->x_on
);
512 static void hradio_click(t_hradio
*x
, t_floatarg xpos
, t_floatarg ypos
, t_floatarg shift
, t_floatarg ctrl
, t_floatarg alt
)
514 int xx
= (int)xpos
- (int)text_xpix(&x
->x_gui
.x_obj
, x
->x_gui
.x_glist
);
523 hradio_fout(x
, (float)(xx
/ x
->x_gui
.x_w
));
526 static int hradio_newclick(t_gobj
*z
, struct _glist
*glist
, int xpix
, int ypix
, int shift
, int alt
, int dbl
, int doit
)
533 hradio_click((t_hradio
*)z
, (t_floatarg
)xpix
, (t_floatarg
)ypix
, (t_floatarg
)shift
, 0, (t_floatarg
)alt
);
537 static void hradio_loadbang(t_hradio
*x
)
539 if(!sys_noloadbang
&& x
->x_gui
.x_isa
.x_loadinit
)
543 static void hradio_number(t_hradio
*x
, t_floatarg num
)
549 if(n
> IEM_RADIO_MAX
)
553 (*x
->x_gui
.x_draw
)(x
, x
->x_gui
.x_glist
, IEM_GUI_DRAW_MODE_ERASE
);
555 if(x
->x_on
>= x
->x_number
)
556 x
->x_on
= x
->x_number
- 1;
557 x
->x_on_old
= x
->x_on
;
558 (*x
->x_gui
.x_draw
)(x
, x
->x_gui
.x_glist
, IEM_GUI_DRAW_MODE_NEW
);
562 static void hradio_size(t_hradio
*x
, t_symbol
*s
, int ac
, t_atom
*av
)
567 x
->x_gui
.x_w
= iemgui_clip_size((int)atom_getintarg(0, ac
, av
));
568 x
->x_gui
.x_h
= x
->x_gui
.x_w
;
569 iemgui_size((void *)x
, &x
->x_gui
);
572 static void hradio_delta(t_hradio
*x
, t_symbol
*s
, int ac
, t_atom
*av
)
573 {iemgui_delta((void *)x
, &x
->x_gui
, s
, ac
, av
);}
575 static void hradio_pos(t_hradio
*x
, t_symbol
*s
, int ac
, t_atom
*av
)
576 {iemgui_pos((void *)x
, &x
->x_gui
, s
, ac
, av
);}
578 static void hradio_color(t_hradio
*x
, t_symbol
*s
, int ac
, t_atom
*av
)
579 {iemgui_color((void *)x
, &x
->x_gui
, s
, ac
, av
);}
581 static void hradio_send(t_hradio
*x
, t_symbol
*s
)
582 {iemgui_send(x
, &x
->x_gui
, s
);}
584 static void hradio_receive(t_hradio
*x
, t_symbol
*s
)
585 {iemgui_receive(x
, &x
->x_gui
, s
);}
587 static void hradio_label(t_hradio
*x
, t_symbol
*s
)
588 {iemgui_label((void *)x
, &x
->x_gui
, s
);}
590 static void hradio_label_pos(t_hradio
*x
, t_symbol
*s
, int ac
, t_atom
*av
)
591 {iemgui_label_pos((void *)x
, &x
->x_gui
, s
, ac
, av
);}
593 static void hradio_label_font(t_hradio
*x
, t_symbol
*s
, int ac
, t_atom
*av
)
594 {iemgui_label_font((void *)x
, &x
->x_gui
, s
, ac
, av
);}
596 static void hradio_init(t_hradio
*x
, t_floatarg f
)
598 x
->x_gui
.x_isa
.x_loadinit
= (f
==0.0)?0:1;
601 static void hradio_double_change(t_hradio
*x
)
604 static void hradio_single_change(t_hradio
*x
)
607 static void *hradio_donew(t_symbol
*s
, int argc
, t_atom
*argv
, int old
)
609 t_hradio
*x
= (t_hradio
*)pd_new(old
? hradio_old_class
: hradio_class
);
610 int bflcol
[]={-262144, -1, -1};
612 int a
=IEM_GUI_DEFAULTSIZE
, on
=0;
614 int a
=IEM_GUI_DEFAULTSIZE
, on
=0, f
=0;
616 int ldx
=0, ldy
=-6, chg
=1, num
=8;
619 int ftbreak
=IEM_BNG_DEFAULTBREAKFLASHTIME
, fthold
=IEM_BNG_DEFAULTHOLDFLASHTIME
;
627 iem_inttosymargs(&x
->x_gui
.x_isa
, 0);
628 iem_inttofstyle(&x
->x_gui
.x_fsf
, 0);
630 if((argc
== 15)&&IS_A_FLOAT(argv
,0)&&IS_A_FLOAT(argv
,1)&&IS_A_FLOAT(argv
,2)
632 &&(IS_A_SYMBOL(argv
,4)||IS_A_FLOAT(argv
,4))
633 &&(IS_A_SYMBOL(argv
,5)||IS_A_FLOAT(argv
,5))
634 &&(IS_A_SYMBOL(argv
,6)||IS_A_FLOAT(argv
,6))
635 &&IS_A_FLOAT(argv
,7)&&IS_A_FLOAT(argv
,8)
636 &&IS_A_FLOAT(argv
,9)&&IS_A_FLOAT(argv
,10)&&IS_A_FLOAT(argv
,11)
637 &&IS_A_FLOAT(argv
,12)&&IS_A_FLOAT(argv
,13)&&IS_A_FLOAT(argv
,14))
639 a
= (int)atom_getintarg(0, argc
, argv
);
640 chg
= (int)atom_getintarg(1, argc
, argv
);
641 iem_inttosymargs(&x
->x_gui
.x_isa
, atom_getintarg(2, argc
, argv
));
642 num
= (int)atom_getintarg(3, argc
, argv
);
643 iemgui_new_getnames(&x
->x_gui
, 4, argv
);
644 ldx
= (int)atom_getintarg(7, argc
, argv
);
645 ldy
= (int)atom_getintarg(8, argc
, argv
);
646 iem_inttofstyle(&x
->x_gui
.x_fsf
, atom_getintarg(9, argc
, argv
));
647 fs
= (int)atom_getintarg(10, argc
, argv
);
648 bflcol
[0] = (int)atom_getintarg(11, argc
, argv
);
649 bflcol
[1] = (int)atom_getintarg(12, argc
, argv
);
650 bflcol
[2] = (int)atom_getintarg(13, argc
, argv
);
651 on
= (int)atom_getintarg(14, argc
, argv
);
653 else iemgui_new_getnames(&x
->x_gui
, 4, 0);
654 x
->x_gui
.x_draw
= (t_iemfunptr
)hradio_draw
;
655 x
->x_gui
.x_fsf
.x_snd_able
= 1;
656 x
->x_gui
.x_fsf
.x_rcv_able
= 1;
657 x
->x_gui
.x_glist
= (t_glist
*)canvas_getcurrent();
658 if (!strcmp(x
->x_gui
.x_snd
->s_name
, "empty"))
659 x
->x_gui
.x_fsf
.x_snd_able
= 0;
660 if (!strcmp(x
->x_gui
.x_rcv
->s_name
, "empty"))
661 x
->x_gui
.x_fsf
.x_rcv_able
= 0;
662 if(x
->x_gui
.x_fsf
.x_font_style
== 1) strcpy(x
->x_gui
.x_font
, "helvetica");
663 else if(x
->x_gui
.x_fsf
.x_font_style
== 2) strcpy(x
->x_gui
.x_font
, "times");
664 else { x
->x_gui
.x_fsf
.x_font_style
= 0;
665 strcpy(x
->x_gui
.x_font
, "courier"); }
668 if(num
> IEM_RADIO_MAX
)
673 if(on
>= x
->x_number
)
674 on
= x
->x_number
- 1;
675 if(x
->x_gui
.x_isa
.x_loadinit
)
679 x
->x_on_old
= x
->x_on
;
680 x
->x_change
= (chg
==0)?0:1;
681 if (x
->x_gui
.x_fsf
.x_rcv_able
)
682 pd_bind(&x
->x_gui
.x_obj
.ob_pd
, x
->x_gui
.x_rcv
);
683 x
->x_gui
.x_ldx
= ldx
;
684 x
->x_gui
.x_ldy
= ldy
;
687 x
->x_gui
.x_fontsize
= fs
;
688 x
->x_gui
.x_w
= iemgui_clip_size(a
);
689 x
->x_gui
.x_h
= x
->x_gui
.x_w
;
690 iemgui_verify_snd_ne_rcv(&x
->x_gui
);
691 iemgui_all_colfromload(&x
->x_gui
, bflcol
);
692 outlet_new(&x
->x_gui
.x_obj
, &s_list
);
696 static void *hradio_new(t_symbol
*s
, int argc
, t_atom
*argv
)
698 return (hradio_donew(s
, argc
, argv
, 0));
701 static void *hdial_new(t_symbol
*s
, int argc
, t_atom
*argv
)
703 return (hradio_donew(s
, argc
, argv
, 1));
706 static void hradio_ff(t_hradio
*x
)
708 if(x
->x_gui
.x_fsf
.x_rcv_able
)
709 pd_unbind(&x
->x_gui
.x_obj
.ob_pd
, x
->x_gui
.x_rcv
);
711 gfxstub_deleteforkey(x
);
715 void g_hradio_setup(void)
717 hradio_class
= class_new(gensym("hradio"), (t_newmethod
)hradio_new
,
718 (t_method
)hradio_ff
, sizeof(t_hradio
), 0, A_GIMME
, 0);
719 class_addbang(hradio_class
, hradio_bang
);
720 class_addfloat(hradio_class
, hradio_float
);
721 class_addmethod(hradio_class
, (t_method
)hradio_click
, gensym("click"),
722 A_FLOAT
, A_FLOAT
, A_FLOAT
, A_FLOAT
, A_FLOAT
, 0);
723 class_addmethod(hradio_class
, (t_method
)hradio_dialog
, gensym("dialog"),
725 class_addmethod(hradio_class
, (t_method
)hradio_loadbang
,
726 gensym("loadbang"), 0);
727 class_addmethod(hradio_class
, (t_method
)hradio_set
,
728 gensym("set"), A_FLOAT
, 0);
729 class_addmethod(hradio_class
, (t_method
)hradio_size
,
730 gensym("size"), A_GIMME
, 0);
731 class_addmethod(hradio_class
, (t_method
)hradio_delta
,
732 gensym("delta"), A_GIMME
, 0);
733 class_addmethod(hradio_class
, (t_method
)hradio_pos
,
734 gensym("pos"), A_GIMME
, 0);
735 class_addmethod(hradio_class
, (t_method
)hradio_color
,
736 gensym("color"), A_GIMME
, 0);
737 class_addmethod(hradio_class
, (t_method
)hradio_send
,
738 gensym("send"), A_DEFSYM
, 0);
739 class_addmethod(hradio_class
, (t_method
)hradio_receive
,
740 gensym("receive"), A_DEFSYM
, 0);
741 class_addmethod(hradio_class
, (t_method
)hradio_label
,
742 gensym("label"), A_DEFSYM
, 0);
743 class_addmethod(hradio_class
, (t_method
)hradio_label_pos
,
744 gensym("label_pos"), A_GIMME
, 0);
745 class_addmethod(hradio_class
, (t_method
)hradio_label_font
,
746 gensym("label_font"), A_GIMME
, 0);
747 class_addmethod(hradio_class
, (t_method
)hradio_init
,
748 gensym("init"), A_FLOAT
, 0);
749 class_addmethod(hradio_class
, (t_method
)hradio_number
,
750 gensym("number"), A_FLOAT
, 0);
751 class_addmethod(hradio_class
, (t_method
)hradio_single_change
,
752 gensym("single_change"), 0);
753 class_addmethod(hradio_class
, (t_method
)hradio_double_change
,
754 gensym("double_change"), 0);
755 hradio_widgetbehavior
.w_getrectfn
= hradio_getrect
;
756 hradio_widgetbehavior
.w_displacefn
= iemgui_displace
;
757 hradio_widgetbehavior
.w_selectfn
= iemgui_select
;
758 hradio_widgetbehavior
.w_activatefn
= NULL
;
759 hradio_widgetbehavior
.w_deletefn
= iemgui_delete
;
760 hradio_widgetbehavior
.w_visfn
= iemgui_vis
;
761 hradio_widgetbehavior
.w_clickfn
= hradio_newclick
;
762 class_setwidget(hradio_class
, &hradio_widgetbehavior
);
763 class_sethelpsymbol(hradio_class
, gensym("hradio"));
764 class_setsavefn(hradio_class
, hradio_save
);
765 class_setpropertiesfn(hradio_class
, hradio_properties
);
767 /*obsolete version (0.34-0.35) */
768 hradio_old_class
= class_new(gensym("hdl"), (t_newmethod
)hdial_new
,
769 (t_method
)hradio_ff
, sizeof(t_hradio
), 0, A_GIMME
, 0);
770 class_addcreator((t_newmethod
)hradio_new
, gensym("rdb"), A_GIMME
, 0);
771 class_addcreator((t_newmethod
)hradio_new
, gensym("radiobut"), A_GIMME
, 0);
772 class_addcreator((t_newmethod
)hradio_new
, gensym("radiobutton"),
774 class_addbang(hradio_old_class
, hradio_bang
);
775 class_addfloat(hradio_old_class
, hradio_float
);
776 class_addmethod(hradio_old_class
, (t_method
)hradio_click
, gensym("click"),
777 A_FLOAT
, A_FLOAT
, A_FLOAT
, A_FLOAT
, A_FLOAT
, 0);
778 class_addmethod(hradio_old_class
, (t_method
)hradio_dialog
, gensym("dialog"),
780 class_addmethod(hradio_old_class
, (t_method
)hradio_loadbang
,
781 gensym("loadbang"), 0);
782 class_addmethod(hradio_old_class
, (t_method
)hradio_set
,
783 gensym("set"), A_FLOAT
, 0);
784 class_addmethod(hradio_old_class
, (t_method
)hradio_size
,
785 gensym("size"), A_GIMME
, 0);
786 class_addmethod(hradio_old_class
, (t_method
)hradio_delta
,
787 gensym("delta"), A_GIMME
, 0);
788 class_addmethod(hradio_old_class
, (t_method
)hradio_pos
,
789 gensym("pos"), A_GIMME
, 0);
790 class_addmethod(hradio_old_class
, (t_method
)hradio_color
,
791 gensym("color"), A_GIMME
, 0);
792 class_addmethod(hradio_old_class
, (t_method
)hradio_send
,
793 gensym("send"), A_DEFSYM
, 0);
794 class_addmethod(hradio_old_class
, (t_method
)hradio_receive
,
795 gensym("receive"), A_DEFSYM
, 0);
796 class_addmethod(hradio_old_class
, (t_method
)hradio_label
,
797 gensym("label"), A_DEFSYM
, 0);
798 class_addmethod(hradio_old_class
, (t_method
)hradio_label_pos
,
799 gensym("label_pos"), A_GIMME
, 0);
800 class_addmethod(hradio_old_class
, (t_method
)hradio_label_font
,
801 gensym("label_font"), A_GIMME
, 0);
802 class_addmethod(hradio_old_class
, (t_method
)hradio_init
,
803 gensym("init"), A_FLOAT
, 0);
804 class_addmethod(hradio_old_class
, (t_method
)hradio_number
,
805 gensym("number"), A_FLOAT
, 0);
806 class_addmethod(hradio_old_class
, (t_method
)hradio_single_change
,
807 gensym("single_change"), 0);
808 class_addmethod(hradio_old_class
, (t_method
)hradio_double_change
,
809 gensym("double_change"), 0);
810 class_setwidget(hradio_old_class
, &hradio_widgetbehavior
);
811 class_sethelpsymbol(hradio_old_class
, gensym("hradio"));