diff options
Diffstat (limited to 'apps/plugins/pdbox/PDa/src/g_hdial.c')
-rw-r--r-- | apps/plugins/pdbox/PDa/src/g_hdial.c | 1470 |
1 files changed, 1470 insertions, 0 deletions
diff --git a/apps/plugins/pdbox/PDa/src/g_hdial.c b/apps/plugins/pdbox/PDa/src/g_hdial.c new file mode 100644 index 0000000000..447e984244 --- /dev/null +++ b/apps/plugins/pdbox/PDa/src/g_hdial.c | |||
@@ -0,0 +1,1470 @@ | |||
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. */ | ||
4 | |||
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 */ | ||
7 | |||
8 | /* name change to hradio by MSP and changed to | ||
9 | put out a "float" as in sliders, toggles, etc. */ | ||
10 | |||
11 | #include <stdlib.h> | ||
12 | #include <string.h> | ||
13 | #include <stdio.h> | ||
14 | #include <ctype.h> | ||
15 | #include "m_pd.h" | ||
16 | #include "g_canvas.h" | ||
17 | #include "t_tk.h" | ||
18 | #include "g_all_guis.h" | ||
19 | #include <math.h> | ||
20 | |||
21 | #ifdef MSW | ||
22 | #include <io.h> | ||
23 | #else | ||
24 | #include <unistd.h> | ||
25 | #endif | ||
26 | |||
27 | /* ------------- hdl gui-horicontal dial ---------------------- */ | ||
28 | |||
29 | t_widgetbehavior hradio_widgetbehavior; | ||
30 | static t_class *hradio_class, *hradio_old_class; | ||
31 | |||
32 | /* widget helper functions */ | ||
33 | |||
34 | void hradio_draw_update(t_hradio *x, t_glist *glist) | ||
35 | { | ||
36 | if(glist_isvisible(glist)) | ||
37 | { | ||
38 | t_canvas *canvas=glist_getcanvas(glist); | ||
39 | |||
40 | sys_vgui(".x%x.c itemconfigure %xBUT%d -fill #%6.6x -outline #%6.6x\n", | ||
41 | canvas, x, x->x_on_old, | ||
42 | x->x_gui.x_bcol, x->x_gui.x_bcol); | ||
43 | sys_vgui(".x%x.c itemconfigure %xBUT%d -fill #%6.6x -outline #%6.6x\n", | ||
44 | canvas, x, x->x_on, | ||
45 | x->x_gui.x_fcol, x->x_gui.x_fcol); | ||
46 | } | ||
47 | } | ||
48 | |||
49 | void hradio_draw_new(t_hradio *x, t_glist *glist) | ||
50 | { | ||
51 | t_canvas *canvas=glist_getcanvas(glist); | ||
52 | int n=x->x_number, i, dx=x->x_gui.x_w, s4=dx/4; | ||
53 | int yy11=text_ypix(&x->x_gui.x_obj, glist), yy12=yy11+dx; | ||
54 | int yy21=yy11+s4, yy22=yy12-s4; | ||
55 | int xx11b=text_xpix(&x->x_gui.x_obj, glist), xx11=xx11b, xx21=xx11b+s4; | ||
56 | int xx22=xx11b+dx-s4; | ||
57 | |||
58 | |||
59 | for(i=0; i<n; i++) | ||
60 | { | ||
61 | sys_vgui(".x%x.c create rectangle %d %d %d %d -fill #%6.6x -tags %xBASE%d\n", | ||
62 | canvas, xx11, yy11, xx11+dx, yy12, | ||
63 | x->x_gui.x_bcol, x, i); | ||
64 | sys_vgui(".x%x.c create rectangle %d %d %d %d -fill #%6.6x -outline #%6.6x -tags %xBUT%d\n", | ||
65 | canvas, xx21, yy21, xx22, yy22, | ||
66 | (x->x_on==i)?x->x_gui.x_fcol:x->x_gui.x_bcol, | ||
67 | (x->x_on==i)?x->x_gui.x_fcol:x->x_gui.x_bcol, x, i); | ||
68 | xx11 += dx; | ||
69 | xx21 += dx; | ||
70 | xx22 += dx; | ||
71 | } | ||
72 | sys_vgui(".x%x.c create text %d %d -text {%s} -anchor w \ | ||
73 | -font {%s %d bold} -fill #%6.6x -tags %xLABEL\n", | ||
74 | canvas, xx11b+x->x_gui.x_ldx, yy11+x->x_gui.x_ldy, | ||
75 | strcmp(x->x_gui.x_lab->s_name, "empty")?x->x_gui.x_lab->s_name:"", | ||
76 | x->x_gui.x_font, x->x_gui.x_fontsize, | ||
77 | x->x_gui.x_lcol, x); | ||
78 | if(!x->x_gui.x_fsf.x_snd_able) | ||
79 | sys_vgui(".x%x.c create rectangle %d %d %d %d -tags %xOUT%d\n", | ||
80 | canvas, xx11b, yy12-1, xx11b + IOWIDTH, yy12, x, 0); | ||
81 | if(!x->x_gui.x_fsf.x_rcv_able) | ||
82 | sys_vgui(".x%x.c create rectangle %d %d %d %d -tags %xIN%d\n", | ||
83 | canvas, xx11b, yy11, xx11b + IOWIDTH, yy11+1, x, 0); | ||
84 | |||
85 | } | ||
86 | |||
87 | void hradio_draw_move(t_hradio *x, t_glist *glist) | ||
88 | { | ||
89 | t_canvas *canvas=glist_getcanvas(glist); | ||
90 | int n=x->x_number, i, dx=x->x_gui.x_w, s4=dx/4; | ||
91 | int yy11=text_ypix(&x->x_gui.x_obj, glist), yy12=yy11+dx; | ||
92 | int yy21=yy11+s4, yy22=yy12-s4; | ||
93 | int xx11b=text_xpix(&x->x_gui.x_obj, glist), xx11=xx11b, xx21=xx11b+s4; | ||
94 | int xx22=xx11b+dx-s4; | ||
95 | |||
96 | xx11 = xx11b; | ||
97 | xx21=xx11b+s4; | ||
98 | xx22=xx11b+dx-s4; | ||
99 | for(i=0; i<n; i++) | ||
100 | { | ||
101 | sys_vgui(".x%x.c coords %xBASE%d %d %d %d %d\n", | ||
102 | canvas, x, i, xx11, yy11, xx11+dx, yy12); | ||
103 | sys_vgui(".x%x.c coords %xBUT%d %d %d %d %d\n", | ||
104 | canvas, x, i, xx21, yy21, xx22, yy22); | ||
105 | xx11 += dx; | ||
106 | xx21 += dx; | ||
107 | xx22 += dx; | ||
108 | } | ||
109 | sys_vgui(".x%x.c coords %xLABEL %d %d\n", | ||
110 | canvas, x, xx11b+x->x_gui.x_ldx, yy11+x->x_gui.x_ldy); | ||
111 | if(!x->x_gui.x_fsf.x_snd_able) | ||
112 | sys_vgui(".x%x.c coords %xOUT%d %d %d %d %d\n", | ||
113 | canvas, x, 0, xx11b, yy12-1, xx11b + IOWIDTH, yy12); | ||
114 | if(!x->x_gui.x_fsf.x_rcv_able) | ||
115 | sys_vgui(".x%x.c coords %xIN%d %d %d %d %d\n", | ||
116 | canvas, x, 0, xx11b, yy11, xx11b + IOWIDTH, yy11+1); | ||
117 | } | ||
118 | |||
119 | void hradio_draw_erase(t_hradio* x, t_glist* glist) | ||
120 | { | ||
121 | t_canvas *canvas=glist_getcanvas(glist); | ||
122 | int n=x->x_number, i; | ||
123 | |||
124 | for(i=0; i<n; i++) | ||
125 | { | ||
126 | sys_vgui(".x%x.c delete %xBASE%d\n", canvas, x, i); | ||
127 | sys_vgui(".x%x.c delete %xBUT%d\n", canvas, x, i); | ||
128 | } | ||
129 | sys_vgui(".x%x.c delete %xLABEL\n", canvas, x); | ||
130 | if(!x->x_gui.x_fsf.x_snd_able) | ||
131 | sys_vgui(".x%x.c delete %xOUT%d\n", canvas, x, 0); | ||
132 | if(!x->x_gui.x_fsf.x_rcv_able) | ||
133 | sys_vgui(".x%x.c delete %xIN%d\n", canvas, x, 0); | ||
134 | } | ||
135 | |||
136 | void hradio_draw_config(t_hradio* x, t_glist* glist) | ||
137 | { | ||
138 | t_canvas *canvas=glist_getcanvas(glist); | ||
139 | int n=x->x_number, i; | ||
140 | |||
141 | sys_vgui(".x%x.c itemconfigure %xLABEL -font {%s %d bold} -fill #%6.6x -text {%s} \n", | ||
142 | canvas, x, x->x_gui.x_font, x->x_gui.x_fontsize, | ||
143 | x->x_gui.x_fsf.x_selected?IEM_GUI_COLOR_SELECTED:x->x_gui.x_lcol, | ||
144 | strcmp(x->x_gui.x_lab->s_name, "empty")?x->x_gui.x_lab->s_name:""); | ||
145 | for(i=0; i<n; i++) | ||
146 | { | ||
147 | sys_vgui(".x%x.c itemconfigure %xBASE%d -fill #%6.6x\n", canvas, x, i, | ||
148 | x->x_gui.x_bcol); | ||
149 | sys_vgui(".x%x.c itemconfigure %xBUT%d -fill #%6.6x -outline #%6.6x\n", canvas, x, i, | ||
150 | (x->x_on==i)?x->x_gui.x_fcol:x->x_gui.x_bcol, | ||
151 | (x->x_on==i)?x->x_gui.x_fcol:x->x_gui.x_bcol); | ||
152 | } | ||
153 | } | ||
154 | |||
155 | void hradio_draw_io(t_hradio* x, t_glist* glist, int old_snd_rcv_flags) | ||
156 | { | ||
157 | t_canvas *canvas=glist_getcanvas(glist); | ||
158 | int xpos=text_xpix(&x->x_gui.x_obj, glist); | ||
159 | int ypos=text_ypix(&x->x_gui.x_obj, glist); | ||
160 | |||
161 | if((old_snd_rcv_flags & IEM_GUI_OLD_SND_FLAG) && !x->x_gui.x_fsf.x_snd_able) | ||
162 | sys_vgui(".x%x.c create rectangle %d %d %d %d -tags %xOUT%d\n", | ||
163 | canvas, | ||
164 | xpos, ypos + x->x_gui.x_w-1, | ||
165 | xpos + IOWIDTH, ypos + x->x_gui.x_w, | ||
166 | x, 0); | ||
167 | if(!(old_snd_rcv_flags & IEM_GUI_OLD_SND_FLAG) && x->x_gui.x_fsf.x_snd_able) | ||
168 | sys_vgui(".x%x.c delete %xOUT%d\n", canvas, x, 0); | ||
169 | if((old_snd_rcv_flags & IEM_GUI_OLD_RCV_FLAG) && !x->x_gui.x_fsf.x_rcv_able) | ||
170 | sys_vgui(".x%x.c create rectangle %d %d %d %d -tags %xIN%d\n", | ||
171 | canvas, | ||
172 | xpos, ypos, | ||
173 | xpos + IOWIDTH, ypos+1, x, 0); | ||
174 | if(!(old_snd_rcv_flags & IEM_GUI_OLD_RCV_FLAG) && x->x_gui.x_fsf.x_rcv_able) | ||
175 | sys_vgui(".x%x.c delete %xIN%d\n", canvas, x, 0); | ||
176 | } | ||
177 | |||
178 | void hradio_draw_select(t_hradio* x, t_glist* glist) | ||
179 | { | ||
180 | t_canvas *canvas=glist_getcanvas(glist); | ||
181 | int n=x->x_number, i; | ||
182 | |||
183 | if(x->x_gui.x_fsf.x_selected) | ||
184 | { | ||
185 | for(i=0; i<n; i++) | ||
186 | { | ||
187 | sys_vgui(".x%x.c itemconfigure %xBASE%d -outline #%6.6x\n", canvas, x, i, | ||
188 | IEM_GUI_COLOR_SELECTED); | ||
189 | } | ||
190 | sys_vgui(".x%x.c itemconfigure %xLABEL -fill #%6.6x\n", canvas, x, IEM_GUI_COLOR_SELECTED); | ||
191 | } | ||
192 | else | ||
193 | { | ||
194 | for(i=0; i<n; i++) | ||
195 | { | ||
196 | sys_vgui(".x%x.c itemconfigure %xBASE%d -outline #%6.6x\n", canvas, x, i, | ||
197 | IEM_GUI_COLOR_NORMAL); | ||
198 | } | ||
199 | sys_vgui(".x%x.c itemconfigure %xLABEL -fill #%6.6x\n", canvas, x, | ||
200 | x->x_gui.x_lcol); | ||
201 | } | ||
202 | } | ||
203 | |||
204 | void hradio_draw(t_hradio *x, t_glist *glist, int mode) | ||
205 | { | ||
206 | if(mode == IEM_GUI_DRAW_MODE_UPDATE) | ||
207 | hradio_draw_update(x, glist); | ||
208 | else if(mode == IEM_GUI_DRAW_MODE_MOVE) | ||
209 | hradio_draw_move(x, glist); | ||
210 | else if(mode == IEM_GUI_DRAW_MODE_NEW) | ||
211 | hradio_draw_new(x, glist); | ||
212 | else if(mode == IEM_GUI_DRAW_MODE_SELECT) | ||
213 | hradio_draw_select(x, glist); | ||
214 | else if(mode == IEM_GUI_DRAW_MODE_ERASE) | ||
215 | hradio_draw_erase(x, glist); | ||
216 | else if(mode == IEM_GUI_DRAW_MODE_CONFIG) | ||
217 | hradio_draw_config(x, glist); | ||
218 | else if(mode >= IEM_GUI_DRAW_MODE_IO) | ||
219 | hradio_draw_io(x, glist, mode - IEM_GUI_DRAW_MODE_IO); | ||
220 | } | ||
221 | |||
222 | /* ------------------------ hdl widgetbehaviour----------------------------- */ | ||
223 | |||
224 | static void hradio_getrect(t_gobj *z, t_glist *glist, int *xp1, int *yp1, int *xp2, int *yp2) | ||
225 | { | ||
226 | t_hradio *x = (t_hradio *)z; | ||
227 | |||
228 | *xp1 = text_xpix(&x->x_gui.x_obj, glist); | ||
229 | *yp1 = text_ypix(&x->x_gui.x_obj, glist); | ||
230 | *xp2 = *xp1 + x->x_gui.x_w*x->x_number; | ||
231 | *yp2 = *yp1 + x->x_gui.x_h; | ||
232 | } | ||
233 | |||
234 | static void hradio_save(t_gobj *z, t_binbuf *b) | ||
235 | { | ||
236 | t_hradio *x = (t_hradio *)z; | ||
237 | int bflcol[3]; | ||
238 | t_symbol *srl[3]; | ||
239 | |||
240 | iemgui_save(&x->x_gui, srl, bflcol); | ||
241 | binbuf_addv(b, "ssiisiiiisssiiiiiiii", gensym("#X"),gensym("obj"), | ||
242 | (t_int)text_xpix(&x->x_gui.x_obj, x->x_gui.x_glist), | ||
243 | (t_int)text_ypix(&x->x_gui.x_obj, x->x_gui.x_glist), | ||
244 | (pd_class(&x->x_gui.x_obj.ob_pd) == hradio_old_class ? | ||
245 | gensym("hdl") : gensym("hradio")), | ||
246 | x->x_gui.x_w, | ||
247 | x->x_change, iem_symargstoint(&x->x_gui.x_isa), x->x_number, | ||
248 | srl[0], srl[1], srl[2], | ||
249 | x->x_gui.x_ldx, x->x_gui.x_ldy, | ||
250 | iem_fstyletoint(&x->x_gui.x_fsf), x->x_gui.x_fontsize, | ||
251 | bflcol[0], bflcol[1], bflcol[2], x->x_on); | ||
252 | binbuf_addv(b, ";"); | ||
253 | } | ||
254 | |||
255 | static void hradio_properties(t_gobj *z, t_glist *owner) | ||
256 | { | ||
257 | t_hradio *x = (t_hradio *)z; | ||
258 | char buf[800]; | ||
259 | t_symbol *srl[3]; | ||
260 | int hchange=-1; | ||
261 | |||
262 | iemgui_properties(&x->x_gui, srl); | ||
263 | if (pd_class(&x->x_gui.x_obj.ob_pd) == hradio_old_class) | ||
264 | hchange = x->x_change; | ||
265 | sprintf(buf, "pdtk_iemgui_dialog %%s hradio \ | ||
266 | ----------dimensions(pix):----------- %d %d size: 0 0 empty \ | ||
267 | empty 0.0 empty 0.0 empty %d \ | ||
268 | %d new-only new&old %d %d number: %d \ | ||
269 | %s %s \ | ||
270 | %s %d %d \ | ||
271 | %d %d \ | ||
272 | %d %d %d\n", | ||
273 | x->x_gui.x_w, IEM_GUI_MINSIZE, | ||
274 | 0,/*no_schedule*/ | ||
275 | hchange, x->x_gui.x_isa.x_loadinit, -1, x->x_number, | ||
276 | srl[0]->s_name, srl[1]->s_name, | ||
277 | srl[2]->s_name, x->x_gui.x_ldx, x->x_gui.x_ldy, | ||
278 | x->x_gui.x_fsf.x_font_style, x->x_gui.x_fontsize, | ||
279 | 0xffffff & x->x_gui.x_bcol, 0xffffff & x->x_gui.x_fcol, 0xffffff & x->x_gui.x_lcol); | ||
280 | gfxstub_new(&x->x_gui.x_obj.ob_pd, x, buf); | ||
281 | } | ||
282 | |||
283 | static void hradio_dialog(t_hradio *x, t_symbol *s, int argc, t_atom *argv) | ||
284 | { | ||
285 | t_symbol *srl[3]; | ||
286 | int a = (int)atom_getintarg(0, argc, argv); | ||
287 | int chg = (int)atom_getintarg(4, argc, argv); | ||
288 | int num = (int)atom_getintarg(6, argc, argv); | ||
289 | int sr_flags; | ||
290 | |||
291 | if(chg != 0) chg = 1; | ||
292 | x->x_change = chg; | ||
293 | sr_flags = iemgui_dialog(&x->x_gui, srl, argc, argv); | ||
294 | x->x_gui.x_w = iemgui_clip_size(a); | ||
295 | x->x_gui.x_h = x->x_gui.x_w; | ||
296 | if(x->x_number != num) | ||
297 | { | ||
298 | (*x->x_gui.x_draw)(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_ERASE); | ||
299 | x->x_number = num; | ||
300 | if(x->x_on >= x->x_number) | ||
301 | { | ||
302 | x->x_on = x->x_number - 1; | ||
303 | x->x_on_old = x->x_on; | ||
304 | } | ||
305 | (*x->x_gui.x_draw)(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_NEW); | ||
306 | } | ||
307 | else | ||
308 | { | ||
309 | (*x->x_gui.x_draw)(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_CONFIG); | ||
310 | (*x->x_gui.x_draw)(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_IO + sr_flags); | ||
311 | (*x->x_gui.x_draw)(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_MOVE); | ||
312 | canvas_fixlinesfor(glist_getcanvas(x->x_gui.x_glist), (t_text*)x); | ||
313 | } | ||
314 | |||
315 | } | ||
316 | |||
317 | static void hradio_set(t_hradio *x, t_floatarg f) | ||
318 | { | ||
319 | int i=(int)f; | ||
320 | int old=x->x_on_old; | ||
321 | |||
322 | if(i < 0) | ||
323 | i = 0; | ||
324 | if(i >= x->x_number) | ||
325 | i = x->x_number-1; | ||
326 | if(x->x_on != x->x_on_old) | ||
327 | { | ||
328 | old = x->x_on_old; | ||
329 | x->x_on_old = x->x_on; | ||
330 | x->x_on = i; | ||
331 | (*x->x_gui.x_draw)(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_UPDATE); | ||
332 | x->x_on_old = old; | ||
333 | } | ||
334 | else | ||
335 | { | ||
336 | x->x_on = i; | ||
337 | (*x->x_gui.x_draw)(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_UPDATE); | ||
338 | } | ||
339 | } | ||
340 | |||
341 | static void hradio_bang(t_hradio *x) | ||
342 | { | ||
343 | /* compatibility with earlier "hdial" behavior */ | ||
344 | if (pd_class(&x->x_gui.x_obj.ob_pd) == hradio_old_class) | ||
345 | { | ||
346 | if((x->x_change)&&(x->x_on != x->x_on_old)) | ||
347 | { | ||
348 | SETFLOAT(x->x_at, (float)x->x_on_old); | ||
349 | SETFLOAT(x->x_at+1, 0.0); | ||
350 | outlet_list(x->x_gui.x_obj.ob_outlet, &s_list, 2, x->x_at); | ||
351 | if(x->x_gui.x_fsf.x_snd_able && x->x_gui.x_snd->s_thing) | ||
352 | pd_list(x->x_gui.x_snd->s_thing, &s_list, 2, x->x_at); | ||
353 | } | ||
354 | x->x_on_old = x->x_on; | ||
355 | SETFLOAT(x->x_at, (float)x->x_on); | ||
356 | SETFLOAT(x->x_at+1, 1.0); | ||
357 | outlet_list(x->x_gui.x_obj.ob_outlet, &s_list, 2, x->x_at); | ||
358 | if(x->x_gui.x_fsf.x_snd_able && x->x_gui.x_snd->s_thing) | ||
359 | pd_list(x->x_gui.x_snd->s_thing, &s_list, 2, x->x_at); | ||
360 | } | ||
361 | else | ||
362 | { | ||
363 | outlet_float(x->x_gui.x_obj.ob_outlet, x->x_on); | ||
364 | if(x->x_gui.x_fsf.x_snd_able && x->x_gui.x_snd->s_thing) | ||
365 | pd_float(x->x_gui.x_snd->s_thing, x->x_on); | ||
366 | } | ||
367 | } | ||
368 | |||
369 | static void hradio_fout(t_hradio *x, t_floatarg f) | ||
370 | { | ||
371 | int i=(int)f; | ||
372 | |||
373 | if(i < 0) | ||
374 | i = 0; | ||
375 | if(i >= x->x_number) | ||
376 | i = x->x_number-1; | ||
377 | |||
378 | if (pd_class(&x->x_gui.x_obj.ob_pd) == hradio_old_class) | ||
379 | { | ||
380 | if((x->x_change)&&(i != x->x_on_old)) | ||
381 | { | ||
382 | SETFLOAT(x->x_at, (float)x->x_on_old); | ||
383 | SETFLOAT(x->x_at+1, 0.0); | ||
384 | outlet_list(x->x_gui.x_obj.ob_outlet, &s_list, 2, x->x_at); | ||
385 | if(x->x_gui.x_fsf.x_snd_able && x->x_gui.x_snd->s_thing) | ||
386 | pd_list(x->x_gui.x_snd->s_thing, &s_list, 2, x->x_at); | ||
387 | } | ||
388 | if(x->x_on != x->x_on_old) | ||
389 | x->x_on_old = x->x_on; | ||
390 | x->x_on = i; | ||
391 | (*x->x_gui.x_draw)(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_UPDATE); | ||
392 | x->x_on_old = x->x_on; | ||
393 | SETFLOAT(x->x_at, (float)x->x_on); | ||
394 | SETFLOAT(x->x_at+1, 1.0); | ||
395 | outlet_list(x->x_gui.x_obj.ob_outlet, &s_list, 2, x->x_at); | ||
396 | if(x->x_gui.x_fsf.x_snd_able && x->x_gui.x_snd->s_thing) | ||
397 | pd_list(x->x_gui.x_snd->s_thing, &s_list, 2, x->x_at); | ||
398 | } | ||
399 | else | ||
400 | { | ||
401 | x->x_on_old = x->x_on; | ||
402 | x->x_on = i; | ||
403 | (*x->x_gui.x_draw)(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_UPDATE); | ||
404 | outlet_float(x->x_gui.x_obj.ob_outlet, x->x_on); | ||
405 | if(x->x_gui.x_fsf.x_snd_able && x->x_gui.x_snd->s_thing) | ||
406 | pd_float(x->x_gui.x_snd->s_thing, x->x_on); | ||
407 | } | ||
408 | } | ||
409 | |||
410 | static void hradio_float(t_hradio *x, t_floatarg f) | ||
411 | { | ||
412 | int i=(int)f; | ||
413 | |||
414 | if(i < 0) | ||
415 | i = 0; | ||
416 | if(i >= x->x_number) | ||
417 | i = x->x_number-1; | ||
418 | |||
419 | if (pd_class(&x->x_gui.x_obj.ob_pd) == hradio_old_class) | ||
420 | { | ||
421 | /* compatibility with earlier "vdial" behavior */ | ||
422 | if((x->x_change)&&(i != x->x_on_old)) | ||
423 | { | ||
424 | if(x->x_gui.x_fsf.x_put_in2out) | ||
425 | { | ||
426 | SETFLOAT(x->x_at, (float)x->x_on_old); | ||
427 | SETFLOAT(x->x_at+1, 0.0); | ||
428 | outlet_list(x->x_gui.x_obj.ob_outlet, &s_list, 2, x->x_at); | ||
429 | if(x->x_gui.x_fsf.x_snd_able && x->x_gui.x_snd->s_thing) | ||
430 | pd_list(x->x_gui.x_snd->s_thing, &s_list, 2, x->x_at); | ||
431 | } | ||
432 | } | ||
433 | if(x->x_on != x->x_on_old) | ||
434 | x->x_on_old = x->x_on; | ||
435 | x->x_on = i; | ||
436 | (*x->x_gui.x_draw)(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_UPDATE); | ||
437 | x->x_on_old = x->x_on; | ||
438 | if(x->x_gui.x_fsf.x_put_in2out) | ||
439 | { | ||
440 | SETFLOAT(x->x_at, (float)x->x_on); | ||
441 | SETFLOAT(x->x_at+1, 1.0); | ||
442 | outlet_list(x->x_gui.x_obj.ob_outlet, &s_list, 2, x->x_at); | ||
443 | if(x->x_gui.x_fsf.x_snd_able && x->x_gui.x_snd->s_thing) | ||
444 | pd_list(x->x_gui.x_snd->s_thing, &s_list, 2, x->x_at); | ||
445 | } | ||
446 | } | ||
447 | else | ||
448 | { | ||
449 | x->x_on_old = x->x_on; | ||
450 | x->x_on = i; | ||
451 | (*x->x_gui.x_draw)(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_UPDATE); | ||
452 | if (x->x_gui.x_fsf.x_put_in2out) | ||
453 | { | ||
454 | outlet_float(x->x_gui.x_obj.ob_outlet, x->x_on); | ||
455 | if(x->x_gui.x_fsf.x_snd_able && x->x_gui.x_snd->s_thing) | ||
456 | pd_float(x->x_gui.x_snd->s_thing, x->x_on); | ||
457 | } | ||
458 | } | ||
459 | } | ||
460 | |||
461 | static void hradio_click(t_hradio *x, t_floatarg xpos, t_floatarg ypos, t_floatarg shift, t_floatarg ctrl, t_floatarg alt) | ||
462 | { | ||
463 | int xx = (int)xpos - (int)text_xpix(&x->x_gui.x_obj, x->x_gui.x_glist); | ||
464 | |||
465 | hradio_fout(x, (float)(xx / x->x_gui.x_w)); | ||
466 | } | ||
467 | |||
468 | static int hradio_newclick(t_gobj *z, struct _glist *glist, int xpix, int ypix, int shift, int alt, int dbl, int doit) | ||
469 | { | ||
470 | if(doit) | ||
471 | hradio_click((t_hradio *)z, (t_floatarg)xpix, (t_floatarg)ypix, (t_floatarg)shift, 0, (t_floatarg)alt); | ||
472 | return (1); | ||
473 | } | ||
474 | |||
475 | static void hradio_loadbang(t_hradio *x) | ||
476 | { | ||
477 | if(!sys_noloadbang && x->x_gui.x_isa.x_loadinit) | ||
478 | hradio_bang(x); | ||
479 | } | ||
480 | |||
481 | static void hradio_number(t_hradio *x, t_floatarg num) | ||
482 | { | ||
483 | int n=(int)num; | ||
484 | |||
485 | if(n < 1) | ||
486 | n = 1; | ||
487 | if(n > IEM_RADIO_MAX) | ||
488 | n = IEM_RADIO_MAX; | ||
489 | if(n != x->x_number) | ||
490 | { | ||
491 | (*x->x_gui.x_draw)(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_ERASE); | ||
492 | x->x_number = n; | ||
493 | if(x->x_on >= x->x_number) | ||
494 | x->x_on = x->x_number - 1; | ||
495 | x->x_on_old = x->x_on; | ||
496 | (*x->x_gui.x_draw)(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_NEW); | ||
497 | } | ||
498 | } | ||
499 | |||
500 | static void hradio_size(t_hradio *x, t_symbol *s, int ac, t_atom *av) | ||
501 | { | ||
502 | x->x_gui.x_w = iemgui_clip_size((int)atom_getintarg(0, ac, av)); | ||
503 | x->x_gui.x_h = x->x_gui.x_w; | ||
504 | iemgui_size((void *)x, &x->x_gui); | ||
505 | } | ||
506 | |||
507 | static void hradio_delta(t_hradio *x, t_symbol *s, int ac, t_atom *av) | ||
508 | {iemgui_delta((void *)x, &x->x_gui, s, ac, av);} | ||
509 | |||
510 | static void hradio_pos(t_hradio *x, t_symbol *s, int ac, t_atom *av) | ||
511 | {iemgui_pos((void *)x, &x->x_gui, s, ac, av);} | ||
512 | |||
513 | static void hradio_color(t_hradio *x, t_symbol *s, int ac, t_atom *av) | ||
514 | {iemgui_color((void *)x, &x->x_gui, s, ac, av);} | ||
515 | |||
516 | static void hradio_send(t_hradio *x, t_symbol *s) | ||
517 | {iemgui_send(x, &x->x_gui, s);} | ||
518 | |||
519 | static void hradio_receive(t_hradio *x, t_symbol *s) | ||
520 | {iemgui_receive(x, &x->x_gui, s);} | ||
521 | |||
522 | static void hradio_label(t_hradio *x, t_symbol *s) | ||
523 | {iemgui_label((void *)x, &x->x_gui, s);} | ||
524 | |||
525 | static void hradio_label_pos(t_hradio *x, t_symbol *s, int ac, t_atom *av) | ||
526 | {iemgui_label_pos((void *)x, &x->x_gui, s, ac, av);} | ||
527 | |||
528 | static void hradio_label_font(t_hradio *x, t_symbol *s, int ac, t_atom *av) | ||
529 | {iemgui_label_font((void *)x, &x->x_gui, s, ac, av);} | ||
530 | |||
531 | static void hradio_init(t_hradio *x, t_floatarg f) | ||
532 | { | ||
533 | x->x_gui.x_isa.x_loadinit = (f==0.0)?0:1; | ||
534 | } | ||
535 | |||
536 | static void hradio_double_change(t_hradio *x) | ||
537 | {x->x_change = 1;} | ||
538 | |||
539 | static void hradio_single_change(t_hradio *x) | ||
540 | {x->x_change = 0;} | ||
541 | |||
542 | static void *hradio_donew(t_symbol *s, int argc, t_atom *argv, int old) | ||
543 | { | ||
544 | t_hradio *x = (t_hradio *)pd_new(old? hradio_old_class : hradio_class); | ||
545 | int bflcol[]={-262144, -1, -1}; | ||
546 | int a=IEM_GUI_DEFAULTSIZE, on=0, f=0; | ||
547 | int ldx=0, ldy=-6, chg=1, num=8; | ||
548 | int fs=8; | ||
549 | int ftbreak=IEM_BNG_DEFAULTBREAKFLASHTIME, fthold=IEM_BNG_DEFAULTHOLDFLASHTIME; | ||
550 | char str[144]; | ||
551 | |||
552 | iem_inttosymargs(&x->x_gui.x_isa, 0); | ||
553 | iem_inttofstyle(&x->x_gui.x_fsf, 0); | ||
554 | |||
555 | if((argc == 15)&&IS_A_FLOAT(argv,0)&&IS_A_FLOAT(argv,1)&&IS_A_FLOAT(argv,2) | ||
556 | &&IS_A_FLOAT(argv,3) | ||
557 | &&(IS_A_SYMBOL(argv,4)||IS_A_FLOAT(argv,4)) | ||
558 | &&(IS_A_SYMBOL(argv,5)||IS_A_FLOAT(argv,5)) | ||
559 | &&(IS_A_SYMBOL(argv,6)||IS_A_FLOAT(argv,6)) | ||
560 | &&IS_A_FLOAT(argv,7)&&IS_A_FLOAT(argv,8) | ||
561 | &&IS_A_FLOAT(argv,9)&&IS_A_FLOAT(argv,10)&&IS_A_FLOAT(argv,11) | ||
562 | &&IS_A_FLOAT(argv,12)&&IS_A_FLOAT(argv,13)&&IS_A_FLOAT(argv,14)) | ||
563 | { | ||
564 | a = (int)atom_getintarg(0, argc, argv); | ||
565 | chg = (int)atom_getintarg(1, argc, argv); | ||
566 | iem_inttosymargs(&x->x_gui.x_isa, atom_getintarg(2, argc, argv)); | ||
567 | num = (int)atom_getintarg(3, argc, argv); | ||
568 | iemgui_new_getnames(&x->x_gui, 4, argv); | ||
569 | ldx = (int)atom_getintarg(7, argc, argv); | ||
570 | ldy = (int)atom_getintarg(8, argc, argv); | ||
571 | iem_inttofstyle(&x->x_gui.x_fsf, atom_getintarg(9, argc, argv)); | ||
572 | fs = (int)atom_getintarg(10, argc, argv); | ||
573 | bflcol[0] = (int)atom_getintarg(11, argc, argv); | ||
574 | bflcol[1] = (int)atom_getintarg(12, argc, argv); | ||
575 | bflcol[2] = (int)atom_getintarg(13, argc, argv); | ||
576 | on = (int)atom_getintarg(14, argc, argv); | ||
577 | } | ||
578 | else iemgui_new_getnames(&x->x_gui, 4, 0); | ||
579 | x->x_gui.x_draw = (t_iemfunptr)hradio_draw; | ||
580 | x->x_gui.x_fsf.x_snd_able = 1; | ||
581 | x->x_gui.x_fsf.x_rcv_able = 1; | ||
582 | x->x_gui.x_glist = (t_glist *)canvas_getcurrent(); | ||
583 | if (!strcmp(x->x_gui.x_snd->s_name, "empty")) | ||
584 | x->x_gui.x_fsf.x_snd_able = 0; | ||
585 | if (!strcmp(x->x_gui.x_rcv->s_name, "empty")) | ||
586 | x->x_gui.x_fsf.x_rcv_able = 0; | ||
587 | if(x->x_gui.x_fsf.x_font_style == 1) strcpy(x->x_gui.x_font, "helvetica"); | ||
588 | else if(x->x_gui.x_fsf.x_font_style == 2) strcpy(x->x_gui.x_font, "times"); | ||
589 | else { x->x_gui.x_fsf.x_font_style = 0; | ||
590 | strcpy(x->x_gui.x_font, "courier"); } | ||
591 | if(num < 1) | ||
592 | num = 1; | ||
593 | if(num > IEM_RADIO_MAX) | ||
594 | num = IEM_RADIO_MAX; | ||
595 | x->x_number = num; | ||
596 | if(on < 0) | ||
597 | on = 0; | ||
598 | if(on >= x->x_number) | ||
599 | on = x->x_number - 1; | ||
600 | if(x->x_gui.x_isa.x_loadinit) | ||
601 | x->x_on = on; | ||
602 | else | ||
603 | x->x_on = 0; | ||
604 | x->x_on_old = x->x_on; | ||
605 | x->x_change = (chg==0)?0:1; | ||
606 | if (x->x_gui.x_fsf.x_rcv_able) | ||
607 | pd_bind(&x->x_gui.x_obj.ob_pd, x->x_gui.x_rcv); | ||
608 | x->x_gui.x_ldx = ldx; | ||
609 | x->x_gui.x_ldy = ldy; | ||
610 | if(fs < 4) | ||
611 | fs = 4; | ||
612 | x->x_gui.x_fontsize = fs; | ||
613 | x->x_gui.x_w = iemgui_clip_size(a); | ||
614 | x->x_gui.x_h = x->x_gui.x_w; | ||
615 | iemgui_verify_snd_ne_rcv(&x->x_gui); | ||
616 | iemgui_all_colfromload(&x->x_gui, bflcol); | ||
617 | outlet_new(&x->x_gui.x_obj, &s_list); | ||
618 | return (x); | ||
619 | } | ||
620 | |||
621 | static void *hradio_new(t_symbol *s, int argc, t_atom *argv) | ||
622 | { | ||
623 | return (hradio_donew(s, argc, argv, 0)); | ||
624 | } | ||
625 | |||
626 | static void *hdial_new(t_symbol *s, int argc, t_atom *argv) | ||
627 | { | ||
628 | return (hradio_donew(s, argc, argv, 1)); | ||
629 | } | ||
630 | |||
631 | static void hradio_ff(t_hradio *x) | ||
632 | { | ||
633 | if(x->x_gui.x_fsf.x_rcv_able) | ||
634 | pd_unbind(&x->x_gui.x_obj.ob_pd, x->x_gui.x_rcv); | ||
635 | gfxstub_deleteforkey(x); | ||
636 | } | ||
637 | |||
638 | void g_hradio_setup(void) | ||
639 | { | ||
640 | hradio_class = class_new(gensym("hradio"), (t_newmethod)hradio_new, | ||
641 | (t_method)hradio_ff, sizeof(t_hradio), 0, A_GIMME, 0); | ||
642 | class_addbang(hradio_class, hradio_bang); | ||
643 | class_addfloat(hradio_class, hradio_float); | ||
644 | class_addmethod(hradio_class, (t_method)hradio_click, gensym("click"), | ||
645 | A_FLOAT, A_FLOAT, A_FLOAT, A_FLOAT, A_FLOAT, 0); | ||
646 | class_addmethod(hradio_class, (t_method)hradio_dialog, gensym("dialog"), | ||
647 | A_GIMME, 0); | ||
648 | class_addmethod(hradio_class, (t_method)hradio_loadbang, | ||
649 | gensym("loadbang"), 0); | ||
650 | class_addmethod(hradio_class, (t_method)hradio_set, | ||
651 | gensym("set"), A_FLOAT, 0); | ||
652 | class_addmethod(hradio_class, (t_method)hradio_size, | ||
653 | gensym("size"), A_GIMME, 0); | ||
654 | class_addmethod(hradio_class, (t_method)hradio_delta, | ||
655 | gensym("delta"), A_GIMME, 0); | ||
656 | class_addmethod(hradio_class, (t_method)hradio_pos, | ||
657 | gensym("pos"), A_GIMME, 0); | ||
658 | class_addmethod(hradio_class, (t_method)hradio_color, | ||
659 | gensym("color"), A_GIMME, 0); | ||
660 | class_addmethod(hradio_class, (t_method)hradio_send, | ||
661 | gensym("send"), A_DEFSYM, 0); | ||
662 | class_addmethod(hradio_class, (t_method)hradio_receive, | ||
663 | gensym("receive"), A_DEFSYM, 0); | ||
664 | class_addmethod(hradio_class, (t_method)hradio_label, | ||
665 | gensym("label"), A_DEFSYM, 0); | ||
666 | class_addmethod(hradio_class, (t_method)hradio_label_pos, | ||
667 | gensym("label_pos"), A_GIMME, 0); | ||
668 | class_addmethod(hradio_class, (t_method)hradio_label_font, | ||
669 | gensym("label_font"), A_GIMME, 0); | ||
670 | class_addmethod(hradio_class, (t_method)hradio_init, | ||
671 | gensym("init"), A_FLOAT, 0); | ||
672 | class_addmethod(hradio_class, (t_method)hradio_number, | ||
673 | gensym("number"), A_FLOAT, 0); | ||
674 | class_addmethod(hradio_class, (t_method)hradio_single_change, | ||
675 | gensym("single_change"), 0); | ||
676 | class_addmethod(hradio_class, (t_method)hradio_double_change, | ||
677 | gensym("double_change"), 0); | ||
678 | hradio_widgetbehavior.w_getrectfn = hradio_getrect; | ||
679 | hradio_widgetbehavior.w_displacefn = iemgui_displace; | ||
680 | hradio_widgetbehavior.w_selectfn = iemgui_select; | ||
681 | hradio_widgetbehavior.w_activatefn = NULL; | ||
682 | hradio_widgetbehavior.w_deletefn = iemgui_delete; | ||
683 | hradio_widgetbehavior.w_visfn = iemgui_vis; | ||
684 | hradio_widgetbehavior.w_clickfn = hradio_newclick; | ||
685 | class_setwidget(hradio_class, &hradio_widgetbehavior); | ||
686 | class_sethelpsymbol(hradio_class, gensym("hradio")); | ||
687 | class_setsavefn(hradio_class, hradio_save); | ||
688 | class_setpropertiesfn(hradio_class, hradio_properties); | ||
689 | |||
690 | /*obsolete version (0.34-0.35) */ | ||
691 | hradio_old_class = class_new(gensym("hdl"), (t_newmethod)hdial_new, | ||
692 | (t_method)hradio_ff, sizeof(t_hradio), 0, A_GIMME, 0); | ||
693 | class_addcreator((t_newmethod)hradio_new, gensym("rdb"), A_GIMME, 0); | ||
694 | class_addcreator((t_newmethod)hradio_new, gensym("radiobut"), A_GIMME, 0); | ||
695 | class_addcreator((t_newmethod)hradio_new, gensym("radiobutton"), | ||
696 | A_GIMME, 0); | ||
697 | class_addbang(hradio_old_class, hradio_bang); | ||
698 | class_addfloat(hradio_old_class, hradio_float); | ||
699 | class_addmethod(hradio_old_class, (t_method)hradio_click, gensym("click"), | ||
700 | A_FLOAT, A_FLOAT, A_FLOAT, A_FLOAT, A_FLOAT, 0); | ||
701 | class_addmethod(hradio_old_class, (t_method)hradio_dialog, gensym("dialog"), | ||
702 | A_GIMME, 0); | ||
703 | class_addmethod(hradio_old_class, (t_method)hradio_loadbang, | ||
704 | gensym("loadbang"), 0); | ||
705 | class_addmethod(hradio_old_class, (t_method)hradio_set, | ||
706 | gensym("set"), A_FLOAT, 0); | ||
707 | class_addmethod(hradio_old_class, (t_method)hradio_size, | ||
708 | gensym("size"), A_GIMME, 0); | ||
709 | class_addmethod(hradio_old_class, (t_method)hradio_delta, | ||
710 | gensym("delta"), A_GIMME, 0); | ||
711 | class_addmethod(hradio_old_class, (t_method)hradio_pos, | ||
712 | gensym("pos"), A_GIMME, 0); | ||
713 | class_addmethod(hradio_old_class, (t_method)hradio_color, | ||
714 | gensym("color"), A_GIMME, 0); | ||
715 | class_addmethod(hradio_old_class, (t_method)hradio_send, | ||
716 | gensym("send"), A_DEFSYM, 0); | ||
717 | class_addmethod(hradio_old_class, (t_method)hradio_receive, | ||
718 | gensym("receive"), A_DEFSYM, 0); | ||
719 | class_addmethod(hradio_old_class, (t_method)hradio_label, | ||
720 | gensym("label"), A_DEFSYM, 0); | ||
721 | class_addmethod(hradio_old_class, (t_method)hradio_label_pos, | ||
722 | gensym("label_pos"), A_GIMME, 0); | ||
723 | class_addmethod(hradio_old_class, (t_method)hradio_label_font, | ||
724 | gensym("label_font"), A_GIMME, 0); | ||
725 | class_addmethod(hradio_old_class, (t_method)hradio_init, | ||
726 | gensym("init"), A_FLOAT, 0); | ||
727 | class_addmethod(hradio_old_class, (t_method)hradio_number, | ||
728 | gensym("number"), A_FLOAT, 0); | ||
729 | class_addmethod(hradio_old_class, (t_method)hradio_single_change, | ||
730 | gensym("single_change"), 0); | ||
731 | class_addmethod(hradio_old_class, (t_method)hradio_double_change, | ||
732 | gensym("double_change"), 0); | ||
733 | class_setwidget(hradio_old_class, &hradio_widgetbehavior); | ||
734 | class_sethelpsymbol(hradio_old_class, gensym("hradio")); | ||
735 | } | ||
736 | /* Copyright (c) 1997-1999 Miller Puckette. | ||
737 | * For information on usage and redistribution, and for a DISCLAIMER OF ALL | ||
738 | * WARRANTIES, see the file, "LICENSE.txt," in this distribution. */ | ||
739 | |||
740 | /* g_7_guis.c written by Thomas Musil (c) IEM KUG Graz Austria 2000-2001 */ | ||
741 | /* thanks to Miller Puckette, Guenther Geiger and Krzystof Czaja */ | ||
742 | |||
743 | /* name change to hradio by MSP and changed to | ||
744 | put out a "float" as in sliders, toggles, etc. */ | ||
745 | |||
746 | #include <stdlib.h> | ||
747 | #include <string.h> | ||
748 | #include <stdio.h> | ||
749 | #include <ctype.h> | ||
750 | #include "m_pd.h" | ||
751 | #include "g_canvas.h" | ||
752 | #include "t_tk.h" | ||
753 | #include "g_all_guis.h" | ||
754 | #include <math.h> | ||
755 | |||
756 | #ifdef MSW | ||
757 | #include <io.h> | ||
758 | #else | ||
759 | #include <unistd.h> | ||
760 | #endif | ||
761 | |||
762 | /* ------------- hdl gui-horicontal dial ---------------------- */ | ||
763 | |||
764 | t_widgetbehavior hradio_widgetbehavior; | ||
765 | static t_class *hradio_class, *hradio_old_class; | ||
766 | |||
767 | /* widget helper functions */ | ||
768 | |||
769 | void hradio_draw_update(t_hradio *x, t_glist *glist) | ||
770 | { | ||
771 | if(glist_isvisible(glist)) | ||
772 | { | ||
773 | t_canvas *canvas=glist_getcanvas(glist); | ||
774 | |||
775 | sys_vgui(".x%x.c itemconfigure %xBUT%d -fill #%6.6x -outline #%6.6x\n", | ||
776 | canvas, x, x->x_on_old, | ||
777 | x->x_gui.x_bcol, x->x_gui.x_bcol); | ||
778 | sys_vgui(".x%x.c itemconfigure %xBUT%d -fill #%6.6x -outline #%6.6x\n", | ||
779 | canvas, x, x->x_on, | ||
780 | x->x_gui.x_fcol, x->x_gui.x_fcol); | ||
781 | } | ||
782 | } | ||
783 | |||
784 | void hradio_draw_new(t_hradio *x, t_glist *glist) | ||
785 | { | ||
786 | t_canvas *canvas=glist_getcanvas(glist); | ||
787 | int n=x->x_number, i, dx=x->x_gui.x_w, s4=dx/4; | ||
788 | int yy11=text_ypix(&x->x_gui.x_obj, glist), yy12=yy11+dx; | ||
789 | int yy21=yy11+s4, yy22=yy12-s4; | ||
790 | int xx11b=text_xpix(&x->x_gui.x_obj, glist), xx11=xx11b, xx21=xx11b+s4; | ||
791 | int xx22=xx11b+dx-s4; | ||
792 | |||
793 | |||
794 | for(i=0; i<n; i++) | ||
795 | { | ||
796 | sys_vgui(".x%x.c create rectangle %d %d %d %d -fill #%6.6x -tags %xBASE%d\n", | ||
797 | canvas, xx11, yy11, xx11+dx, yy12, | ||
798 | x->x_gui.x_bcol, x, i); | ||
799 | sys_vgui(".x%x.c create rectangle %d %d %d %d -fill #%6.6x -outline #%6.6x -tags %xBUT%d\n", | ||
800 | canvas, xx21, yy21, xx22, yy22, | ||
801 | (x->x_on==i)?x->x_gui.x_fcol:x->x_gui.x_bcol, | ||
802 | (x->x_on==i)?x->x_gui.x_fcol:x->x_gui.x_bcol, x, i); | ||
803 | xx11 += dx; | ||
804 | xx21 += dx; | ||
805 | xx22 += dx; | ||
806 | } | ||
807 | sys_vgui(".x%x.c create text %d %d -text {%s} -anchor w \ | ||
808 | -font {%s %d bold} -fill #%6.6x -tags %xLABEL\n", | ||
809 | canvas, xx11b+x->x_gui.x_ldx, yy11+x->x_gui.x_ldy, | ||
810 | strcmp(x->x_gui.x_lab->s_name, "empty")?x->x_gui.x_lab->s_name:"", | ||
811 | x->x_gui.x_font, x->x_gui.x_fontsize, | ||
812 | x->x_gui.x_lcol, x); | ||
813 | if(!x->x_gui.x_fsf.x_snd_able) | ||
814 | sys_vgui(".x%x.c create rectangle %d %d %d %d -tags %xOUT%d\n", | ||
815 | canvas, xx11b, yy12-1, xx11b + IOWIDTH, yy12, x, 0); | ||
816 | if(!x->x_gui.x_fsf.x_rcv_able) | ||
817 | sys_vgui(".x%x.c create rectangle %d %d %d %d -tags %xIN%d\n", | ||
818 | canvas, xx11b, yy11, xx11b + IOWIDTH, yy11+1, x, 0); | ||
819 | |||
820 | } | ||
821 | |||
822 | void hradio_draw_move(t_hradio *x, t_glist *glist) | ||
823 | { | ||
824 | t_canvas *canvas=glist_getcanvas(glist); | ||
825 | int n=x->x_number, i, dx=x->x_gui.x_w, s4=dx/4; | ||
826 | int yy11=text_ypix(&x->x_gui.x_obj, glist), yy12=yy11+dx; | ||
827 | int yy21=yy11+s4, yy22=yy12-s4; | ||
828 | int xx11b=text_xpix(&x->x_gui.x_obj, glist), xx11=xx11b, xx21=xx11b+s4; | ||
829 | int xx22=xx11b+dx-s4; | ||
830 | |||
831 | xx11 = xx11b; | ||
832 | xx21=xx11b+s4; | ||
833 | xx22=xx11b+dx-s4; | ||
834 | for(i=0; i<n; i++) | ||
835 | { | ||
836 | sys_vgui(".x%x.c coords %xBASE%d %d %d %d %d\n", | ||
837 | canvas, x, i, xx11, yy11, xx11+dx, yy12); | ||
838 | sys_vgui(".x%x.c coords %xBUT%d %d %d %d %d\n", | ||
839 | canvas, x, i, xx21, yy21, xx22, yy22); | ||
840 | xx11 += dx; | ||
841 | xx21 += dx; | ||
842 | xx22 += dx; | ||
843 | } | ||
844 | sys_vgui(".x%x.c coords %xLABEL %d %d\n", | ||
845 | canvas, x, xx11b+x->x_gui.x_ldx, yy11+x->x_gui.x_ldy); | ||
846 | if(!x->x_gui.x_fsf.x_snd_able) | ||
847 | sys_vgui(".x%x.c coords %xOUT%d %d %d %d %d\n", | ||
848 | canvas, x, 0, xx11b, yy12-1, xx11b + IOWIDTH, yy12); | ||
849 | if(!x->x_gui.x_fsf.x_rcv_able) | ||
850 | sys_vgui(".x%x.c coords %xIN%d %d %d %d %d\n", | ||
851 | canvas, x, 0, xx11b, yy11, xx11b + IOWIDTH, yy11+1); | ||
852 | } | ||
853 | |||
854 | void hradio_draw_erase(t_hradio* x, t_glist* glist) | ||
855 | { | ||
856 | t_canvas *canvas=glist_getcanvas(glist); | ||
857 | int n=x->x_number, i; | ||
858 | |||
859 | for(i=0; i<n; i++) | ||
860 | { | ||
861 | sys_vgui(".x%x.c delete %xBASE%d\n", canvas, x, i); | ||
862 | sys_vgui(".x%x.c delete %xBUT%d\n", canvas, x, i); | ||
863 | } | ||
864 | sys_vgui(".x%x.c delete %xLABEL\n", canvas, x); | ||
865 | if(!x->x_gui.x_fsf.x_snd_able) | ||
866 | sys_vgui(".x%x.c delete %xOUT%d\n", canvas, x, 0); | ||
867 | if(!x->x_gui.x_fsf.x_rcv_able) | ||
868 | sys_vgui(".x%x.c delete %xIN%d\n", canvas, x, 0); | ||
869 | } | ||
870 | |||
871 | void hradio_draw_config(t_hradio* x, t_glist* glist) | ||
872 | { | ||
873 | t_canvas *canvas=glist_getcanvas(glist); | ||
874 | int n=x->x_number, i; | ||
875 | |||
876 | sys_vgui(".x%x.c itemconfigure %xLABEL -font {%s %d bold} -fill #%6.6x -text {%s} \n", | ||
877 | canvas, x, x->x_gui.x_font, x->x_gui.x_fontsize, | ||
878 | x->x_gui.x_fsf.x_selected?IEM_GUI_COLOR_SELECTED:x->x_gui.x_lcol, | ||
879 | strcmp(x->x_gui.x_lab->s_name, "empty")?x->x_gui.x_lab->s_name:""); | ||
880 | for(i=0; i<n; i++) | ||
881 | { | ||
882 | sys_vgui(".x%x.c itemconfigure %xBASE%d -fill #%6.6x\n", canvas, x, i, | ||
883 | x->x_gui.x_bcol); | ||
884 | sys_vgui(".x%x.c itemconfigure %xBUT%d -fill #%6.6x -outline #%6.6x\n", canvas, x, i, | ||
885 | (x->x_on==i)?x->x_gui.x_fcol:x->x_gui.x_bcol, | ||
886 | (x->x_on==i)?x->x_gui.x_fcol:x->x_gui.x_bcol); | ||
887 | } | ||
888 | } | ||
889 | |||
890 | void hradio_draw_io(t_hradio* x, t_glist* glist, int old_snd_rcv_flags) | ||
891 | { | ||
892 | t_canvas *canvas=glist_getcanvas(glist); | ||
893 | int xpos=text_xpix(&x->x_gui.x_obj, glist); | ||
894 | int ypos=text_ypix(&x->x_gui.x_obj, glist); | ||
895 | |||
896 | if((old_snd_rcv_flags & IEM_GUI_OLD_SND_FLAG) && !x->x_gui.x_fsf.x_snd_able) | ||
897 | sys_vgui(".x%x.c create rectangle %d %d %d %d -tags %xOUT%d\n", | ||
898 | canvas, | ||
899 | xpos, ypos + x->x_gui.x_w-1, | ||
900 | xpos + IOWIDTH, ypos + x->x_gui.x_w, | ||
901 | x, 0); | ||
902 | if(!(old_snd_rcv_flags & IEM_GUI_OLD_SND_FLAG) && x->x_gui.x_fsf.x_snd_able) | ||
903 | sys_vgui(".x%x.c delete %xOUT%d\n", canvas, x, 0); | ||
904 | if((old_snd_rcv_flags & IEM_GUI_OLD_RCV_FLAG) && !x->x_gui.x_fsf.x_rcv_able) | ||
905 | sys_vgui(".x%x.c create rectangle %d %d %d %d -tags %xIN%d\n", | ||
906 | canvas, | ||
907 | xpos, ypos, | ||
908 | xpos + IOWIDTH, ypos+1, x, 0); | ||
909 | if(!(old_snd_rcv_flags & IEM_GUI_OLD_RCV_FLAG) && x->x_gui.x_fsf.x_rcv_able) | ||
910 | sys_vgui(".x%x.c delete %xIN%d\n", canvas, x, 0); | ||
911 | } | ||
912 | |||
913 | void hradio_draw_select(t_hradio* x, t_glist* glist) | ||
914 | { | ||
915 | t_canvas *canvas=glist_getcanvas(glist); | ||
916 | int n=x->x_number, i; | ||
917 | |||
918 | if(x->x_gui.x_fsf.x_selected) | ||
919 | { | ||
920 | for(i=0; i<n; i++) | ||
921 | { | ||
922 | sys_vgui(".x%x.c itemconfigure %xBASE%d -outline #%6.6x\n", canvas, x, i, | ||
923 | IEM_GUI_COLOR_SELECTED); | ||
924 | } | ||
925 | sys_vgui(".x%x.c itemconfigure %xLABEL -fill #%6.6x\n", canvas, x, IEM_GUI_COLOR_SELECTED); | ||
926 | } | ||
927 | else | ||
928 | { | ||
929 | for(i=0; i<n; i++) | ||
930 | { | ||
931 | sys_vgui(".x%x.c itemconfigure %xBASE%d -outline #%6.6x\n", canvas, x, i, | ||
932 | IEM_GUI_COLOR_NORMAL); | ||
933 | } | ||
934 | sys_vgui(".x%x.c itemconfigure %xLABEL -fill #%6.6x\n", canvas, x, | ||
935 | x->x_gui.x_lcol); | ||
936 | } | ||
937 | } | ||
938 | |||
939 | void hradio_draw(t_hradio *x, t_glist *glist, int mode) | ||
940 | { | ||
941 | if(mode == IEM_GUI_DRAW_MODE_UPDATE) | ||
942 | hradio_draw_update(x, glist); | ||
943 | else if(mode == IEM_GUI_DRAW_MODE_MOVE) | ||
944 | hradio_draw_move(x, glist); | ||
945 | else if(mode == IEM_GUI_DRAW_MODE_NEW) | ||
946 | hradio_draw_new(x, glist); | ||
947 | else if(mode == IEM_GUI_DRAW_MODE_SELECT) | ||
948 | hradio_draw_select(x, glist); | ||
949 | else if(mode == IEM_GUI_DRAW_MODE_ERASE) | ||
950 | hradio_draw_erase(x, glist); | ||
951 | else if(mode == IEM_GUI_DRAW_MODE_CONFIG) | ||
952 | hradio_draw_config(x, glist); | ||
953 | else if(mode >= IEM_GUI_DRAW_MODE_IO) | ||
954 | hradio_draw_io(x, glist, mode - IEM_GUI_DRAW_MODE_IO); | ||
955 | } | ||
956 | |||
957 | /* ------------------------ hdl widgetbehaviour----------------------------- */ | ||
958 | |||
959 | static void hradio_getrect(t_gobj *z, t_glist *glist, int *xp1, int *yp1, int *xp2, int *yp2) | ||
960 | { | ||
961 | t_hradio *x = (t_hradio *)z; | ||
962 | |||
963 | *xp1 = text_xpix(&x->x_gui.x_obj, glist); | ||
964 | *yp1 = text_ypix(&x->x_gui.x_obj, glist); | ||
965 | *xp2 = *xp1 + x->x_gui.x_w*x->x_number; | ||
966 | *yp2 = *yp1 + x->x_gui.x_h; | ||
967 | } | ||
968 | |||
969 | static void hradio_save(t_gobj *z, t_binbuf *b) | ||
970 | { | ||
971 | t_hradio *x = (t_hradio *)z; | ||
972 | int bflcol[3]; | ||
973 | t_symbol *srl[3]; | ||
974 | |||
975 | iemgui_save(&x->x_gui, srl, bflcol); | ||
976 | binbuf_addv(b, "ssiisiiiisssiiiiiiii", gensym("#X"),gensym("obj"), | ||
977 | (t_int)text_xpix(&x->x_gui.x_obj, x->x_gui.x_glist), | ||
978 | (t_int)text_ypix(&x->x_gui.x_obj, x->x_gui.x_glist), | ||
979 | (pd_class(&x->x_gui.x_obj.ob_pd) == hradio_old_class ? | ||
980 | gensym("hdl") : gensym("hradio")), | ||
981 | x->x_gui.x_w, | ||
982 | x->x_change, iem_symargstoint(&x->x_gui.x_isa), x->x_number, | ||
983 | srl[0], srl[1], srl[2], | ||
984 | x->x_gui.x_ldx, x->x_gui.x_ldy, | ||
985 | iem_fstyletoint(&x->x_gui.x_fsf), x->x_gui.x_fontsize, | ||
986 | bflcol[0], bflcol[1], bflcol[2], x->x_on); | ||
987 | binbuf_addv(b, ";"); | ||
988 | } | ||
989 | |||
990 | static void hradio_properties(t_gobj *z, t_glist *owner) | ||
991 | { | ||
992 | t_hradio *x = (t_hradio *)z; | ||
993 | char buf[800]; | ||
994 | t_symbol *srl[3]; | ||
995 | int hchange=-1; | ||
996 | |||
997 | iemgui_properties(&x->x_gui, srl); | ||
998 | if (pd_class(&x->x_gui.x_obj.ob_pd) == hradio_old_class) | ||
999 | hchange = x->x_change; | ||
1000 | sprintf(buf, "pdtk_iemgui_dialog %%s hradio \ | ||
1001 | ----------dimensions(pix):----------- %d %d size: 0 0 empty \ | ||
1002 | empty 0.0 empty 0.0 empty %d \ | ||
1003 | %d new-only new&old %d %d number: %d \ | ||
1004 | %s %s \ | ||
1005 | %s %d %d \ | ||
1006 | %d %d \ | ||
1007 | %d %d %d\n", | ||
1008 | x->x_gui.x_w, IEM_GUI_MINSIZE, | ||
1009 | 0,/*no_schedule*/ | ||
1010 | hchange, x->x_gui.x_isa.x_loadinit, -1, x->x_number, | ||
1011 | srl[0]->s_name, srl[1]->s_name, | ||
1012 | srl[2]->s_name, x->x_gui.x_ldx, x->x_gui.x_ldy, | ||
1013 | x->x_gui.x_fsf.x_font_style, x->x_gui.x_fontsize, | ||
1014 | 0xffffff & x->x_gui.x_bcol, 0xffffff & x->x_gui.x_fcol, 0xffffff & x->x_gui.x_lcol); | ||
1015 | gfxstub_new(&x->x_gui.x_obj.ob_pd, x, buf); | ||
1016 | } | ||
1017 | |||
1018 | static void hradio_dialog(t_hradio *x, t_symbol *s, int argc, t_atom *argv) | ||
1019 | { | ||
1020 | t_symbol *srl[3]; | ||
1021 | int a = (int)atom_getintarg(0, argc, argv); | ||
1022 | int chg = (int)atom_getintarg(4, argc, argv); | ||
1023 | int num = (int)atom_getintarg(6, argc, argv); | ||
1024 | int sr_flags; | ||
1025 | |||
1026 | if(chg != 0) chg = 1; | ||
1027 | x->x_change = chg; | ||
1028 | sr_flags = iemgui_dialog(&x->x_gui, srl, argc, argv); | ||
1029 | x->x_gui.x_w = iemgui_clip_size(a); | ||
1030 | x->x_gui.x_h = x->x_gui.x_w; | ||
1031 | if(x->x_number != num) | ||
1032 | { | ||
1033 | (*x->x_gui.x_draw)(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_ERASE); | ||
1034 | x->x_number = num; | ||
1035 | if(x->x_on >= x->x_number) | ||
1036 | { | ||
1037 | x->x_on = x->x_number - 1; | ||
1038 | x->x_on_old = x->x_on; | ||
1039 | } | ||
1040 | (*x->x_gui.x_draw)(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_NEW); | ||
1041 | } | ||
1042 | else | ||
1043 | { | ||
1044 | (*x->x_gui.x_draw)(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_CONFIG); | ||
1045 | (*x->x_gui.x_draw)(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_IO + sr_flags); | ||
1046 | (*x->x_gui.x_draw)(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_MOVE); | ||
1047 | canvas_fixlinesfor(glist_getcanvas(x->x_gui.x_glist), (t_text*)x); | ||
1048 | } | ||
1049 | |||
1050 | } | ||
1051 | |||
1052 | static void hradio_set(t_hradio *x, t_floatarg f) | ||
1053 | { | ||
1054 | int i=(int)f; | ||
1055 | int old=x->x_on_old; | ||
1056 | |||
1057 | if(i < 0) | ||
1058 | i = 0; | ||
1059 | if(i >= x->x_number) | ||
1060 | i = x->x_number-1; | ||
1061 | if(x->x_on != x->x_on_old) | ||
1062 | { | ||
1063 | old = x->x_on_old; | ||
1064 | x->x_on_old = x->x_on; | ||
1065 | x->x_on = i; | ||
1066 | (*x->x_gui.x_draw)(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_UPDATE); | ||
1067 | x->x_on_old = old; | ||
1068 | } | ||
1069 | else | ||
1070 | { | ||
1071 | x->x_on = i; | ||
1072 | (*x->x_gui.x_draw)(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_UPDATE); | ||
1073 | } | ||
1074 | } | ||
1075 | |||
1076 | static void hradio_bang(t_hradio *x) | ||
1077 | { | ||
1078 | /* compatibility with earlier "hdial" behavior */ | ||
1079 | if (pd_class(&x->x_gui.x_obj.ob_pd) == hradio_old_class) | ||
1080 | { | ||
1081 | if((x->x_change)&&(x->x_on != x->x_on_old)) | ||
1082 | { | ||
1083 | SETFLOAT(x->x_at, (float)x->x_on_old); | ||
1084 | SETFLOAT(x->x_at+1, 0.0); | ||
1085 | outlet_list(x->x_gui.x_obj.ob_outlet, &s_list, 2, x->x_at); | ||
1086 | if(x->x_gui.x_fsf.x_snd_able && x->x_gui.x_snd->s_thing) | ||
1087 | pd_list(x->x_gui.x_snd->s_thing, &s_list, 2, x->x_at); | ||
1088 | } | ||
1089 | x->x_on_old = x->x_on; | ||
1090 | SETFLOAT(x->x_at, (float)x->x_on); | ||
1091 | SETFLOAT(x->x_at+1, 1.0); | ||
1092 | outlet_list(x->x_gui.x_obj.ob_outlet, &s_list, 2, x->x_at); | ||
1093 | if(x->x_gui.x_fsf.x_snd_able && x->x_gui.x_snd->s_thing) | ||
1094 | pd_list(x->x_gui.x_snd->s_thing, &s_list, 2, x->x_at); | ||
1095 | } | ||
1096 | else | ||
1097 | { | ||
1098 | outlet_float(x->x_gui.x_obj.ob_outlet, x->x_on); | ||
1099 | if(x->x_gui.x_fsf.x_snd_able && x->x_gui.x_snd->s_thing) | ||
1100 | pd_float(x->x_gui.x_snd->s_thing, x->x_on); | ||
1101 | } | ||
1102 | } | ||
1103 | |||
1104 | static void hradio_fout(t_hradio *x, t_floatarg f) | ||
1105 | { | ||
1106 | int i=(int)f; | ||
1107 | |||
1108 | if(i < 0) | ||
1109 | i = 0; | ||
1110 | if(i >= x->x_number) | ||
1111 | i = x->x_number-1; | ||
1112 | |||
1113 | if (pd_class(&x->x_gui.x_obj.ob_pd) == hradio_old_class) | ||
1114 | { | ||
1115 | if((x->x_change)&&(i != x->x_on_old)) | ||
1116 | { | ||
1117 | SETFLOAT(x->x_at, (float)x->x_on_old); | ||
1118 | SETFLOAT(x->x_at+1, 0.0); | ||
1119 | outlet_list(x->x_gui.x_obj.ob_outlet, &s_list, 2, x->x_at); | ||
1120 | if(x->x_gui.x_fsf.x_snd_able && x->x_gui.x_snd->s_thing) | ||
1121 | pd_list(x->x_gui.x_snd->s_thing, &s_list, 2, x->x_at); | ||
1122 | } | ||
1123 | if(x->x_on != x->x_on_old) | ||
1124 | x->x_on_old = x->x_on; | ||
1125 | x->x_on = i; | ||
1126 | (*x->x_gui.x_draw)(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_UPDATE); | ||
1127 | x->x_on_old = x->x_on; | ||
1128 | SETFLOAT(x->x_at, (float)x->x_on); | ||
1129 | SETFLOAT(x->x_at+1, 1.0); | ||
1130 | outlet_list(x->x_gui.x_obj.ob_outlet, &s_list, 2, x->x_at); | ||
1131 | if(x->x_gui.x_fsf.x_snd_able && x->x_gui.x_snd->s_thing) | ||
1132 | pd_list(x->x_gui.x_snd->s_thing, &s_list, 2, x->x_at); | ||
1133 | } | ||
1134 | else | ||
1135 | { | ||
1136 | x->x_on_old = x->x_on; | ||
1137 | x->x_on = i; | ||
1138 | (*x->x_gui.x_draw)(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_UPDATE); | ||
1139 | outlet_float(x->x_gui.x_obj.ob_outlet, x->x_on); | ||
1140 | if(x->x_gui.x_fsf.x_snd_able && x->x_gui.x_snd->s_thing) | ||
1141 | pd_float(x->x_gui.x_snd->s_thing, x->x_on); | ||
1142 | } | ||
1143 | } | ||
1144 | |||
1145 | static void hradio_float(t_hradio *x, t_floatarg f) | ||
1146 | { | ||
1147 | int i=(int)f; | ||
1148 | |||
1149 | if(i < 0) | ||
1150 | i = 0; | ||
1151 | if(i >= x->x_number) | ||
1152 | i = x->x_number-1; | ||
1153 | |||
1154 | if (pd_class(&x->x_gui.x_obj.ob_pd) == hradio_old_class) | ||
1155 | { | ||
1156 | /* compatibility with earlier "vdial" behavior */ | ||
1157 | if((x->x_change)&&(i != x->x_on_old)) | ||
1158 | { | ||
1159 | if(x->x_gui.x_fsf.x_put_in2out) | ||
1160 | { | ||
1161 | SETFLOAT(x->x_at, (float)x->x_on_old); | ||
1162 | SETFLOAT(x->x_at+1, 0.0); | ||
1163 | outlet_list(x->x_gui.x_obj.ob_outlet, &s_list, 2, x->x_at); | ||
1164 | if(x->x_gui.x_fsf.x_snd_able && x->x_gui.x_snd->s_thing) | ||
1165 | pd_list(x->x_gui.x_snd->s_thing, &s_list, 2, x->x_at); | ||
1166 | } | ||
1167 | } | ||
1168 | if(x->x_on != x->x_on_old) | ||
1169 | x->x_on_old = x->x_on; | ||
1170 | x->x_on = i; | ||
1171 | (*x->x_gui.x_draw)(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_UPDATE); | ||
1172 | x->x_on_old = x->x_on; | ||
1173 | if(x->x_gui.x_fsf.x_put_in2out) | ||
1174 | { | ||
1175 | SETFLOAT(x->x_at, (float)x->x_on); | ||
1176 | SETFLOAT(x->x_at+1, 1.0); | ||
1177 | outlet_list(x->x_gui.x_obj.ob_outlet, &s_list, 2, x->x_at); | ||
1178 | if(x->x_gui.x_fsf.x_snd_able && x->x_gui.x_snd->s_thing) | ||
1179 | pd_list(x->x_gui.x_snd->s_thing, &s_list, 2, x->x_at); | ||
1180 | } | ||
1181 | } | ||
1182 | else | ||
1183 | { | ||
1184 | x->x_on_old = x->x_on; | ||
1185 | x->x_on = i; | ||
1186 | (*x->x_gui.x_draw)(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_UPDATE); | ||
1187 | if (x->x_gui.x_fsf.x_put_in2out) | ||
1188 | { | ||
1189 | outlet_float(x->x_gui.x_obj.ob_outlet, x->x_on); | ||
1190 | if(x->x_gui.x_fsf.x_snd_able && x->x_gui.x_snd->s_thing) | ||
1191 | pd_float(x->x_gui.x_snd->s_thing, x->x_on); | ||
1192 | } | ||
1193 | } | ||
1194 | } | ||
1195 | |||
1196 | static void hradio_click(t_hradio *x, t_floatarg xpos, t_floatarg ypos, t_floatarg shift, t_floatarg ctrl, t_floatarg alt) | ||
1197 | { | ||
1198 | int xx = (int)xpos - (int)text_xpix(&x->x_gui.x_obj, x->x_gui.x_glist); | ||
1199 | |||
1200 | hradio_fout(x, (float)(xx / x->x_gui.x_w)); | ||
1201 | } | ||
1202 | |||
1203 | static int hradio_newclick(t_gobj *z, struct _glist *glist, int xpix, int ypix, int shift, int alt, int dbl, int doit) | ||
1204 | { | ||
1205 | if(doit) | ||
1206 | hradio_click((t_hradio *)z, (t_floatarg)xpix, (t_floatarg)ypix, (t_floatarg)shift, 0, (t_floatarg)alt); | ||
1207 | return (1); | ||
1208 | } | ||
1209 | |||
1210 | static void hradio_loadbang(t_hradio *x) | ||
1211 | { | ||
1212 | if(!sys_noloadbang && x->x_gui.x_isa.x_loadinit) | ||
1213 | hradio_bang(x); | ||
1214 | } | ||
1215 | |||
1216 | static void hradio_number(t_hradio *x, t_floatarg num) | ||
1217 | { | ||
1218 | int n=(int)num; | ||
1219 | |||
1220 | if(n < 1) | ||
1221 | n = 1; | ||
1222 | if(n > IEM_RADIO_MAX) | ||
1223 | n = IEM_RADIO_MAX; | ||
1224 | if(n != x->x_number) | ||
1225 | { | ||
1226 | (*x->x_gui.x_draw)(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_ERASE); | ||
1227 | x->x_number = n; | ||
1228 | if(x->x_on >= x->x_number) | ||
1229 | x->x_on = x->x_number - 1; | ||
1230 | x->x_on_old = x->x_on; | ||
1231 | (*x->x_gui.x_draw)(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_NEW); | ||
1232 | } | ||
1233 | } | ||
1234 | |||
1235 | static void hradio_size(t_hradio *x, t_symbol *s, int ac, t_atom *av) | ||
1236 | { | ||
1237 | x->x_gui.x_w = iemgui_clip_size((int)atom_getintarg(0, ac, av)); | ||
1238 | x->x_gui.x_h = x->x_gui.x_w; | ||
1239 | iemgui_size((void *)x, &x->x_gui); | ||
1240 | } | ||
1241 | |||
1242 | static void hradio_delta(t_hradio *x, t_symbol *s, int ac, t_atom *av) | ||
1243 | {iemgui_delta((void *)x, &x->x_gui, s, ac, av);} | ||
1244 | |||
1245 | static void hradio_pos(t_hradio *x, t_symbol *s, int ac, t_atom *av) | ||
1246 | {iemgui_pos((void *)x, &x->x_gui, s, ac, av);} | ||
1247 | |||
1248 | static void hradio_color(t_hradio *x, t_symbol *s, int ac, t_atom *av) | ||
1249 | {iemgui_color((void *)x, &x->x_gui, s, ac, av);} | ||
1250 | |||
1251 | static void hradio_send(t_hradio *x, t_symbol *s) | ||
1252 | {iemgui_send(x, &x->x_gui, s);} | ||
1253 | |||
1254 | static void hradio_receive(t_hradio *x, t_symbol *s) | ||
1255 | {iemgui_receive(x, &x->x_gui, s);} | ||
1256 | |||
1257 | static void hradio_label(t_hradio *x, t_symbol *s) | ||
1258 | {iemgui_label((void *)x, &x->x_gui, s);} | ||
1259 | |||
1260 | static void hradio_label_pos(t_hradio *x, t_symbol *s, int ac, t_atom *av) | ||
1261 | {iemgui_label_pos((void *)x, &x->x_gui, s, ac, av);} | ||
1262 | |||
1263 | static void hradio_label_font(t_hradio *x, t_symbol *s, int ac, t_atom *av) | ||
1264 | {iemgui_label_font((void *)x, &x->x_gui, s, ac, av);} | ||
1265 | |||
1266 | static void hradio_init(t_hradio *x, t_floatarg f) | ||
1267 | { | ||
1268 | x->x_gui.x_isa.x_loadinit = (f==0.0)?0:1; | ||
1269 | } | ||
1270 | |||
1271 | static void hradio_double_change(t_hradio *x) | ||
1272 | {x->x_change = 1;} | ||
1273 | |||
1274 | static void hradio_single_change(t_hradio *x) | ||
1275 | {x->x_change = 0;} | ||
1276 | |||
1277 | static void *hradio_donew(t_symbol *s, int argc, t_atom *argv, int old) | ||
1278 | { | ||
1279 | t_hradio *x = (t_hradio *)pd_new(old? hradio_old_class : hradio_class); | ||
1280 | int bflcol[]={-262144, -1, -1}; | ||
1281 | int a=IEM_GUI_DEFAULTSIZE, on=0, f=0; | ||
1282 | int ldx=0, ldy=-6, chg=1, num=8; | ||
1283 | int fs=8; | ||
1284 | int ftbreak=IEM_BNG_DEFAULTBREAKFLASHTIME, fthold=IEM_BNG_DEFAULTHOLDFLASHTIME; | ||
1285 | char str[144]; | ||
1286 | |||
1287 | iem_inttosymargs(&x->x_gui.x_isa, 0); | ||
1288 | iem_inttofstyle(&x->x_gui.x_fsf, 0); | ||
1289 | |||
1290 | if((argc == 15)&&IS_A_FLOAT(argv,0)&&IS_A_FLOAT(argv,1)&&IS_A_FLOAT(argv,2) | ||
1291 | &&IS_A_FLOAT(argv,3) | ||
1292 | &&(IS_A_SYMBOL(argv,4)||IS_A_FLOAT(argv,4)) | ||
1293 | &&(IS_A_SYMBOL(argv,5)||IS_A_FLOAT(argv,5)) | ||
1294 | &&(IS_A_SYMBOL(argv,6)||IS_A_FLOAT(argv,6)) | ||
1295 | &&IS_A_FLOAT(argv,7)&&IS_A_FLOAT(argv,8) | ||
1296 | &&IS_A_FLOAT(argv,9)&&IS_A_FLOAT(argv,10)&&IS_A_FLOAT(argv,11) | ||
1297 | &&IS_A_FLOAT(argv,12)&&IS_A_FLOAT(argv,13)&&IS_A_FLOAT(argv,14)) | ||
1298 | { | ||
1299 | a = (int)atom_getintarg(0, argc, argv); | ||
1300 | chg = (int)atom_getintarg(1, argc, argv); | ||
1301 | iem_inttosymargs(&x->x_gui.x_isa, atom_getintarg(2, argc, argv)); | ||
1302 | num = (int)atom_getintarg(3, argc, argv); | ||
1303 | iemgui_new_getnames(&x->x_gui, 4, argv); | ||
1304 | ldx = (int)atom_getintarg(7, argc, argv); | ||
1305 | ldy = (int)atom_getintarg(8, argc, argv); | ||
1306 | iem_inttofstyle(&x->x_gui.x_fsf, atom_getintarg(9, argc, argv)); | ||
1307 | fs = (int)atom_getintarg(10, argc, argv); | ||
1308 | bflcol[0] = (int)atom_getintarg(11, argc, argv); | ||
1309 | bflcol[1] = (int)atom_getintarg(12, argc, argv); | ||
1310 | bflcol[2] = (int)atom_getintarg(13, argc, argv); | ||
1311 | on = (int)atom_getintarg(14, argc, argv); | ||
1312 | } | ||
1313 | else iemgui_new_getnames(&x->x_gui, 4, 0); | ||
1314 | x->x_gui.x_draw = (t_iemfunptr)hradio_draw; | ||
1315 | x->x_gui.x_fsf.x_snd_able = 1; | ||
1316 | x->x_gui.x_fsf.x_rcv_able = 1; | ||
1317 | x->x_gui.x_glist = (t_glist *)canvas_getcurrent(); | ||
1318 | if (!strcmp(x->x_gui.x_snd->s_name, "empty")) | ||
1319 | x->x_gui.x_fsf.x_snd_able = 0; | ||
1320 | if (!strcmp(x->x_gui.x_rcv->s_name, "empty")) | ||
1321 | x->x_gui.x_fsf.x_rcv_able = 0; | ||
1322 | if(x->x_gui.x_fsf.x_font_style == 1) strcpy(x->x_gui.x_font, "helvetica"); | ||
1323 | else if(x->x_gui.x_fsf.x_font_style == 2) strcpy(x->x_gui.x_font, "times"); | ||
1324 | else { x->x_gui.x_fsf.x_font_style = 0; | ||
1325 | strcpy(x->x_gui.x_font, "courier"); } | ||
1326 | if(num < 1) | ||
1327 | num = 1; | ||
1328 | if(num > IEM_RADIO_MAX) | ||
1329 | num = IEM_RADIO_MAX; | ||
1330 | x->x_number = num; | ||
1331 | if(on < 0) | ||
1332 | on = 0; | ||
1333 | if(on >= x->x_number) | ||
1334 | on = x->x_number - 1; | ||
1335 | if(x->x_gui.x_isa.x_loadinit) | ||
1336 | x->x_on = on; | ||
1337 | else | ||
1338 | x->x_on = 0; | ||
1339 | x->x_on_old = x->x_on; | ||
1340 | x->x_change = (chg==0)?0:1; | ||
1341 | if (x->x_gui.x_fsf.x_rcv_able) | ||
1342 | pd_bind(&x->x_gui.x_obj.ob_pd, x->x_gui.x_rcv); | ||
1343 | x->x_gui.x_ldx = ldx; | ||
1344 | x->x_gui.x_ldy = ldy; | ||
1345 | if(fs < 4) | ||
1346 | fs = 4; | ||
1347 | x->x_gui.x_fontsize = fs; | ||
1348 | x->x_gui.x_w = iemgui_clip_size(a); | ||
1349 | x->x_gui.x_h = x->x_gui.x_w; | ||
1350 | iemgui_verify_snd_ne_rcv(&x->x_gui); | ||
1351 | iemgui_all_colfromload(&x->x_gui, bflcol); | ||
1352 | outlet_new(&x->x_gui.x_obj, &s_list); | ||
1353 | return (x); | ||
1354 | } | ||
1355 | |||
1356 | static void *hradio_new(t_symbol *s, int argc, t_atom *argv) | ||
1357 | { | ||
1358 | return (hradio_donew(s, argc, argv, 0)); | ||
1359 | } | ||
1360 | |||
1361 | static void *hdial_new(t_symbol *s, int argc, t_atom *argv) | ||
1362 | { | ||
1363 | return (hradio_donew(s, argc, argv, 1)); | ||
1364 | } | ||
1365 | |||
1366 | static void hradio_ff(t_hradio *x) | ||
1367 | { | ||
1368 | if(x->x_gui.x_fsf.x_rcv_able) | ||
1369 | pd_unbind(&x->x_gui.x_obj.ob_pd, x->x_gui.x_rcv); | ||
1370 | gfxstub_deleteforkey(x); | ||
1371 | } | ||
1372 | |||
1373 | void g_hradio_setup(void) | ||
1374 | { | ||
1375 | hradio_class = class_new(gensym("hradio"), (t_newmethod)hradio_new, | ||
1376 | (t_method)hradio_ff, sizeof(t_hradio), 0, A_GIMME, 0); | ||
1377 | class_addbang(hradio_class, hradio_bang); | ||
1378 | class_addfloat(hradio_class, hradio_float); | ||
1379 | class_addmethod(hradio_class, (t_method)hradio_click, gensym("click"), | ||
1380 | A_FLOAT, A_FLOAT, A_FLOAT, A_FLOAT, A_FLOAT, 0); | ||
1381 | class_addmethod(hradio_class, (t_method)hradio_dialog, gensym("dialog"), | ||
1382 | A_GIMME, 0); | ||
1383 | class_addmethod(hradio_class, (t_method)hradio_loadbang, | ||
1384 | gensym("loadbang"), 0); | ||
1385 | class_addmethod(hradio_class, (t_method)hradio_set, | ||
1386 | gensym("set"), A_FLOAT, 0); | ||
1387 | class_addmethod(hradio_class, (t_method)hradio_size, | ||
1388 | gensym("size"), A_GIMME, 0); | ||
1389 | class_addmethod(hradio_class, (t_method)hradio_delta, | ||
1390 | gensym("delta"), A_GIMME, 0); | ||
1391 | class_addmethod(hradio_class, (t_method)hradio_pos, | ||
1392 | gensym("pos"), A_GIMME, 0); | ||
1393 | class_addmethod(hradio_class, (t_method)hradio_color, | ||
1394 | gensym("color"), A_GIMME, 0); | ||
1395 | class_addmethod(hradio_class, (t_method)hradio_send, | ||
1396 | gensym("send"), A_DEFSYM, 0); | ||
1397 | class_addmethod(hradio_class, (t_method)hradio_receive, | ||
1398 | gensym("receive"), A_DEFSYM, 0); | ||
1399 | class_addmethod(hradio_class, (t_method)hradio_label, | ||
1400 | gensym("label"), A_DEFSYM, 0); | ||
1401 | class_addmethod(hradio_class, (t_method)hradio_label_pos, | ||
1402 | gensym("label_pos"), A_GIMME, 0); | ||
1403 | class_addmethod(hradio_class, (t_method)hradio_label_font, | ||
1404 | gensym("label_font"), A_GIMME, 0); | ||
1405 | class_addmethod(hradio_class, (t_method)hradio_init, | ||
1406 | gensym("init"), A_FLOAT, 0); | ||
1407 | class_addmethod(hradio_class, (t_method)hradio_number, | ||
1408 | gensym("number"), A_FLOAT, 0); | ||
1409 | class_addmethod(hradio_class, (t_method)hradio_single_change, | ||
1410 | gensym("single_change"), 0); | ||
1411 | class_addmethod(hradio_class, (t_method)hradio_double_change, | ||
1412 | gensym("double_change"), 0); | ||
1413 | hradio_widgetbehavior.w_getrectfn = hradio_getrect; | ||
1414 | hradio_widgetbehavior.w_displacefn = iemgui_displace; | ||
1415 | hradio_widgetbehavior.w_selectfn = iemgui_select; | ||
1416 | hradio_widgetbehavior.w_activatefn = NULL; | ||
1417 | hradio_widgetbehavior.w_deletefn = iemgui_delete; | ||
1418 | hradio_widgetbehavior.w_visfn = iemgui_vis; | ||
1419 | hradio_widgetbehavior.w_clickfn = hradio_newclick; | ||
1420 | class_setwidget(hradio_class, &hradio_widgetbehavior); | ||
1421 | class_sethelpsymbol(hradio_class, gensym("hradio")); | ||
1422 | class_setsavefn(hradio_class, hradio_save); | ||
1423 | class_setpropertiesfn(hradio_class, hradio_properties); | ||
1424 | |||
1425 | /*obsolete version (0.34-0.35) */ | ||
1426 | hradio_old_class = class_new(gensym("hdl"), (t_newmethod)hdial_new, | ||
1427 | (t_method)hradio_ff, sizeof(t_hradio), 0, A_GIMME, 0); | ||
1428 | class_addcreator((t_newmethod)hradio_new, gensym("rdb"), A_GIMME, 0); | ||
1429 | class_addcreator((t_newmethod)hradio_new, gensym("radiobut"), A_GIMME, 0); | ||
1430 | class_addcreator((t_newmethod)hradio_new, gensym("radiobutton"), | ||
1431 | A_GIMME, 0); | ||
1432 | class_addbang(hradio_old_class, hradio_bang); | ||
1433 | class_addfloat(hradio_old_class, hradio_float); | ||
1434 | class_addmethod(hradio_old_class, (t_method)hradio_click, gensym("click"), | ||
1435 | A_FLOAT, A_FLOAT, A_FLOAT, A_FLOAT, A_FLOAT, 0); | ||
1436 | class_addmethod(hradio_old_class, (t_method)hradio_dialog, gensym("dialog"), | ||
1437 | A_GIMME, 0); | ||
1438 | class_addmethod(hradio_old_class, (t_method)hradio_loadbang, | ||
1439 | gensym("loadbang"), 0); | ||
1440 | class_addmethod(hradio_old_class, (t_method)hradio_set, | ||
1441 | gensym("set"), A_FLOAT, 0); | ||
1442 | class_addmethod(hradio_old_class, (t_method)hradio_size, | ||
1443 | gensym("size"), A_GIMME, 0); | ||
1444 | class_addmethod(hradio_old_class, (t_method)hradio_delta, | ||
1445 | gensym("delta"), A_GIMME, 0); | ||
1446 | class_addmethod(hradio_old_class, (t_method)hradio_pos, | ||
1447 | gensym("pos"), A_GIMME, 0); | ||
1448 | class_addmethod(hradio_old_class, (t_method)hradio_color, | ||
1449 | gensym("color"), A_GIMME, 0); | ||
1450 | class_addmethod(hradio_old_class, (t_method)hradio_send, | ||
1451 | gensym("send"), A_DEFSYM, 0); | ||
1452 | class_addmethod(hradio_old_class, (t_method)hradio_receive, | ||
1453 | gensym("receive"), A_DEFSYM, 0); | ||
1454 | class_addmethod(hradio_old_class, (t_method)hradio_label, | ||
1455 | gensym("label"), A_DEFSYM, 0); | ||
1456 | class_addmethod(hradio_old_class, (t_method)hradio_label_pos, | ||
1457 | gensym("label_pos"), A_GIMME, 0); | ||
1458 | class_addmethod(hradio_old_class, (t_method)hradio_label_font, | ||
1459 | gensym("label_font"), A_GIMME, 0); | ||
1460 | class_addmethod(hradio_old_class, (t_method)hradio_init, | ||
1461 | gensym("init"), A_FLOAT, 0); | ||
1462 | class_addmethod(hradio_old_class, (t_method)hradio_number, | ||
1463 | gensym("number"), A_FLOAT, 0); | ||
1464 | class_addmethod(hradio_old_class, (t_method)hradio_single_change, | ||
1465 | gensym("single_change"), 0); | ||
1466 | class_addmethod(hradio_old_class, (t_method)hradio_double_change, | ||
1467 | gensym("double_change"), 0); | ||
1468 | class_setwidget(hradio_old_class, &hradio_widgetbehavior); | ||
1469 | class_sethelpsymbol(hradio_old_class, gensym("hradio")); | ||
1470 | } | ||