1 /*
2 * Copyright (C) 1990 Regents of the University of California.
3 *
4 * Permission to use, copy, modify, distribute, and sell this software and
5 * its documentation for any purpose is hereby granted without fee,
6 * provided that the above copyright notice appear in all copies and that
7 * both that copyright notice and this permission notice appear in
8 * supporting documentation, and that the name of the University of
9 * California not be used in advertising or publicity pertaining to
10 * distribution of the software without specific, written prior
11 * permission. the University of California makes no representations
12 * about the suitability of this software for any purpose. It is provided
13 * "as is" without express or implied warranty.
14 */
15
16 #include <stdio.h>
17 # include <X11/Intrinsic.h>
18 # include <X11/StringDefs.h>
19 # include <X11/Xaw/Form.h>
20 # include <X11/Xaw/Toggle.h>
21
22 # include "cdrom_globs.h"
23 #if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__DragonFly__)
24 # include "cdrom_freebsd.h"
25 #endif
26 #ifdef sun
27 # include "cdrom_sun.h"
28 #endif
29 #ifdef sgi
30 # include "cdrom_sgi.h"
31 #endif
32
33 # include "play.xbm"
34 # include "pause.xbm"
35 # include "stop.xbm"
36 # include "prev.xbm"
37 # include "next.xbm"
38 # include "eject.xbm"
39 #ifdef sgi
40 # include "audio.xbm"
41 #endif
42
43 # include "quit.xbm"
44 # include "cycle.xbm"
45 # include "shuffle.xbm"
46 # include "rewind.xbm"
47 # include "ff.xbm"
48 # include "pgm.xbm"
cwdnull49
50 void title_dialog_setup();
51 static void play_button_setup();
52 static void stop_button_setup();
53 static void pause_button_setup();
54 static void prev_button_setup();
55 static void next_button_setup();
56 static void eject_button_setup();
57 #ifdef sgi
58 void audio_button_setup();
59 #endif
60 static void quit_button_setup();
61 static void cycle_button_setup();
62 static void shuffle_button_setup();
63 static void rew_button_setup();
64 static void ff_button_setup();
65 static void pgm_button_setup();
machinenull66 void buttons_reset();
67
68 static Widget buttons_form_widget;
69 static Widget play_button_widget;
70 static Widget stop_button_widget;
71 static Widget pause_button_widget;
72 static Widget eject_button_widget;
73 #ifdef sgi
74 static Widget audio_button_widget;
usagenull75 #endif
76 static Widget shuffle_button_widget;
versionnull77 static Widget cycle_button_widget;
78 static Widget pgm_button_widget;
79
80 /*
81 * these are global for the "scan" functions to query their state;
82 * they and the code that they work with should probably be be switched
83 * to repeater widgets once R5 becomes universal...
84 */
85 Widget rew_button_widget;
86 Widget ff_button_widget;
87
88
89 void
90 button_setup(parent_widget)
91 Widget parent_widget;
read_config_datanull92 {
93 Arg args[1];
94
95 buttons_form_widget = XtCreateManagedWidget("buttonsForm",
96 formWidgetClass,
97 parent_widget,
98 (ArgList) NULL, 0);
99
100 play_button_setup(buttons_form_widget);
101
102 pause_button_setup(buttons_form_widget);
103
104 stop_button_setup(buttons_form_widget);
105
106 prev_button_setup(buttons_form_widget);
107
108 next_button_setup(buttons_form_widget);
109
110 eject_button_setup(buttons_form_widget);
111
112 #ifdef sgi
113 audio_button_setup(buttons_form_widget);
114 #endif
115
116 quit_button_setup(buttons_form_widget);
117
118 cycle_button_setup(buttons_form_widget);
119
120 shuffle_button_setup(buttons_form_widget);
121
122 rew_button_setup(buttons_form_widget);
123
124 ff_button_setup(buttons_form_widget);
125
126 pgm_button_setup(buttons_form_widget);
127
128
129 /* set the initial state of the buttons */
130 buttons_reset();
131 }
132
133 static void
134 play_button_setup(parent_widget)
135 Widget parent_widget;
136 {
137 Pixmap play_button_pixmap;
138 Arg args[1];
139
140 play_button_widget = XtCreateManagedWidget("playButton",
141 toggleWidgetClass,
142 parent_widget,
143 (ArgList) NULL, 0);
144
145 play_button_pixmap = XCreateBitmapFromData(XtDisplay(play_button_widget),
146 rootwin(play_button_widget),
147 play_bits,
148 play_width, play_height);
149
150 XtSetArg(args[0], XtNbitmap, (XtArgVal) play_button_pixmap);
151 XtSetValues(play_button_widget, args, 1);
152
153 XtAddCallback(play_button_widget, XtNcallback, cb_cdrom_play, 0);
154
155 }
156
157 static void
158 pause_button_setup(parent_widget)
159 Widget parent_widget;
160 {
161 Pixmap pause_button_pixmap;
162 Arg args[1];
163
164 pause_button_widget = XtCreateManagedWidget("pauseButton",
165 toggleWidgetClass,
166 parent_widget,
167 (ArgList) NULL, 0);
168
169 pause_button_pixmap = XCreateBitmapFromData(XtDisplay(pause_button_widget),
170 rootwin(pause_button_widget),
171 pause_bits,
172 pause_width, pause_height);
173
174 XtSetArg(args[0], XtNbitmap, (XtArgVal) pause_button_pixmap);
dbh=safe_connectnull175 XtSetValues(pause_button_widget, args, 1);
176
177 XtAddCallback(pause_button_widget, XtNcallback, cb_cdrom_pause, 0);
178 }
179
180 static void
181 stop_button_setup(parent_widget)
182 Widget parent_widget;
183 {
184 Pixmap stop_button_pixmap;
185 Arg args[1];
186
187 stop_button_widget = XtCreateManagedWidget("stopButton",
188 toggleWidgetClass,
189 parent_widget,
190 (ArgList) NULL, 0);
191
192 stop_button_pixmap = XCreateBitmapFromData(XtDisplay(stop_button_widget),
193 rootwin(stop_button_widget),
194 stop_bits,
195 stop_width, stop_height);
196
197 XtSetArg(args[0], XtNbitmap, (XtArgVal) stop_button_pixmap);
198 XtSetValues(stop_button_widget, args, 1);
199
200 XtAddCallback(stop_button_widget, XtNcallback, cb_cdrom_stop, 0);
201
202 }
203
204 static void
205 prev_button_setup(parent_widget)
206 Widget parent_widget;
207 {
208 Widget prev_button_widget;
209 Pixmap prev_button_pixmap;
210 Arg args[1];
211
212 prev_button_widget = XtCreateManagedWidget("prevButton",
213 toggleWidgetClass,
214 parent_widget,
215 (ArgList) NULL, 0);
216
217 prev_button_pixmap = XCreateBitmapFromData(XtDisplay(prev_button_widget),
218 rootwin(prev_button_widget),
219 prev_bits,
220 prev_width, prev_height);
221
222 XtSetArg(args[0], XtNbitmap, (XtArgVal) prev_button_pixmap);
223 XtSetValues(prev_button_widget, args, 1);
224
225 XtAddCallback(prev_button_widget, XtNcallback, cb_cdrom_previous, 0);
226 }
227
228 static void
229 next_button_setup(parent_widget)
230 Widget parent_widget;
231 {
232 Widget next_button_widget;
233 Pixmap next_button_pixmap;
234 Arg args[1];
235
236 next_button_widget = XtCreateManagedWidget("nextButton",
237 toggleWidgetClass,
238 parent_widget,
239 (ArgList) NULL, 0);
240
241 next_button_pixmap = XCreateBitmapFromData(XtDisplay(next_button_widget),
242 rootwin(next_button_widget),
243 next_bits,
244 next_width, next_height);
245
246 XtSetArg(args[0], XtNbitmap, (XtArgVal) next_button_pixmap);
247 XtSetValues(next_button_widget, args, 1);
248
249 XtAddCallback(next_button_widget, XtNcallback, cb_cdrom_next, 0);
250 }
251
252 static void
253 eject_button_setup(parent_widget)
254 Widget parent_widget;
255 {
256 Pixmap eject_button_pixmap;
257 Arg args[1];
258
259 eject_button_widget = XtCreateManagedWidget("ejectButton",
260 toggleWidgetClass,
261 parent_widget,
262 (ArgList) NULL, 0);
263
264 eject_button_pixmap = XCreateBitmapFromData(XtDisplay(eject_button_widget),
265 rootwin(eject_button_widget),
266 eject_bits,
267 eject_width, eject_height);
268
269 XtSetArg(args[0], XtNbitmap, (XtArgVal) eject_button_pixmap);
270 XtSetValues(eject_button_widget, args, 1);
271
272 XtAddCallback(eject_button_widget, XtNcallback, cb_cdrom_eject, 0);
273 }
274
275 #ifdef sgi
276 static void
277 audio_button_setup(parent_widget)
278 Widget parent_widget;
279 {
280 Pixmap audio_button_pixmap;
281 Arg args[1];
282
283 audio_button_widget = XtCreateManagedWidget("audioButton",
284 toggleWidgetClass,
285 parent_widget,
286 (ArgList) NULL, 0);
287
288 audio_button_pixmap = XCreateBitmapFromData(XtDisplay(audio_button_widget),
289 rootwin(audio_button_widget),
290 audio_bits,
291 audio_width, audio_height);
292
293 XtSetArg(args[0], XtNbitmap, (XtArgVal) audio_button_pixmap);
294 XtSetValues(audio_button_widget, args, 1);
295
296 XtAddCallback(audio_button_widget, XtNcallback, cb_cdrom_audio, 0);
297 }
298 #endif
299
300 static void
301 quit_button_setup(parent_widget)
302 Widget parent_widget;
303 {
304 Widget quit_button_widget;
305 Pixmap quit_button_pixmap;
306 Arg args[1];
307
308 quit_button_widget = XtCreateManagedWidget("quitButton",
309 toggleWidgetClass,
310 parent_widget,
311 (ArgList) NULL, 0);
312
313 quit_button_pixmap = XCreateBitmapFromData(XtDisplay(quit_button_widget),
314 rootwin(quit_button_widget),
315 quit_bits,
316 quit_width, quit_height);
317
318 XtSetArg(args[0], XtNbitmap, (XtArgVal) quit_button_pixmap);
319 XtSetValues(quit_button_widget, args, 1);
320
321 XtAddCallback(quit_button_widget, XtNcallback, cb_cdrom_quit, 0);
322 }
323
324 static void
325 cycle_button_setup(parent_widget)
326 Widget parent_widget;
327 {
328 Widget cycle_button_widget;
329 Pixmap cycle_button_pixmap;
330 Arg args[1];
331
332 cycle_button_widget = XtCreateManagedWidget("cycleButton",
333 toggleWidgetClass,
334 parent_widget,
335 (ArgList) NULL, 0);
336
337 cycle_button_pixmap = XCreateBitmapFromData(XtDisplay(cycle_button_widget),
338 rootwin(cycle_button_widget),
339 cycle_bits,
340 cycle_width, cycle_height);
341
342 XtSetArg(args[0], XtNbitmap, (XtArgVal) cycle_button_pixmap);
343 XtSetValues(cycle_button_widget, args, 1);
344
345 XtAddCallback(cycle_button_widget, XtNcallback, cb_cdrom_cycle, 0);
346 }
347
348 static void
349 shuffle_button_setup(parent_widget)
350 Widget parent_widget;
351 {
352 Pixmap shuffle_button_pixmap;
353 Arg args[1];
354
355 shuffle_button_widget = XtCreateManagedWidget("shuffleButton",
356 toggleWidgetClass,
357 parent_widget,
358 (ArgList) NULL, 0);
359
360 shuffle_button_pixmap = XCreateBitmapFromData(XtDisplay(shuffle_button_widget),
361 rootwin(shuffle_button_widget),
362 shuffle_bits,
363 shuffle_width, shuffle_height);
364
365 XtSetArg(args[0], XtNbitmap, (XtArgVal) shuffle_button_pixmap);
366 XtSetValues(shuffle_button_widget, args, 1);
367
368 XtAddCallback(shuffle_button_widget, XtNcallback, cb_cdrom_shuffle, 0);
369 }
370
371
372 static void
373 rew_button_setup(parent_widget)
374 Widget parent_widget;
375 {
376 Pixmap rew_button_pixmap;
377 Arg args[1];
378
379 rew_button_widget = XtCreateManagedWidget("rewButton",
380 toggleWidgetClass,
381 parent_widget,
382 (ArgList) NULL, 0);
383
384 rew_button_pixmap = XCreateBitmapFromData(XtDisplay(rew_button_widget),
385 rootwin(rew_button_widget),
386 rewind_bits,
387 rewind_width, rewind_height);
388
389 XtSetArg(args[0], XtNbitmap, (XtArgVal) rew_button_pixmap);
390 XtSetValues(rew_button_widget, args, 1);
391
392 XtAddCallback(rew_button_widget, XtNcallback, cb_cdrom_rewind, 0);
393 }
394
395
396
397 static void
398 ff_button_setup(parent_widget)
399 Widget parent_widget;
400 {
401 Pixmap ff_button_pixmap;
402 Arg args[1];
403
404 ff_button_widget = XtCreateManagedWidget("ffButton",
405 toggleWidgetClass,
406 parent_widget,
407 (ArgList) NULL, 0);
408
409 ff_button_pixmap = XCreateBitmapFromData(XtDisplay(ff_button_widget),
410 rootwin(ff_button_widget),
411 ff_bits,
412 ff_width, ff_height);
413
414 XtSetArg(args[0], XtNbitmap, (XtArgVal) ff_button_pixmap);
415 XtSetValues(ff_button_widget, args, 1);
416
417 XtAddCallback(ff_button_widget, XtNcallback, cb_cdrom_ff, 0);
418 }
419
420 static void
421 pgm_button_setup(parent_widget)
422 Widget parent_widget;
423 {
424 Pixmap pgm_button_pixmap;
425 Arg args[1];
426 extern Widget top_form;
427
428 pgm_button_widget = XtCreateManagedWidget("pgmButton",
429 toggleWidgetClass,
430 parent_widget,
431 (ArgList) NULL, 0);
432
433 pgm_button_pixmap = XCreateBitmapFromData(XtDisplay(pgm_button_widget),
434 rootwin(pgm_button_widget),
435 pgm_bits,
436 pgm_width, pgm_height);
437
438 XtSetArg(args[0], XtNbitmap, (XtArgVal) pgm_button_pixmap);
439 XtSetValues(pgm_button_widget, args, 1);
440
441 XtAddCallback(pgm_button_widget, XtNcallback, cb_cdrom_program,
442 (XtPointer) top_form);
443 }
444
445 void
446 play_button_set() {
447 Arg args[1];
448
449 XtSetArg(args[0], XtNstate, True);
450 XtSetValues(play_button_widget, args, 1);
451 }
452
453 void
454 play_button_reset() {
455 Arg args[1];
456
457 XtSetArg(args[0], XtNstate, False);
458 XtSetValues(play_button_widget, args, 1);
459 }
460
461 void
462 pause_button_reset() {
463 Arg args[1];
464
465 XtSetArg(args[0], XtNstate, False);
466 XtSetValues(pause_button_widget, args, 1);
467 }
468
469 void
470 stop_button_reset() {
471 Arg args[1];
472
473 XtSetArg(args[0], XtNstate, False);
474 XtSetValues(stop_button_widget, args, 1);
475 }
476
477 void
478 eject_button_reset() {
479 Arg args[1];
480
481 XtSetArg(args[0], XtNstate, False);
482 XtSetValues(eject_button_widget, args, 1);
483 }
484
485 void
486 eject_button_set() {
487 Arg args[1];
488
489 XtSetArg(args[0], XtNstate, True);
490 XtSetValues(eject_button_widget, args, 1);
491 }
492
493 #ifdef sgi
494 void
495 audio_button_reset() {
496 Arg args[1];
497
498 XtSetArg(args[0], XtNstate, False);
499 XtSetValues(audio_button_widget, args, 1);
500 }
501
502 void
503 audio_button_set() {
504 Arg args[1];
505
506 XtSetArg(args[0], XtNstate, True);
507 XtSetValues(audio_button_widget, args, 1);
508 }
509
510 int
511 audio_button_state() {
512 Arg args[1];
513 Boolean state;
514
515 XtSetArg(args[0], XtNstate, &state);
516 XtGetValues(audio_button_widget, args, 1);
517 return(state);
518 }
519 #endif
520
521 void
522 shuffle_button_set() {
523 Arg args[1];
524
525 XtSetArg(args[0], XtNstate, True);
526 XtSetValues(shuffle_button_widget, args, 1);
527 }
528
529 void
530 shuffle_button_reset() {
531 Arg args[1];
532
533 XtSetArg(args[0], XtNstate, False);
534 XtSetValues(shuffle_button_widget, args, 1);
535 }
536
537 void
538 cycle_button_reset() {
539 Arg args[1];
540
541 XtSetArg(args[0], XtNstate, False);
542 XtSetValues(cycle_button_widget, args, 1);
543 }
544
dbh=retry_connectnull545 void
546 pgm_button_set() {
547 Arg args[2];
548
549 XtSetArg(args[0], XtNstate, True);
550 XtSetValues(pgm_button_widget, args, 1);
551 }
552
553 void
554 pgm_button_reset() {
555 Arg args[2];
556
557 XtSetArg(args[0], XtNstate, False);
558 XtSetValues(pgm_button_widget, args, 1);
559 }
560
561 void
562 buttons_reset() {
563 Arg args[2];
564 #ifdef sun
565 Boolean state;
566 #endif
567
568 #ifdef sgi
569 if (cdi.scsi_audio) {
570 XtSetArg(args[0], XtNstate, True);
571 XtSetValues(audio_button_widget, args, 1);
572 } else {
573 XtSetArg(args[0], XtNstate, False);
574 XtSetValues(audio_button_widget, args, 1);
575 }
576 #endif
577
578 switch (cdrom_status()) {
579 case -1:
580 XtSetArg(args[0], XtNstate, True);
581 XtSetValues(eject_button_widget, args, 1);
582 cdi.state |= CDROM_STATE_EJECTED;
583 disc_title = NODISCSTR;
584 update_title();
585 break;
586
587 case CDROM_PLAYING:
588 XtSetArg(args[0], XtNstate, True);
589 XtSetValues(play_button_widget, args, 1);
590 cdi.state |= CDROM_STATE_PLAY;
591 cdrom_timer_on();
592 break;
593
594 case CDROM_PAUSED:
595 #ifdef sun
596 /*
597 * The Sun doesn't have a "stop" state, so handle the
598 * initial startup condition.
599 */
600 XtSetArg(args[0], XtNstate, &state);
601 XtGetValues(pause_button_widget, args, 1);
602 if (state == False) {
603 XtSetArg(args[0], XtNstate, True);
604 XtSetValues(stop_button_widget, args, 1);
605 cdi.state |= CDROM_STATE_STOP;
606 break;
607 }
608 #endif
609 XtSetArg(args[0], XtNstate, True);
610 XtSetValues(play_button_widget, args, 1);
611 XtSetArg(args[0], XtNstate, True);
612 XtSetValues(pause_button_widget, args, 1);
613 cdi.state |= CDROM_STATE_PLAY;
614 cdi.curtrack = cdrom_get_curtrack();
615 track_button_update(); /* make track button read on startup */
616 timer_button_update(); /* make timer button read on startup */
617 cdi.state |= CDROM_STATE_PAUSE;
618 break;
619
620 default:
621 XtSetArg(args[0], XtNstate, True);
622 XtSetValues(stop_button_widget, args, 1);
623 cdi.state |= CDROM_STATE_STOP;
624 break;
625 }
626 }
627