home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / x / volume21 / xmcd / part11 < prev    next >
Encoding:
Text File  |  1993-12-19  |  65.7 KB  |  3,078 lines

  1. Newsgroups: comp.sources.x
  2. From: ti@bazooka.amb.org (Ti Kan)
  3. Subject: v21i073:  xmcd - X11/Motif CD audio player, Part11/13
  4. Message-ID: <1993Dec19.194052.24891@sparky.sterling.com>
  5. X-Md4-Signature: 80911febf40a82dcc5daaa607f213fc0
  6. Sender: chris@sparky.sterling.com (Chris Olson)
  7. Organization: Sterling Software
  8. Date: Sun, 19 Dec 1993 19:40:52 GMT
  9. Approved: chris@sterling.com
  10.  
  11. Submitted-by: ti@bazooka.amb.org (Ti Kan)
  12. Posting-number: Volume 21, Issue 73
  13. Archive-name: xmcd/part11
  14. Environment: X11, OSF/Motif
  15.  
  16. #! /bin/sh
  17. # This is a shell archive.  Remove anything before this line, then unpack
  18. # it by saving it into a file and typing "sh file".  To overwrite existing
  19. # files, type "sh file -c".  You can also feed this as standard input via
  20. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  21. # will see the following message at the end:
  22. #        "End of archive 11 (of 13)."
  23. # Contents:  widget.c bitmaps bitmaps/Imakefile
  24. # Wrapped by ti@bazooka on Mon Nov  8 10:35:24 1993
  25. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  26. if test -f 'widget.c' -a "${1}" != "-c" ; then 
  27.   echo shar: Will not clobber existing file \"'widget.c'\"
  28. else
  29. echo shar: Extracting \"'widget.c'\" \(60957 characters\)
  30. sed "s/^X//" >'widget.c' <<'END_OF_FILE'
  31. X/*
  32. X *   xmcd - Motif(tm) CD Audio Player
  33. X *
  34. X *   Copyright (C) 1993  Ti Kan
  35. X *   E-mail: ti@amb.org
  36. X *
  37. X *   This program is free software; you can redistribute it and/or modify
  38. X *   it under the terms of the GNU General Public License as published by
  39. X *   the Free Software Foundation; either version 2 of the License, or
  40. X *   (at your option) any later version.
  41. X *
  42. X *   This program is distributed in the hope that it will be useful,
  43. X *   but WITHOUT ANY WARRANTY; without even the implied warranty of
  44. X *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  45. X *   GNU General Public License for more details.
  46. X *
  47. X *   You should have received a copy of the GNU General Public License
  48. X *   along with this program; if not, write to the Free Software
  49. X *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  50. X *
  51. X */
  52. X#ifndef LINT
  53. Xstatic char *_widget_c_ident_ = "@(#)widget.c    1.88 93/09/28";
  54. X#endif
  55. X
  56. X#include <Xm/Xm.h>
  57. X#include <Xm/Protocols.h>
  58. X#include <Xm/Form.h>
  59. X#include <Xm/Frame.h>
  60. X#include <Xm/Label.h>
  61. X#include <Xm/PushB.h>
  62. X#include <Xm/ToggleB.h>
  63. X#include <Xm/Scale.h>
  64. X#include <Xm/MessageB.h>
  65. X#include <Xm/Separator.h>
  66. X#include <Xm/Text.h>
  67. X#include <Xm/List.h>
  68. X
  69. X#include "xmcd.h"
  70. X#include "patchlevel.h"
  71. X#include "dbprog.h"
  72. X#include "cdfunc.h"
  73. X#include "cdlib.h"
  74. X#include "widget.h"
  75. X#include "geometry.h"
  76. X#include "help.h"
  77. X#include "hotkey.h"
  78. X
  79. X#include "bitmaps/btnlbl.xbm"
  80. X#include "bitmaps/lock.xbm"
  81. X#include "bitmaps/repeat.xbm"
  82. X#include "bitmaps/shuffle.xbm"
  83. X#include "bitmaps/eject.xbm"
  84. X#include "bitmaps/poweroff.xbm"
  85. X#include "bitmaps/dbprog.xbm"
  86. X#include "bitmaps/help.xbm"
  87. X#include "bitmaps/time.xbm"
  88. X#include "bitmaps/ab.xbm"
  89. X#include "bitmaps/sample.xbm"
  90. X#include "bitmaps/keypad.xbm"
  91. X#include "bitmaps/playpaus.xbm"
  92. X#include "bitmaps/stop.xbm"
  93. X#include "bitmaps/prevtrk.xbm"
  94. X#include "bitmaps/nexttrk.xbm"
  95. X#include "bitmaps/previdx.xbm"
  96. X#include "bitmaps/nextidx.xbm"
  97. X#include "bitmaps/rew.xbm"
  98. X#include "bitmaps/ff.xbm"
  99. X#include "bitmaps/logo.xbm"
  100. X#include "bitmaps/xmcd.xbm"
  101. X
  102. X
  103. Xextern widgets_t    widgets;
  104. XSTATIC Atom        delw;
  105. XSTATIC XtCallbackRec    chkbox_cblist[] = {
  106. X    { (XtCallbackProc) cd_checkbox,        NULL },
  107. X    { (XtCallbackProc) NULL,        NULL },
  108. X};
  109. XSTATIC    XtCallbackRec    radbox_cblist[] = {
  110. X    { (XtCallbackProc) dbprog_timedpy,    NULL },
  111. X    { (XtCallbackProc) NULL,        NULL },
  112. X};
  113. XSTATIC    XtCallbackRec    help_cblist[] = {
  114. X    { (XtCallbackProc) cd_help_popup,    NULL },
  115. X    { (XtCallbackProc) NULL,        NULL },
  116. X};
  117. X
  118. X
  119. X/*
  120. X * Action routines
  121. X */
  122. X
  123. X/*
  124. X * focuschg
  125. X *    Widget action routine to handle keyboard focus change events
  126. X *    This is used to change the label color of widgets in the
  127. X *    main window.
  128. X */
  129. X/*ARGSUSED*/
  130. XSTATIC void
  131. Xfocuschg(Widget w, XEvent *ev, String *args, Cardinal *num_args)
  132. X{
  133. X    Widget    action_widget;
  134. X    Boolean    cont;
  135. X
  136. X    if ((int) *num_args != 1)
  137. X        return;    /* Error: should have one arg */
  138. X
  139. X    action_widget = XtNameToWidget(widgets.main.form, args[0]);
  140. X    if (action_widget == NULL)
  141. X        return;    /* Can't find widget */
  142. X
  143. X    cd_btn_focus_chg(action_widget, NULL, ev, &cont);
  144. X}
  145. X
  146. X
  147. X/*
  148. X * mainmap
  149. X *    Widget actin routine to handle the map and unmap events
  150. X *    on the main window.  This is used to perform certain
  151. X *    optimizations when the user iconifies the application.
  152. X */
  153. X/*ARGSUSED*/
  154. XSTATIC void
  155. Xmainmap(Widget w, XEvent *ev, String *args, Cardinal *num_args)
  156. X{
  157. X    curstat_t    *s = curstat_addr();
  158. X
  159. X    if (w != widgets.toplevel)
  160. X        return;
  161. X
  162. X    if (ev->type == MapNotify)
  163. X        cd_icon(s, FALSE);
  164. X    else if (ev->type == UnmapNotify)
  165. X        cd_icon(s, TRUE);
  166. X}
  167. X
  168. X
  169. X/*
  170. X * Widget-related functions
  171. X */
  172. X
  173. X/*
  174. X * bm_to_px
  175. X *    Convert a bitmap into a pixmap.
  176. X *
  177. X * Args:
  178. X *    w - A widget the pixmap should be associated with
  179. X *    bits - Pointer to the raw bitmap data
  180. X *    width, height - The resultant pixmap dimensions
  181. X *    depth - The depth of the desired pixmap
  182. X *    mode - The desired color characteristics of the pixmap
  183. X *        BM_PX_BW    foreground: black, background: white
  184. X *        BM_PX_BWREV     foreground: white, background: black
  185. X *        BM_PX_WHITE     foreground: white, background: bg of w
  186. X *        BM_PX_BLACK     foreground: black, background: bg of w
  187. X *        BM_PX_HIGHLIGHT    foreground: hl of w, background: bg of w
  188. X *        BM_PX_NORMAL    foreground: fg of w, background: bg of w
  189. X *
  190. X * Return:
  191. X *    The pixmap ID, or NULL if failure.
  192. X */
  193. XPixmap
  194. Xbm_to_px(
  195. X    Widget w,
  196. X    void *bits,
  197. X    int width,
  198. X    int height,
  199. X    int depth,
  200. X    int mode
  201. X)
  202. X{
  203. X    Display        *display = XtDisplay(w);
  204. X    Window        window     = XtWindow(w);
  205. X    int        screen     = DefaultScreen(display);
  206. X    GC        pixmap_gc;
  207. X    XGCValues    val;
  208. X    Pixmap        tmp_bitmap;
  209. X    static Pixmap    ret_pixmap;
  210. X
  211. X    tmp_bitmap = XCreateBitmapFromData(display, window,
  212. X                       (char *) bits, width, height);
  213. X    if (tmp_bitmap == (Pixmap) NULL)
  214. X        return((Pixmap) NULL);
  215. X
  216. X    if (depth == 1) {
  217. X        ret_pixmap = tmp_bitmap;
  218. X        return(ret_pixmap);
  219. X    }
  220. X        
  221. X    /* Create pixmap with depth */
  222. X    ret_pixmap = XCreatePixmap(display, window, width, height, depth);
  223. X    if (ret_pixmap == (Pixmap) NULL)
  224. X        return((Pixmap) NULL);
  225. X
  226. X    /* Allocate colors for pixmap if on color screen */
  227. X    if (DisplayCells(display, screen) > 2) {
  228. X        /* Get pixmap color configuration */
  229. X        switch (mode) {
  230. X        case BM_PX_BW:
  231. X            val.foreground = BlackPixel(display, screen);
  232. X            val.background = WhitePixel(display, screen);
  233. X            break;
  234. X
  235. X        case BM_PX_BWREV:
  236. X            val.foreground = WhitePixel(display, screen);
  237. X            val.background = BlackPixel(display, screen);
  238. X            break;
  239. X
  240. X        case BM_PX_WHITE:
  241. X            val.foreground = WhitePixel(display, screen);
  242. X            XtVaGetValues(w,
  243. X                XmNbackground, &val.background,
  244. X                NULL
  245. X            );
  246. X            break;
  247. X
  248. X        case BM_PX_BLACK:
  249. X            val.foreground = BlackPixel(display, screen);
  250. X            XtVaGetValues(w,
  251. X                XmNbackground, &val.background,
  252. X                NULL
  253. X            );
  254. X            break;
  255. X
  256. X        case BM_PX_HIGHLIGHT:
  257. X            XtVaGetValues(w,
  258. X                XmNhighlightColor, &val.foreground,
  259. X                XmNbackground, &val.background,
  260. X                NULL
  261. X            );
  262. X            break;
  263. X
  264. X        case BM_PX_NORMAL:
  265. X        default:
  266. X            XtVaGetValues(w,
  267. X                XmNforeground, &val.foreground,
  268. X                XmNbackground, &val.background,
  269. X                NULL
  270. X            );
  271. X            break;
  272. X        }
  273. X
  274. X        /* Create GC for pixmap */
  275. X        pixmap_gc = XCreateGC(display, window,
  276. X                    GCForeground | GCBackground, &val);
  277. X    }
  278. X    else
  279. X        pixmap_gc = DefaultGC(display, screen);
  280. X        
  281. X    /* Copy bitmap into pixmap */
  282. X    XCopyPlane(display, tmp_bitmap, ret_pixmap, pixmap_gc,
  283. X           0, 0, width, height, 0, 0, 1);
  284. X
  285. X    /* No need for the bitmap any more, so free it */
  286. X    XFreePixmap(display, tmp_bitmap);
  287. X
  288. X    return(ret_pixmap);
  289. X}
  290. X
  291. X
  292. X/*
  293. X * create_main_widgets
  294. X *    Create all widgets in the main window.
  295. X *
  296. X * Args:
  297. X *    m - Pointer to the main widgets placeholder structure.
  298. X *
  299. X * Return:
  300. X *    Nothing.
  301. X */
  302. XSTATIC void
  303. Xcreate_main_widgets(widgets_t *m)
  304. X{
  305. X    int        i;
  306. X    Arg        arg[10];
  307. X    curstat_t    *s = curstat_addr();
  308. X
  309. X    chkbox_cblist[0].closure = (XtPointer) s;
  310. X
  311. X    /* Create form widget as container */
  312. X    m->main.form = XmCreateForm(
  313. X        m->toplevel,
  314. X        "mainForm",
  315. X        NULL,
  316. X        0
  317. X    );
  318. X
  319. X    /* Create frame for check box */
  320. X    m->main.chkbox_frm = XmCreateFrame(
  321. X        m->main.form,
  322. X        "checkBoxFrame",
  323. X        NULL,
  324. X        0
  325. X    );
  326. X
  327. X    /* Create check box widget */
  328. X    i = 0;
  329. X    XtSetArg(arg[i], XmNbuttonCount, 4); i++;
  330. X    XtSetArg(arg[i], XmNspacing, 3); i++;
  331. X    XtSetArg(arg[i], XmNmarginHeight, 4); i++;
  332. X    XtSetArg(arg[i], XmNentryCallback, chkbox_cblist); i++;
  333. X    XtSetArg(arg[i], XmNhelpCallback, help_cblist); i++;
  334. X    m->main.check_box = XmCreateSimpleCheckBox(
  335. X        m->main.chkbox_frm,
  336. X        "checkBox",
  337. X        arg,
  338. X        i
  339. X    );
  340. X    m->main.btnlbl_btn = XtNameToWidget(m->main.check_box, "button_0");
  341. X    m->main.lock_btn = XtNameToWidget(m->main.check_box, "button_1");
  342. X    m->main.repeat_btn = XtNameToWidget(m->main.check_box, "button_2");
  343. X    m->main.shuffle_btn = XtNameToWidget(m->main.check_box, "button_3");
  344. X
  345. X    /* Create pushbutton widget for Eject button */
  346. X    i = 0;
  347. X    XtSetArg(arg[i], XmNhelpCallback, help_cblist); i++;
  348. X    m->main.eject_btn = XmCreatePushButton(
  349. X        m->main.form,
  350. X        "ejectButton",
  351. X        arg,
  352. X        i
  353. X    );
  354. X
  355. X    /* Create pushbutton widget for Power off button */
  356. X    i = 0;
  357. X    XtSetArg(arg[i], XmNhelpCallback, help_cblist); i++;
  358. X    m->main.poweroff_btn = XmCreatePushButton(
  359. X        m->main.form,
  360. X        "powerOffButton",
  361. X        arg,
  362. X        i
  363. X    );
  364. X
  365. X    /* Create label widget as track indicator */
  366. X    i = 0;
  367. X    XtSetArg(arg[i], XmNhelpCallback, help_cblist); i++;
  368. X    m->main.track_ind = XmCreateLabel(
  369. X        m->main.form,
  370. X        "trackIndicator",
  371. X        arg,
  372. X        i
  373. X    );
  374. X
  375. X    /* Create label widget as index indicator */
  376. X    i = 0;
  377. X    XtSetArg(arg[i], XmNhelpCallback, help_cblist); i++;
  378. X    m->main.index_ind = XmCreateLabel(
  379. X        m->main.form,
  380. X        "indexIndicator",
  381. X        arg,
  382. X        i
  383. X    );
  384. X
  385. X    /* Create label widget as time indicator */
  386. X    i = 0;
  387. X    XtSetArg(arg[i], XmNhelpCallback, help_cblist); i++;
  388. X    m->main.time_ind = XmCreateLabel(
  389. X        m->main.form,
  390. X        "timeIndicator",
  391. X        arg,
  392. X        i
  393. X    );
  394. X
  395. X    /* Create label widget as indicator label */
  396. X    i = 0;
  397. X    XtSetArg(arg[i], XmNhelpCallback, help_cblist); i++;
  398. X    m->main.dbmode_ind = XmCreateLabel(
  399. X        m->main.form,
  400. X        "dbModeIndicator",
  401. X        arg,
  402. X        i
  403. X    );
  404. X
  405. X    /* Create label widget as indicator label */
  406. X    i = 0;
  407. X    XtSetArg(arg[i], XmNhelpCallback, help_cblist); i++;
  408. X    m->main.progmode_ind = XmCreateLabel(
  409. X        m->main.form,
  410. X        "progModeIndicator",
  411. X        arg,
  412. X        i
  413. X    );
  414. X
  415. X    /* Create label widget as indicator label */
  416. X    i = 0;
  417. X    XtSetArg(arg[i], XmNhelpCallback, help_cblist); i++;
  418. X    m->main.timemode_ind = XmCreateLabel(
  419. X        m->main.form,
  420. X        "timeModeIndicator",
  421. X        arg,
  422. X        i
  423. X    );
  424. X
  425. X    /* Create label widget as indicator label */
  426. X    i = 0;
  427. X    XtSetArg(arg[i], XmNhelpCallback, help_cblist); i++;
  428. X    m->main.playmode_ind = XmCreateLabel(
  429. X        m->main.form,
  430. X        "playModeIndicator",
  431. X        arg,
  432. X        i
  433. X    );
  434. X
  435. X    /* Create pushbutton widget for CDDB/Program button */
  436. X    i = 0;
  437. X    XtSetArg(arg[i], XmNhelpCallback, help_cblist); i++;
  438. X    m->main.dbprog_btn = XmCreatePushButton(
  439. X        m->main.form,
  440. X        "dbprogButton",
  441. X        arg,
  442. X        i
  443. X    );
  444. X
  445. X    /* Create pushbutton widget for Time button */
  446. X    i = 0;
  447. X    XtSetArg(arg[i], XmNhelpCallback, help_cblist); i++;
  448. X    m->main.time_btn = XmCreatePushButton(
  449. X        m->main.form,
  450. X        "timeButton",
  451. X        arg,
  452. X        i
  453. X    );
  454. X
  455. X    /* Create pushbutton widgets for A->B button */
  456. X    i = 0;
  457. X    XtSetArg(arg[i], XmNhelpCallback, help_cblist); i++;
  458. X    m->main.ab_btn = XmCreatePushButton(
  459. X        m->main.form,
  460. X        "abButton",
  461. X        arg,
  462. X        i
  463. X    );
  464. X
  465. X    /* Create pushbutton widget for Sample button */
  466. X    i = 0;
  467. X    XtSetArg(arg[i], XmNhelpCallback, help_cblist); i++;
  468. X    m->main.sample_btn = XmCreatePushButton(
  469. X        m->main.form,
  470. X        "sampleButton",
  471. X        arg,
  472. X        i
  473. X    );
  474. X
  475. X    /* Create pushbutton widget for Sample button */
  476. X    i = 0;
  477. X    XtSetArg(arg[i], XmNhelpCallback, help_cblist); i++;
  478. X    m->main.keypad_btn = XmCreatePushButton(
  479. X        m->main.form,
  480. X        "keypadButton",
  481. X        arg,
  482. X        i
  483. X    );
  484. X
  485. X    /* Create pushbutton widget for Help button */
  486. X    i = 0;
  487. X    XtSetArg(arg[i], XmNhelpCallback, help_cblist); i++;
  488. X    m->main.help_btn = XmCreatePushButton(
  489. X        m->main.form,
  490. X        "helpButton",
  491. X        arg,
  492. X        i
  493. X    );
  494. X
  495. X    /* Create scale widget for level slider */
  496. X    i = 0;
  497. X    XtSetArg(arg[i], XmNhelpCallback, help_cblist); i++;
  498. X    m->main.level_scale = XmCreateScale(
  499. X        m->main.form,
  500. X        "levelScale",
  501. X        arg,
  502. X        i
  503. X    );
  504. X
  505. X    /* Create pushbutton widget for Play-Pause button */
  506. X    i = 0;
  507. X    XtSetArg(arg[i], XmNhelpCallback, help_cblist); i++;
  508. X    m->main.playpause_btn = XmCreatePushButton(
  509. X        m->main.form,
  510. X        "playPauseButton",
  511. X        arg,
  512. X        i
  513. X    );
  514. X
  515. X    /* Create pushbutton widget for Stop button */
  516. X    i = 0;
  517. X    XtSetArg(arg[i], XmNhelpCallback, help_cblist); i++;
  518. X    m->main.stop_btn = XmCreatePushButton(
  519. X        m->main.form,
  520. X        "stopButton",
  521. X        arg,
  522. X        i
  523. X    );
  524. X
  525. X    /* Create pushbutton widget for Prev Track button */
  526. X    i = 0;
  527. X    XtSetArg(arg[i], XmNhelpCallback, help_cblist); i++;
  528. X    m->main.prevtrk_btn = XmCreatePushButton(
  529. X        m->main.form,
  530. X        "prevTrackButton",
  531. X        arg,
  532. X        i
  533. X    );
  534. X
  535. X    /* Create pushbutton widget for Next Track button */
  536. X    i = 0;
  537. X    XtSetArg(arg[i], XmNhelpCallback, help_cblist); i++;
  538. X    m->main.nexttrk_btn = XmCreatePushButton(
  539. X        m->main.form,
  540. X        "nextTrackButton",
  541. X        arg,
  542. X        i
  543. X    );
  544. X
  545. X    /* Create pushbutton widget for Prev Index button */
  546. X    i = 0;
  547. X    XtSetArg(arg[i], XmNhelpCallback, help_cblist); i++;
  548. X    m->main.previdx_btn = XmCreatePushButton(
  549. X        m->main.form,
  550. X        "prevIndexButton",
  551. X        arg,
  552. X        i
  553. X    );
  554. X
  555. X    /* Create pushbutton widget for Next Index button */
  556. X    i = 0;
  557. X    XtSetArg(arg[i], XmNhelpCallback, help_cblist); i++;
  558. X    m->main.nextidx_btn = XmCreatePushButton(
  559. X        m->main.form,
  560. X        "nextIndexButton",
  561. X        arg,
  562. X        i
  563. X    );
  564. X
  565. X    /* Create pushbutton widget for REW button */
  566. X    i = 0;
  567. X    XtSetArg(arg[i], XmNhelpCallback, help_cblist); i++;
  568. X    m->main.rew_btn = XmCreatePushButton(
  569. X        m->main.form,
  570. X        "rewButton",
  571. X        arg,
  572. X        i
  573. X    );
  574. X
  575. X    /* Create pushbutton widget for FF button */
  576. X    i = 0;
  577. X    XtSetArg(arg[i], XmNhelpCallback, help_cblist); i++;
  578. X    m->main.ff_btn = XmCreatePushButton(
  579. X        m->main.form,
  580. X        "ffButton",
  581. X        arg,
  582. X        i
  583. X    );
  584. X
  585. X    /* Manage the widgets */
  586. X    XtManageChild(m->main.form);
  587. X    XtManageChild(m->main.chkbox_frm);
  588. X    XtManageChild(m->main.check_box);
  589. X    XtManageChild(m->main.eject_btn);
  590. X    XtManageChild(m->main.poweroff_btn);
  591. X    XtManageChild(m->main.track_ind);
  592. X    XtManageChild(m->main.index_ind);
  593. X    XtManageChild(m->main.time_ind);
  594. X    XtManageChild(m->main.dbmode_ind);
  595. X    XtManageChild(m->main.progmode_ind);
  596. X    XtManageChild(m->main.timemode_ind);
  597. X    XtManageChild(m->main.playmode_ind);
  598. X    XtManageChild(m->main.dbprog_btn);
  599. X    XtManageChild(m->main.time_btn);
  600. X    XtManageChild(m->main.ab_btn);
  601. X    XtManageChild(m->main.sample_btn);
  602. X    XtManageChild(m->main.keypad_btn);
  603. X    XtManageChild(m->main.help_btn);
  604. X    XtManageChild(m->main.level_scale);
  605. X    XtManageChild(m->main.playpause_btn);
  606. X    XtManageChild(m->main.stop_btn);
  607. X    XtManageChild(m->main.prevtrk_btn);
  608. X    XtManageChild(m->main.nexttrk_btn);
  609. X    XtManageChild(m->main.previdx_btn);
  610. X    XtManageChild(m->main.nextidx_btn);
  611. X    XtManageChild(m->main.rew_btn);
  612. X    XtManageChild(m->main.ff_btn);
  613. X}
  614. X
  615. X
  616. X/*
  617. X * create_keypad_widgets
  618. X *    Create all widgets in the keypad window.
  619. X *
  620. X * Args:
  621. X *    m - Pointer to the main widgets placeholder structure.
  622. X *
  623. X * Return:
  624. X *    Nothing.
  625. X */
  626. XSTATIC void
  627. Xcreate_keypad_widgets(widgets_t *m)
  628. X{
  629. X    int        i, j;
  630. X    Arg        arg[10];
  631. X    char        btn_name[20];
  632. X
  633. X    /* Create form widget as container */
  634. X    i = 0;
  635. X    XtSetArg(arg[i], XmNautoUnmanage, False); i++;
  636. X    XtSetArg(arg[i], XmNresizePolicy, XmRESIZE_NONE); i++;
  637. X    m->keypad.form = XmCreateFormDialog(
  638. X        m->toplevel,
  639. X        "keypadForm",
  640. X        arg,
  641. X        i
  642. X    );
  643. X
  644. X    /* Create label widget as keypad label */
  645. X    m->keypad.keypad_lbl = XmCreateLabel(
  646. X        m->keypad.form,
  647. X        "keypadLabel",
  648. X        NULL,
  649. X        0
  650. X    );
  651. X
  652. X    /* Create label widget as keypad indicator */
  653. X    i = 0;
  654. X    XtSetArg(arg[i], XmNhelpCallback, help_cblist); i++;
  655. X    m->keypad.keypad_ind = XmCreateLabel(
  656. X        m->keypad.form,
  657. X        "keypadIndicator",
  658. X        arg,
  659. X        i
  660. X    );
  661. X
  662. X    /* Create pushbutton widgets as number keys */
  663. X    for (j = 0; j < 10; j++) {
  664. X        sprintf(btn_name, "keypadNumButton%u", j);
  665. X
  666. X        i = 0;
  667. X        XtSetArg(arg[i], XmNhelpCallback, help_cblist); i++;
  668. X        m->keypad.num_btn[j] = XmCreatePushButton(
  669. X            m->keypad.form,
  670. X            btn_name,
  671. X            arg,
  672. X            i
  673. X        );
  674. X    }
  675. X
  676. X    /* Create pushbutton widget as enter button */
  677. X    i = 0;
  678. X    XtSetArg(arg[i], XmNhelpCallback, help_cblist); i++;
  679. X    m->keypad.enter_btn = XmCreatePushButton(
  680. X        m->keypad.form,
  681. X        "keypadEnterButton",
  682. X        arg,
  683. X        i
  684. X    );
  685. X
  686. X    /* Create separator bar widget */
  687. X    m->keypad.keypad_sep = XmCreateSeparator(
  688. X        m->keypad.form,
  689. X        "keypadSeparator",
  690. X        NULL,
  691. X        0
  692. X    );
  693. X
  694. X    /* Create pushbutton widget as cancel button */
  695. X    i = 0;
  696. X    XtSetArg(arg[i], XmNhelpCallback, help_cblist); i++;
  697. X    m->keypad.cancel_btn = XmCreatePushButton(
  698. X        m->keypad.form,
  699. X        "keypadCancelButton",
  700. X        arg,
  701. X        i
  702. X    );
  703. X
  704. X    /* Create pushbutton widget as clear button */
  705. X    i = 0;
  706. X    XtSetArg(arg[i], XmNhelpCallback, help_cblist); i++;
  707. X    m->keypad.clear_btn = XmCreatePushButton(
  708. X        m->keypad.form,
  709. X        "keypadClearButton",
  710. X        arg,
  711. X        i
  712. X    );
  713. X
  714. X    /* Manage the widgets (except the form) */
  715. X    XtManageChild(m->keypad.keypad_lbl);
  716. X    XtManageChild(m->keypad.keypad_ind);
  717. X    for (i = 0; i < 10; i++)
  718. X        XtManageChild(m->keypad.num_btn[i]);
  719. X    XtManageChild(m->keypad.enter_btn);
  720. X    XtManageChild(m->keypad.keypad_sep);
  721. X    XtManageChild(m->keypad.cancel_btn);
  722. X    XtManageChild(m->keypad.clear_btn);
  723. X}
  724. X
  725. X
  726. X/*
  727. X * create_dbprog_widgets
  728. X *    Create all widgets in the database/program window.
  729. X *
  730. X * Args:
  731. X *    m - Pointer to the main widgets placeholder structure.
  732. X *
  733. X * Return:
  734. X *    Nothing.
  735. X */
  736. XSTATIC void
  737. Xcreate_dbprog_widgets(widgets_t *m)
  738. X{
  739. X    int        i;
  740. X    Arg        arg[10];
  741. X    curstat_t    *s = curstat_addr();
  742. X
  743. X    radbox_cblist[0].closure = (XtPointer) s;
  744. X
  745. X    /* Create form widget as container */
  746. X    i = 0;
  747. X    XtSetArg(arg[i], XmNautoUnmanage, False); i++;
  748. X    XtSetArg(arg[i], XmNresizePolicy, XmRESIZE_NONE); i++;
  749. X    m->dbprog.form = XmCreateFormDialog(
  750. X        m->toplevel,
  751. X        "dbprogForm",
  752. X        arg,
  753. X        i
  754. X    );
  755. X
  756. X    /* Create label widget as logo */
  757. X    m->dbprog.logo_lbl = XmCreateLabel(
  758. X        m->dbprog.form,
  759. X        "logoLabel",
  760. X        NULL,
  761. X        0
  762. X    );
  763. X
  764. X    /* Create pushbutton widget as about button */
  765. X    i = 0;
  766. X    XtSetArg(arg[i], XmNhelpCallback, help_cblist); i++;
  767. X    m->dbprog.about_btn = XmCreatePushButton(
  768. X        m->dbprog.form,
  769. X        "aboutButton",
  770. X        arg,
  771. X        i
  772. X    );
  773. X
  774. X    /* Create label widget as disc title display/editor label */
  775. X    m->dbprog.dtitle_lbl = XmCreateLabel(
  776. X        m->dbprog.form,
  777. X        "discTitleLabel",
  778. X        NULL,
  779. X        0
  780. X    );
  781. X
  782. X    /* Create label widget as disc ext descr label */
  783. X    m->dbprog.extd_lbl = XmCreateLabel(
  784. X        m->dbprog.form,
  785. X        "discLabel",
  786. X        NULL,
  787. X        0
  788. X    );
  789. X
  790. X    /* Create text widget as disc title display/editor */
  791. X    i = 0;
  792. X    XtSetArg(arg[i], XmNeditable, True); i++;
  793. X    XtSetArg(arg[i], XmNeditMode, XmSINGLE_LINE_EDIT); i++;
  794. X    XtSetArg(arg[i], XmNcursorPositionVisible, True); i++;
  795. X    XtSetArg(arg[i], XmNcursorPosition, 0); i++;
  796. X    XtSetArg(arg[i], XmNhelpCallback, help_cblist); i++;
  797. X    m->dbprog.dtitle_txt = XmCreateText(
  798. X        m->dbprog.form,
  799. X        "discTitleText",
  800. X        arg,
  801. X        i
  802. X    );
  803. X
  804. X    /* Create pushbutton widget as disc title ext descr popup button */
  805. X    i = 0;
  806. X    XtSetArg(arg[i], XmNhelpCallback, help_cblist); i++;
  807. X    m->dbprog.extd_btn = XmCreatePushButton(
  808. X        m->dbprog.form,
  809. X        "extDiscInfoButton",
  810. X        arg,
  811. X        i
  812. X    );
  813. X
  814. X    /* Create separator bar widget */
  815. X    m->dbprog.dbprog_sep1 = XmCreateSeparator(
  816. X        m->dbprog.form,
  817. X        "dbprogSeparator1",
  818. X        NULL,
  819. X        0
  820. X    );
  821. X
  822. X    /* Create label widget as track list label */
  823. X    m->dbprog.trklist_lbl = XmCreateLabel(
  824. X        m->dbprog.form,
  825. X        "trackListLabel",
  826. X        NULL,
  827. X        0
  828. X    );
  829. X
  830. X    /* Create scrolled list widget as track list */
  831. X    i = 0;
  832. X    XtSetArg(arg[i], XmNautomaticSelection, False); i++;
  833. X    XtSetArg(arg[i], XmNselectionPolicy, XmBROWSE_SELECT); i++;
  834. X    XtSetArg(arg[i], XmNlistSizePolicy, XmCONSTANT); i++;
  835. X    XtSetArg(arg[i], XmNscrollBarDisplayPolicy, XmSTATIC); i++;
  836. X    XtSetArg(arg[i], XmNscrolledWindowMarginWidth, 2); i++;
  837. X    XtSetArg(arg[i], XmNhelpCallback, help_cblist); i++;
  838. X    m->dbprog.trk_list = XmCreateScrolledList(
  839. X        m->dbprog.form,
  840. X        "trackList",
  841. X        arg,
  842. X        i
  843. X    );
  844. X
  845. X    /* Create label widget as time mode selector label */
  846. X    m->dbprog.radio_lbl = XmCreateLabel(
  847. X        m->dbprog.form,
  848. X        "timeSelectLabel",
  849. X        NULL,
  850. X        0
  851. X    );
  852. X
  853. X    /* Create frame for radio box */
  854. X    m->dbprog.radio_frm = XmCreateFrame(
  855. X        m->dbprog.form,
  856. X        "timeSelectFrame",
  857. X        NULL,
  858. X        0
  859. X    );
  860. X
  861. X    /* Create radio box widget as time mode selector */
  862. X    i = 0;
  863. X    XtSetArg(arg[i], XmNbuttonCount, 2); i++;
  864. X    XtSetArg(arg[i], XmNbuttonSet, 0); i++;
  865. X    XtSetArg(arg[i], XmNspacing, 3); i++;
  866. X    XtSetArg(arg[i], XmNmarginHeight, 4); i++;
  867. X    XtSetArg(arg[i], XmNentryCallback, radbox_cblist); i++;
  868. X    XtSetArg(arg[i], XmNhelpCallback, help_cblist); i++;
  869. X    m->dbprog.radio_box = XmCreateSimpleRadioBox(
  870. X        m->dbprog.radio_frm,
  871. X        "timeSelectBox",
  872. X        arg,
  873. X        i
  874. X    );
  875. X    m->dbprog.tottime_btn = XtNameToWidget(m->dbprog.radio_box, "button_0");
  876. X    m->dbprog.trktime_btn = XtNameToWidget(m->dbprog.radio_box, "button_1");
  877. X
  878. X    /* Create label widget as track title display/editor label */
  879. X    m->dbprog.ttitle_lbl = XmCreateLabel(
  880. X        m->dbprog.form,
  881. X        "trackTitleLabel",
  882. X        NULL,
  883. X        0
  884. X    );
  885. X
  886. X    /* Create label widget as disc ext descr label */
  887. X    m->dbprog.extt_lbl = XmCreateLabel(
  888. X        m->dbprog.form,
  889. X        "trackLabel",
  890. X        NULL,
  891. X        0
  892. X    );
  893. X
  894. X    /* Create text widget as track title display/editor */
  895. X    i = 0;
  896. X    XtSetArg(arg[i], XmNeditable, True); i++;
  897. X    XtSetArg(arg[i], XmNeditMode, XmSINGLE_LINE_EDIT); i++;
  898. X    XtSetArg(arg[i], XmNcursorPositionVisible, True); i++;
  899. X    XtSetArg(arg[i], XmNcursorPosition, 0); i++;
  900. X    XtSetArg(arg[i], XmNhelpCallback, help_cblist); i++;
  901. X    m->dbprog.ttitle_txt = XmCreateText(
  902. X        m->dbprog.form,
  903. X        "trackTitleText",
  904. X        arg,
  905. X        i
  906. X    );
  907. X
  908. X    /* Create pushbutton widget as track title ext descr popup button */
  909. X    i = 0;
  910. X    XtSetArg(arg[i], XmNhelpCallback, help_cblist); i++;
  911. X    m->dbprog.extt_btn = XmCreatePushButton(
  912. X        m->dbprog.form,
  913. X        "extTrackInfoButton",
  914. X        arg,
  915. X        i
  916. X    );
  917. X
  918. X    /* Create label widget as program pushbuttons label */
  919. X    m->dbprog.pgm_lbl = XmCreateLabel(
  920. X        m->dbprog.form,
  921. X        "programLabel",
  922. X        NULL,
  923. X        0
  924. X    );
  925. X
  926. X    /* Create pushbutton widget as Add to PGM button */
  927. X    i = 0;
  928. X    XtSetArg(arg[i], XmNhelpCallback, help_cblist); i++;
  929. X    m->dbprog.addpgm_btn = XmCreatePushButton(
  930. X        m->dbprog.form,
  931. X        "addProgramButton",
  932. X        arg,
  933. X        i
  934. X    );
  935. X
  936. X    /* Create pushbutton widget as Clear PGM button */
  937. X    i = 0;
  938. X    XtSetArg(arg[i], XmNhelpCallback, help_cblist); i++;
  939. X    m->dbprog.clrpgm_btn = XmCreatePushButton(
  940. X        m->dbprog.form,
  941. X        "clearProgramButton",
  942. X        arg,
  943. X        i
  944. X    );
  945. X
  946. X    /* Create pushbutton widget as Play PGM button */
  947. X    i = 0;
  948. X    XtSetArg(arg[i], XmNhelpCallback, help_cblist); i++;
  949. X    m->dbprog.playpgm_btn = XmCreatePushButton(
  950. X        m->dbprog.form,
  951. X        "playProgramButton",
  952. X        arg,
  953. X        i
  954. X    );
  955. X
  956. X    /* Create label widget as program sequence display/editor label */
  957. X    m->dbprog.pgmseq_lbl = XmCreateLabel(
  958. X        m->dbprog.form,
  959. X        "programSequenceLabel",
  960. X        NULL,
  961. X        0
  962. X    );
  963. X
  964. X    /* Create text widget as program sequence display/editor */
  965. X    i = 0;
  966. X    XtSetArg(arg[i], XmNeditable, True); i++;
  967. X    XtSetArg(arg[i], XmNeditMode, XmSINGLE_LINE_EDIT); i++;
  968. X    XtSetArg(arg[i], XmNcursorPositionVisible, True); i++;
  969. X    XtSetArg(arg[i], XmNcursorPosition, 0); i++;
  970. X    XtSetArg(arg[i], XmNhelpCallback, help_cblist); i++;
  971. X    m->dbprog.pgmseq_txt = XmCreateText(
  972. X        m->dbprog.form,
  973. X        "programSequenceText",
  974. X        arg,
  975. X        i
  976. X    );
  977. X
  978. X    /* Create separator bar widget */
  979. X    m->dbprog.dbprog_sep2 = XmCreateSeparator(
  980. X        m->dbprog.form,
  981. X        "dbprogSeparator2",
  982. X        NULL,
  983. X        0
  984. X    );
  985. X
  986. X    /* Create pushbutton widget as Save DB button */
  987. X    i = 0;
  988. X    XtSetArg(arg[i], XmNhelpCallback, help_cblist); i++;
  989. X    m->dbprog.savedb_btn = XmCreatePushButton(
  990. X        m->dbprog.form,
  991. X        "saveDatabaseButton",
  992. X        arg,
  993. X        i
  994. X    );
  995. X
  996. X    /* Create pushbutton widget as Load DB button */
  997. X    i = 0;
  998. X    XtSetArg(arg[i], XmNhelpCallback, help_cblist); i++;
  999. X    m->dbprog.loaddb_btn = XmCreatePushButton(
  1000. X        m->dbprog.form,
  1001. X        "loadDatabaseButton",
  1002. X        arg,
  1003. X        i
  1004. X    );
  1005. X
  1006. X    /* Create pushbutton widget as Link DB button */
  1007. X    i = 0;
  1008. X    XtSetArg(arg[i], XmNhelpCallback, help_cblist); i++;
  1009. X    m->dbprog.linkdb_btn = XmCreatePushButton(
  1010. X        m->dbprog.form,
  1011. X        "linkDatabaseButton",
  1012. X        arg,
  1013. X        i
  1014. X    );
  1015. X
  1016. X    /* Create pushbutton widget as Cancel button */
  1017. X    i = 0;
  1018. X    XtSetArg(arg[i], XmNhelpCallback, help_cblist); i++;
  1019. X    m->dbprog.cancel_btn = XmCreatePushButton(
  1020. X        m->dbprog.form,
  1021. X        "dbprogCancelButton",
  1022. X        arg,
  1023. X        i
  1024. X    );
  1025. X
  1026. X    /* Manage the widgets (except the form) */
  1027. X    XtManageChild(m->dbprog.logo_lbl);
  1028. X    XtManageChild(m->dbprog.about_btn);
  1029. X    XtManageChild(m->dbprog.dtitle_lbl);
  1030. X    XtManageChild(m->dbprog.dtitle_txt);
  1031. X    XtManageChild(m->dbprog.extd_lbl);
  1032. X    XtManageChild(m->dbprog.extd_btn);
  1033. X    XtManageChild(m->dbprog.dbprog_sep1);
  1034. X    XtManageChild(m->dbprog.trklist_lbl);
  1035. X    XtManageChild(m->dbprog.trk_list);
  1036. X    XtManageChild(m->dbprog.radio_lbl);
  1037. X    XtManageChild(m->dbprog.radio_frm);
  1038. X    XtManageChild(m->dbprog.radio_box);
  1039. X    XtManageChild(m->dbprog.ttitle_lbl);
  1040. X    XtManageChild(m->dbprog.ttitle_txt);
  1041. X    XtManageChild(m->dbprog.extt_lbl);
  1042. X    XtManageChild(m->dbprog.extt_btn);
  1043. X    XtManageChild(m->dbprog.pgm_lbl);
  1044. X    XtManageChild(m->dbprog.addpgm_btn);
  1045. X    XtManageChild(m->dbprog.clrpgm_btn);
  1046. X    XtManageChild(m->dbprog.playpgm_btn);
  1047. X    XtManageChild(m->dbprog.pgmseq_lbl);
  1048. X    XtManageChild(m->dbprog.pgmseq_txt);
  1049. X    XtManageChild(m->dbprog.dbprog_sep2);
  1050. X    XtManageChild(m->dbprog.savedb_btn);
  1051. X    XtManageChild(m->dbprog.loaddb_btn);
  1052. X    XtManageChild(m->dbprog.linkdb_btn);
  1053. X    XtManageChild(m->dbprog.cancel_btn);
  1054. X}
  1055. X
  1056. X
  1057. X/*
  1058. X * create_exttxt_widgets
  1059. X *    Create all widgets in the extended disc information and
  1060. X *    extended track information windows.
  1061. X *
  1062. X * Args:
  1063. X *    m - Pointer to the main widgets placeholder structure.
  1064. X *
  1065. X * Return:
  1066. X *    Nothing.
  1067. X */
  1068. XSTATIC void
  1069. Xcreate_exttxt_widgets(widgets_t *m)
  1070. X{
  1071. X    int    i;
  1072. X    Arg    arg[10];
  1073. X
  1074. X    /* Extended disc info window */
  1075. X
  1076. X    /* Create form widget as container */
  1077. X    i = 0;
  1078. X    XtSetArg(arg[i], XmNautoUnmanage, False); i++;
  1079. X    XtSetArg(arg[i], XmNresizePolicy, XmRESIZE_NONE); i++;
  1080. X    m->dbextd.form = XmCreateFormDialog(
  1081. X        m->dbprog.form,
  1082. X        "extDiscInfoForm",
  1083. X        arg,
  1084. X        i
  1085. X    );
  1086. X
  1087. X    /* Create label widget as extended disc info label */
  1088. X    m->dbextd.disc_lbl = XmCreateLabel(
  1089. X        m->dbextd.form,
  1090. X        "extDiscInfoLabel",
  1091. X        NULL,
  1092. X        0
  1093. X    );
  1094. X
  1095. X    /* Create text widget as extended disc info editor/viewer */
  1096. X    i = 0;
  1097. X    XtSetArg(arg[i], XmNeditable, True); i++;
  1098. X    XtSetArg(arg[i], XmNeditMode, XmMULTI_LINE_EDIT); i++;
  1099. X    XtSetArg(arg[i], XmNcursorPositionVisible, True); i++;
  1100. X    XtSetArg(arg[i], XmNcursorPosition, 0); i++;
  1101. X    XtSetArg(arg[i], XmNhelpCallback, help_cblist); i++;
  1102. X    m->dbextd.disc_txt = XmCreateScrolledText(
  1103. X        m->dbextd.form,
  1104. X        "extDiscInfoText",
  1105. X        arg,
  1106. X        i
  1107. X    );
  1108. X
  1109. X    /* Create separator bar widget */
  1110. X    m->dbextd.dbextd_sep = XmCreateSeparator(
  1111. X        m->dbextd.form,
  1112. X        "extDiscInfoSeparator",
  1113. X        NULL,
  1114. X        0
  1115. X    );
  1116. X
  1117. X    /* Create pushbutton widget as OK button */
  1118. X    i = 0;
  1119. X    XtSetArg(arg[i], XmNhelpCallback, help_cblist); i++;
  1120. X    m->dbextd.ok_btn = XmCreatePushButton(
  1121. X        m->dbextd.form,
  1122. X        "extDiscInfoOkButton",
  1123. X        arg,
  1124. X        i
  1125. X    );
  1126. X
  1127. X    /* Create pushbutton widget as Clear button */
  1128. X    i = 0;
  1129. X    XtSetArg(arg[i], XmNhelpCallback, help_cblist); i++;
  1130. X    m->dbextd.clear_btn = XmCreatePushButton(
  1131. X        m->dbextd.form,
  1132. X        "extDiscInfoClearButton",
  1133. X        arg,
  1134. X        i
  1135. X    );
  1136. X
  1137. X    /* Create pushbutton widget as Cancel button */
  1138. X    i = 0;
  1139. X    XtSetArg(arg[i], XmNhelpCallback, help_cblist); i++;
  1140. X    m->dbextd.cancel_btn = XmCreatePushButton(
  1141. X        m->dbextd.form,
  1142. X        "extDiscInfoCancelButton",
  1143. X        arg,
  1144. X        i
  1145. X    );
  1146. X
  1147. X    /* Extended track info window */
  1148. X
  1149. X    /* Create form widget as container */
  1150. X    i = 0;
  1151. X    XtSetArg(arg[i], XmNautoUnmanage, False); i++;
  1152. X    XtSetArg(arg[i], XmNresizePolicy, XmRESIZE_NONE); i++;
  1153. X    m->dbextt.form = XmCreateFormDialog(
  1154. X        m->dbprog.form,
  1155. X        "extTrackInfoForm",
  1156. X        arg,
  1157. X        i
  1158. X    );
  1159. X
  1160. X    /* Create label widget as extended disc info label */
  1161. X    m->dbextt.trk_lbl = XmCreateLabel(
  1162. X        m->dbextt.form,
  1163. X        "extTrackInfoLabel",
  1164. X        NULL,
  1165. X        0
  1166. X    );
  1167. X
  1168. X    /* Create text widget as extended disc info editor/viewer */
  1169. X    i = 0;
  1170. X    XtSetArg(arg[i], XmNeditable, True); i++;
  1171. X    XtSetArg(arg[i], XmNeditMode, XmMULTI_LINE_EDIT); i++;
  1172. X    XtSetArg(arg[i], XmNcursorPositionVisible, True); i++;
  1173. X    XtSetArg(arg[i], XmNcursorPosition, 0); i++;
  1174. X    XtSetArg(arg[i], XmNhelpCallback, help_cblist); i++;
  1175. X    m->dbextt.trk_txt = XmCreateScrolledText(
  1176. X        m->dbextt.form,
  1177. X        "extTrackInfoText",
  1178. X        arg,
  1179. X        i
  1180. X    );
  1181. X
  1182. X    /* Create separator bar widget */
  1183. X    m->dbextt.dbextt_sep = XmCreateSeparator(
  1184. X        m->dbextt.form,
  1185. X        "extTrackInfoSeparator",
  1186. X        NULL,
  1187. X        0
  1188. X    );
  1189. X
  1190. X    /* Create pushbutton widget as OK button */
  1191. X    i = 0;
  1192. X    XtSetArg(arg[i], XmNhelpCallback, help_cblist); i++;
  1193. X    m->dbextt.ok_btn = XmCreatePushButton(
  1194. X        m->dbextt.form,
  1195. X        "extTrackInfoOkButton",
  1196. X        arg,
  1197. X        i
  1198. X    );
  1199. X
  1200. X    /* Create pushbutton widget as Clear button */
  1201. X    i = 0;
  1202. X    XtSetArg(arg[i], XmNhelpCallback, help_cblist); i++;
  1203. X    m->dbextt.clear_btn = XmCreatePushButton(
  1204. X        m->dbextt.form,
  1205. X        "extTrackInfoClearButton",
  1206. X        arg,
  1207. X        i
  1208. X    );
  1209. X
  1210. X    /* Create pushbutton widget as Cancel button */
  1211. X    i = 0;
  1212. X    XtSetArg(arg[i], XmNhelpCallback, help_cblist); i++;
  1213. X    m->dbextt.cancel_btn = XmCreatePushButton(
  1214. X        m->dbextt.form,
  1215. X        "extTrackInfoCancelButton",
  1216. X        arg,
  1217. X        i
  1218. X    );
  1219. X
  1220. X    /* Manage the widgets (except the form) */
  1221. X    XtManageChild(m->dbextd.disc_lbl);
  1222. X    XtManageChild(m->dbextd.disc_txt);
  1223. X    XtManageChild(m->dbextd.dbextd_sep);
  1224. X    XtManageChild(m->dbextd.ok_btn);
  1225. X    XtManageChild(m->dbextd.clear_btn);
  1226. X    XtManageChild(m->dbextd.cancel_btn);
  1227. X
  1228. X    XtManageChild(m->dbextt.trk_lbl);
  1229. X    XtManageChild(m->dbextt.trk_txt);
  1230. X    XtManageChild(m->dbextt.dbextt_sep);
  1231. X    XtManageChild(m->dbextt.ok_btn);
  1232. X    XtManageChild(m->dbextt.clear_btn);
  1233. X    XtManageChild(m->dbextt.cancel_btn);
  1234. X}
  1235. X
  1236. X
  1237. X/*
  1238. X * create_dirsel_widgets
  1239. X *    Create all widgets in the CD database directory selector window.
  1240. X *
  1241. X * Args:
  1242. X *    m - Pointer to the main widgets placeholder structure.
  1243. X *
  1244. X * Return:
  1245. X *    Nothing.
  1246. X */
  1247. XSTATIC void
  1248. Xcreate_dirsel_widgets(widgets_t *m)
  1249. X{
  1250. X    int    i;
  1251. X    Arg    arg[10];
  1252. X
  1253. X    /* Create form widget as container */
  1254. X    i = 0;
  1255. X    XtSetArg(arg[i], XmNautoUnmanage, False); i++;
  1256. X    XtSetArg(arg[i], XmNdialogStyle, XmDIALOG_FULL_APPLICATION_MODAL); i++;
  1257. X    m->dirsel.form = XmCreateFormDialog(
  1258. X        m->dbprog.form,
  1259. X        "dirSelectForm",
  1260. X        arg,
  1261. X        i
  1262. X    );
  1263. X
  1264. X    /* Create label widget as database directory selector label */
  1265. X    m->dirsel.dir_lbl = XmCreateLabel(
  1266. X        m->dirsel.form,
  1267. X        "dirSelectLabel",
  1268. X        NULL,
  1269. X        0
  1270. X    );
  1271. X
  1272. X    /* Create scrolled list widget as directory list */
  1273. X    i = 0;
  1274. X    XtSetArg(arg[i], XmNautomaticSelection, False); i++;
  1275. X    XtSetArg(arg[i], XmNselectionPolicy, XmBROWSE_SELECT); i++;
  1276. X    XtSetArg(arg[i], XmNlistSizePolicy, XmCONSTANT); i++;
  1277. X    XtSetArg(arg[i], XmNscrollBarDisplayPolicy, XmAS_NEEDED); i++;
  1278. X    XtSetArg(arg[i], XmNhelpCallback, help_cblist); i++;
  1279. X    m->dirsel.dir_list = XmCreateScrolledList(
  1280. X        m->dirsel.form,
  1281. X        "dirSelectList",
  1282. X        arg,
  1283. X        i
  1284. X    );
  1285. X
  1286. X    /* Create separator bar widget */
  1287. X    m->dirsel.dirsel_sep = XmCreateSeparator(
  1288. X        m->dirsel.form,
  1289. X        "dirSelectSeparator",
  1290. X        NULL,
  1291. X        0
  1292. X    );
  1293. X
  1294. X    /* Create pushbutton widget as OK button */
  1295. X    i = 0;
  1296. X    XtSetArg(arg[i], XmNhelpCallback, help_cblist); i++;
  1297. X    m->dirsel.ok_btn = XmCreatePushButton(
  1298. X        m->dirsel.form,
  1299. X        "dirSelectOkButton",
  1300. X        arg,
  1301. X        i
  1302. X    );
  1303. X
  1304. X    /* Create pushbutton widget as Cancel button */
  1305. X    i = 0;
  1306. X    XtSetArg(arg[i], XmNhelpCallback, help_cblist); i++;
  1307. X    m->dirsel.cancel_btn = XmCreatePushButton(
  1308. X        m->dirsel.form,
  1309. X        "dirSelectCancelButton",
  1310. X        arg,
  1311. X        i
  1312. X    );
  1313. X
  1314. X    /* Manage the widgets (except the form) */
  1315. X    XtManageChild(m->dirsel.dir_lbl);
  1316. X    XtManageChild(m->dirsel.dir_list);
  1317. X    XtManageChild(m->dirsel.dirsel_sep);
  1318. X    XtManageChild(m->dirsel.ok_btn);
  1319. X    XtManageChild(m->dirsel.cancel_btn);
  1320. X}
  1321. X
  1322. X
  1323. X/*
  1324. X * create_linksel_widgets
  1325. X *    Create all widgets in the CD database search-link window.
  1326. X *
  1327. X * Args:
  1328. X *    m - Pointer to the main widgets placeholder structure.
  1329. X *
  1330. X * Return:
  1331. X *    Nothing.
  1332. X */
  1333. XSTATIC void
  1334. Xcreate_linksel_widgets(widgets_t *m)
  1335. X{
  1336. X    int    i;
  1337. X    Arg    arg[10];
  1338. X
  1339. X    /* Create form widget as container */
  1340. X    i = 0;
  1341. X    XtSetArg(arg[i], XmNautoUnmanage, False); i++;
  1342. X    XtSetArg(arg[i], XmNdialogStyle, XmDIALOG_FULL_APPLICATION_MODAL); i++;
  1343. X    m->linksel.form = XmCreateFormDialog(
  1344. X        m->dbprog.form,
  1345. X        "linkSelectForm",
  1346. X        arg,
  1347. X        i
  1348. X    );
  1349. X
  1350. X    /* Create label widget as cddb link selector label */
  1351. X    m->linksel.link_lbl = XmCreateLabel(
  1352. X        m->linksel.form,
  1353. X        "linkSelectLabel",
  1354. X        NULL,
  1355. X        0
  1356. X    );
  1357. X
  1358. X    /* Create scrolled list widget as disc titles list */
  1359. X    i = 0;
  1360. X    XtSetArg(arg[i], XmNautomaticSelection, False); i++;
  1361. X    XtSetArg(arg[i], XmNselectionPolicy, XmBROWSE_SELECT); i++;
  1362. X    XtSetArg(arg[i], XmNlistSizePolicy, XmCONSTANT); i++;
  1363. X    XtSetArg(arg[i], XmNscrollBarDisplayPolicy, XmAS_NEEDED); i++;
  1364. X    XtSetArg(arg[i], XmNhelpCallback, help_cblist); i++;
  1365. X    m->linksel.link_list = XmCreateScrolledList(
  1366. X        m->linksel.form,
  1367. X        "linkSelectList",
  1368. X        arg,
  1369. X        i
  1370. X    );
  1371. X
  1372. X    /* Create separator bar widget */
  1373. X    m->linksel.linksel_sep = XmCreateSeparator(
  1374. X        m->linksel.form,
  1375. X        "linkSelectSeparator",
  1376. X        NULL,
  1377. X        0
  1378. X    );
  1379. X
  1380. X    /* Create pushbutton widget as OK button */
  1381. X    i = 0;
  1382. X    XtSetArg(arg[i], XmNhelpCallback, help_cblist); i++;
  1383. X    m->linksel.ok_btn = XmCreatePushButton(
  1384. X        m->linksel.form,
  1385. X        "linkSelectOkButton",
  1386. X        arg,
  1387. X        i
  1388. X    );
  1389. X
  1390. X    /* Create pushbutton widget as Cancel button */
  1391. X    i = 0;
  1392. X    XtSetArg(arg[i], XmNhelpCallback, help_cblist); i++;
  1393. X    m->linksel.cancel_btn = XmCreatePushButton(
  1394. X        m->linksel.form,
  1395. X        "linkSelectCancelButton",
  1396. X        arg,
  1397. X        i
  1398. X    );
  1399. X
  1400. X    /* Manage the widgets (except the form) */
  1401. X    XtManageChild(m->linksel.link_lbl);
  1402. X    XtManageChild(m->linksel.link_list);
  1403. X    XtManageChild(m->linksel.linksel_sep);
  1404. X    XtManageChild(m->linksel.ok_btn);
  1405. X    XtManageChild(m->linksel.cancel_btn);
  1406. X}
  1407. X
  1408. X
  1409. X/*
  1410. X * create_help_widgets
  1411. X *    Create all widgets in the help text display window.
  1412. X *
  1413. X * Args:
  1414. X *    m - Pointer to the main widgets placeholder structure.
  1415. X *
  1416. X * Return:
  1417. X *    Nothing.
  1418. X */
  1419. XSTATIC void
  1420. Xcreate_help_widgets(widgets_t *m)
  1421. X{
  1422. X    int    i;
  1423. X    Arg    arg[10];
  1424. X
  1425. X    /* Help popup window */
  1426. X
  1427. X    /* Create form widget as container */
  1428. X    i = 0;
  1429. X    XtSetArg(arg[i], XmNautoUnmanage, False); i++;
  1430. X    XtSetArg(arg[i], XmNresizePolicy, XmRESIZE_NONE); i++;
  1431. X    m->help.form = XmCreateFormDialog(
  1432. X        m->main.form,
  1433. X        "helpForm",
  1434. X        arg,
  1435. X        i
  1436. X    );
  1437. X
  1438. X    /* Create text widget as help text viewer */
  1439. X    i = 0;
  1440. X    XtSetArg(arg[i], XmNeditable, False); i++;
  1441. X    XtSetArg(arg[i], XmNeditMode, XmMULTI_LINE_EDIT); i++;
  1442. X    XtSetArg(arg[i], XmNcursorPositionVisible, False); i++;
  1443. X    XtSetArg(arg[i], XmNcursorPosition, 0); i++;
  1444. X    m->help.help_txt = XmCreateScrolledText(
  1445. X        m->help.form,
  1446. X        "helpText",
  1447. X        arg,
  1448. X        i
  1449. X    );
  1450. X
  1451. X    /* Create separator bar widget */
  1452. X    m->help.help_sep = XmCreateSeparator(
  1453. X        m->help.form,
  1454. X        "helpSeparator",
  1455. X        NULL,
  1456. X        0
  1457. X    );
  1458. X
  1459. X    /* Create pushbutton widget as OK button */
  1460. X    m->help.ok_btn = XmCreatePushButton(
  1461. X        m->help.form,
  1462. X        "helpOkButton",
  1463. X        NULL,
  1464. X        0
  1465. X    );
  1466. X
  1467. X    /* Manage the widgets (except the form) */
  1468. X    XtManageChild(m->help.help_txt);
  1469. X    XtManageChild(m->help.help_sep);
  1470. X    XtManageChild(m->help.ok_btn);
  1471. X}
  1472. X
  1473. X
  1474. X/*
  1475. X * create_dialog_widgets
  1476. X *    Create all widgets in the dialog box windows.
  1477. X *
  1478. X * Args:
  1479. X *    m - Pointer to the main widgets placeholder structure.
  1480. X *
  1481. X * Return:
  1482. X *    Nothing.
  1483. X */
  1484. XSTATIC void
  1485. Xcreate_dialog_widgets(widgets_t *m)
  1486. X{
  1487. X    int    i;
  1488. X    Arg    arg[10];
  1489. X    Widget    help_btn,
  1490. X        cancel_btn;
  1491. X
  1492. X    /* Create info dialog widget for information messages */
  1493. X    i = 0;
  1494. X    XtSetArg(arg[i], XmNdialogStyle, XmDIALOG_MODELESS); i++;
  1495. X    m->dialog.info = XmCreateInformationDialog(
  1496. X        m->toplevel,
  1497. X        "infoPopup",
  1498. X        arg,
  1499. X        i
  1500. X    );
  1501. X
  1502. X    /* Remove unused buttons in the info dialog widget */
  1503. X    help_btn = XmMessageBoxGetChild(
  1504. X        m->dialog.info,
  1505. X        XmDIALOG_HELP_BUTTON
  1506. X    );
  1507. X    cancel_btn = XmMessageBoxGetChild(
  1508. X        m->dialog.info,
  1509. X        XmDIALOG_CANCEL_BUTTON
  1510. X    );
  1511. X
  1512. X    XtUnmanageChild(help_btn);
  1513. X    XtUnmanageChild(cancel_btn);
  1514. X
  1515. X    /* Create warning dialog widget for warning messages */
  1516. X    i = 0;
  1517. X    XtSetArg(arg[i], XmNdialogStyle, XmDIALOG_FULL_APPLICATION_MODAL); i++;
  1518. X    m->dialog.warning = XmCreateWarningDialog(
  1519. X        m->toplevel,
  1520. X        "warningPopup",
  1521. X        arg,
  1522. X        i
  1523. X    );
  1524. X
  1525. X    /* Remove unused buttons in the warning dialog widget */
  1526. X    help_btn = XmMessageBoxGetChild(
  1527. X        m->dialog.warning,
  1528. X        XmDIALOG_HELP_BUTTON
  1529. X    );
  1530. X    cancel_btn = XmMessageBoxGetChild(
  1531. X        m->dialog.warning,
  1532. X        XmDIALOG_CANCEL_BUTTON
  1533. X    );
  1534. X
  1535. X    XtUnmanageChild(help_btn);
  1536. X    XtUnmanageChild(cancel_btn);
  1537. X
  1538. X    /* Create error dialog widget for fatal error messages */
  1539. X    i = 0;
  1540. X    XtSetArg(arg[i], XmNdialogStyle, XmDIALOG_FULL_APPLICATION_MODAL); i++;
  1541. X    m->dialog.fatal = XmCreateErrorDialog(
  1542. X        m->toplevel,
  1543. X        "fatalPopup",
  1544. X        arg,
  1545. X        i
  1546. X    );
  1547. X
  1548. X    /* Remove unused buttons in the error dialog widget */
  1549. X    help_btn = XmMessageBoxGetChild(
  1550. X        m->dialog.fatal,
  1551. X        XmDIALOG_HELP_BUTTON
  1552. X    );
  1553. X    cancel_btn = XmMessageBoxGetChild(
  1554. X        m->dialog.fatal,
  1555. X        XmDIALOG_CANCEL_BUTTON
  1556. X    );
  1557. X
  1558. X    XtUnmanageChild(help_btn);
  1559. X    XtUnmanageChild(cancel_btn);
  1560. X
  1561. X    /* Create question dialog widget for confirm messages */
  1562. X    i = 0;
  1563. X    XtSetArg(arg[i], XmNdialogStyle, XmDIALOG_FULL_APPLICATION_MODAL); i++;
  1564. X    m->dialog.confirm = XmCreateQuestionDialog(
  1565. X        m->toplevel,
  1566. X        "questionPopup",
  1567. X        arg,
  1568. X        i
  1569. X    );
  1570. X
  1571. X    /* Remove unused buttons in the question dialog widget */
  1572. X    help_btn = XmMessageBoxGetChild(
  1573. X        m->dialog.confirm,
  1574. X        XmDIALOG_HELP_BUTTON
  1575. X    );
  1576. X
  1577. X    XtUnmanageChild(help_btn);
  1578. X
  1579. X    /* Create info dialog widget for the About popup */
  1580. X    i = 0;
  1581. X    XtSetArg(arg[i], XmNdialogStyle, XmDIALOG_MODELESS); i++;
  1582. X    m->dialog.about = XmCreateInformationDialog(
  1583. X        m->toplevel,
  1584. X        "aboutPopup",
  1585. X        arg,
  1586. X        i
  1587. X    );
  1588. X
  1589. X    /* Remove unused buttons in the about popup */
  1590. X    help_btn = XmMessageBoxGetChild(
  1591. X        m->dialog.about,
  1592. X        XmDIALOG_HELP_BUTTON
  1593. X    );
  1594. X    cancel_btn = XmMessageBoxGetChild(
  1595. X        m->dialog.about,
  1596. X        XmDIALOG_CANCEL_BUTTON
  1597. X    );
  1598. X
  1599. X    XtUnmanageChild(help_btn);
  1600. X    XtUnmanageChild(cancel_btn);
  1601. X}
  1602. X
  1603. X
  1604. X/*
  1605. X * create_widgets
  1606. X *    Top-level function to create all widgets
  1607. X *
  1608. X * Args:
  1609. X *    m - Pointer to the main widgets placeholder structure.
  1610. X *
  1611. X * Return:
  1612. X *    Nothing.
  1613. X */
  1614. Xvoid
  1615. Xcreate_widgets(widgets_t *m)
  1616. X{
  1617. X    create_main_widgets(m);
  1618. X    create_keypad_widgets(m);
  1619. X    create_dbprog_widgets(m);
  1620. X    create_exttxt_widgets(m);
  1621. X    create_dirsel_widgets(m);
  1622. X    create_linksel_widgets(m);
  1623. X    create_help_widgets(m);
  1624. X    create_dialog_widgets(m);
  1625. X}
  1626. X
  1627. X
  1628. X/*
  1629. X * make_pixmaps
  1630. X *    Create pixmaps from bitmap data and set up various widgets to
  1631. X *    use them.
  1632. X *
  1633. X * Args:
  1634. X *    m - Pointer to the main widgets placeholder structure
  1635. X *    p - The main pixmaps placeholder structure
  1636. X *    depth - The desired depth of the pixmap
  1637. X *
  1638. X * Return:
  1639. X *    Nothing.
  1640. X */
  1641. XSTATIC void
  1642. Xmake_pixmaps(widgets_t *m, pixmaps_t *p, int depth)
  1643. X{
  1644. X    /* Set icon pixmap */
  1645. X    p->main.icon_pixmap = bm_to_px(
  1646. X        m->toplevel,
  1647. X        logo_bits,
  1648. X        logo_width,
  1649. X        logo_height,
  1650. X        1,
  1651. X        BM_PX_NORMAL
  1652. X    );
  1653. X    XtVaSetValues(m->toplevel, XmNiconPixmap, p->main.icon_pixmap, NULL);
  1654. X                    
  1655. X    /*
  1656. X     * The following puts proper pixmaps on button faces
  1657. X     */
  1658. X
  1659. X    p->main.btnlbl_pixmap = bm_to_px(
  1660. X        m->main.check_box,
  1661. X        btnlbl_bits,
  1662. X        btnlbl_width,
  1663. X        btnlbl_height,
  1664. X        depth,
  1665. X        BM_PX_NORMAL
  1666. X    );
  1667. X    XtVaSetValues(m->main.btnlbl_btn,
  1668. X        XmNlabelPixmap, p->main.btnlbl_pixmap,
  1669. X        NULL
  1670. X    );
  1671. X
  1672. X    p->main.lock_pixmap = bm_to_px(
  1673. X        m->main.check_box,
  1674. X        lock_bits,
  1675. X        lock_width,
  1676. X        lock_height,
  1677. X        depth,
  1678. X        BM_PX_NORMAL
  1679. X    );
  1680. X    XtVaSetValues(m->main.lock_btn,
  1681. X        XmNlabelPixmap, p->main.lock_pixmap,
  1682. X        NULL
  1683. X    );
  1684. X
  1685. X    p->main.repeat_pixmap = bm_to_px(
  1686. X        m->main.check_box,
  1687. X        repeat_bits,
  1688. X        repeat_width,
  1689. X        repeat_height,
  1690. X        depth,
  1691. X        BM_PX_NORMAL
  1692. X    );
  1693. X    XtVaSetValues(m->main.repeat_btn,
  1694. X        XmNlabelPixmap, p->main.repeat_pixmap,
  1695. X        NULL
  1696. X    );
  1697. X
  1698. X    p->main.shuffle_pixmap = bm_to_px(
  1699. X        m->main.check_box,
  1700. X        shuffle_bits,
  1701. X        shuffle_width,
  1702. X        shuffle_height,
  1703. X        depth,
  1704. X        BM_PX_NORMAL
  1705. X    );
  1706. X    XtVaSetValues(m->main.shuffle_btn,
  1707. X        XmNlabelPixmap, p->main.shuffle_pixmap,
  1708. X        NULL
  1709. X    );
  1710. X
  1711. X    p->main.eject_pixmap = bm_to_px(
  1712. X        m->main.eject_btn,
  1713. X        eject_bits,
  1714. X        eject_width,
  1715. X        eject_height,
  1716. X        depth,
  1717. X        BM_PX_NORMAL
  1718. X    );
  1719. X    p->main.eject_hlpixmap = bm_to_px(
  1720. X        m->main.eject_btn,
  1721. X        eject_bits,
  1722. X        eject_width,
  1723. X        eject_height,
  1724. X        depth,
  1725. X        BM_PX_HIGHLIGHT
  1726. X    );
  1727. X    XtVaSetValues(m->main.eject_btn,
  1728. X        XmNlabelPixmap, p->main.eject_pixmap,
  1729. X        NULL
  1730. X    );
  1731. X
  1732. X    p->main.poweroff_pixmap = bm_to_px(
  1733. X        m->main.poweroff_btn,
  1734. X        poweroff_bits,
  1735. X        poweroff_width,
  1736. X        poweroff_height,
  1737. X        depth,
  1738. X        BM_PX_NORMAL
  1739. X    );
  1740. X    p->main.poweroff_hlpixmap = bm_to_px(
  1741. X        m->main.poweroff_btn,
  1742. X        poweroff_bits,
  1743. X        poweroff_width,
  1744. X        poweroff_height,
  1745. X        depth,
  1746. X        BM_PX_HIGHLIGHT
  1747. X    );
  1748. X    XtVaSetValues(m->main.poweroff_btn,
  1749. X        XmNlabelPixmap, p->main.poweroff_pixmap,
  1750. X        NULL
  1751. X    );
  1752. X
  1753. X    p->main.dbprog_pixmap = bm_to_px(
  1754. X        m->main.dbprog_btn,
  1755. X        dbprog_bits,
  1756. X        dbprog_width,
  1757. X        dbprog_height,
  1758. X        depth,
  1759. X        BM_PX_NORMAL
  1760. X    );
  1761. X    p->main.dbprog_hlpixmap = bm_to_px(
  1762. X        m->main.dbprog_btn,
  1763. X        dbprog_bits,
  1764. X        dbprog_width,
  1765. X        dbprog_height,
  1766. X        depth,
  1767. X        BM_PX_HIGHLIGHT
  1768. X    );
  1769. X    XtVaSetValues(m->main.dbprog_btn,
  1770. X        XmNlabelPixmap, p->main.dbprog_pixmap,
  1771. X        NULL
  1772. X    );
  1773. X
  1774. X    p->main.time_pixmap = bm_to_px(
  1775. X        m->main.time_btn,
  1776. X        time_bits,
  1777. X        time_width,
  1778. X        time_height,
  1779. X        depth,
  1780. X        BM_PX_NORMAL
  1781. X    );
  1782. X    p->main.time_hlpixmap = bm_to_px(
  1783. X        m->main.time_btn,
  1784. X        time_bits,
  1785. X        time_width,
  1786. X        time_height,
  1787. X        depth,
  1788. X        BM_PX_HIGHLIGHT
  1789. X    );
  1790. X    XtVaSetValues(m->main.time_btn,
  1791. X        XmNlabelPixmap, p->main.time_pixmap,
  1792. X        NULL
  1793. X    );
  1794. X
  1795. X    p->main.ab_pixmap = bm_to_px(
  1796. X        m->main.ab_btn,
  1797. X        ab_bits,
  1798. X        ab_width,
  1799. X        ab_height,
  1800. X        depth,
  1801. X        BM_PX_NORMAL
  1802. X    );
  1803. X    p->main.ab_hlpixmap = bm_to_px(
  1804. X        m->main.ab_btn,
  1805. X        ab_bits,
  1806. X        ab_width,
  1807. X        ab_height,
  1808. X        depth,
  1809. X        BM_PX_HIGHLIGHT
  1810. X    );
  1811. X    XtVaSetValues(m->main.ab_btn,
  1812. X        XmNlabelPixmap, p->main.ab_pixmap,
  1813. X        NULL
  1814. X    );
  1815. X
  1816. X    p->main.sample_pixmap = bm_to_px(
  1817. X        m->main.sample_btn,
  1818. X        sample_bits,
  1819. X        sample_width,
  1820. X        sample_height,
  1821. X        depth,
  1822. X        BM_PX_NORMAL
  1823. X    );
  1824. X    p->main.sample_hlpixmap = bm_to_px(
  1825. X        m->main.sample_btn,
  1826. X        sample_bits,
  1827. X        sample_width,
  1828. X        sample_height,
  1829. X        depth,
  1830. X        BM_PX_HIGHLIGHT
  1831. X    );
  1832. X    XtVaSetValues(m->main.sample_btn,
  1833. X        XmNlabelPixmap, p->main.sample_pixmap,
  1834. X        NULL
  1835. X    );
  1836. X
  1837. X    p->main.keypad_pixmap = bm_to_px(
  1838. X        m->main.keypad_btn,
  1839. X        keypad_bits,
  1840. X        keypad_width,
  1841. X        keypad_height,
  1842. X        depth,
  1843. X        BM_PX_NORMAL
  1844. X    );
  1845. X    p->main.keypad_hlpixmap = bm_to_px(
  1846. X        m->main.keypad_btn,
  1847. X        keypad_bits,
  1848. X        keypad_width,
  1849. X        keypad_height,
  1850. X        depth,
  1851. X        BM_PX_HIGHLIGHT
  1852. X    );
  1853. X    XtVaSetValues(m->main.keypad_btn,
  1854. X        XmNlabelPixmap, p->main.keypad_pixmap,
  1855. X        NULL
  1856. X    );
  1857. X
  1858. X    p->main.help_pixmap = bm_to_px(
  1859. X        m->main.help_btn,
  1860. X        help_bits,
  1861. X        help_width,
  1862. X        help_height,
  1863. X        depth,
  1864. X        BM_PX_NORMAL
  1865. X    );
  1866. X    p->main.help_hlpixmap = bm_to_px(
  1867. X        m->main.help_btn,
  1868. X        help_bits,
  1869. X        help_width,
  1870. X        help_height,
  1871. X        depth,
  1872. X        BM_PX_HIGHLIGHT
  1873. X    );
  1874. X    XtVaSetValues(m->main.help_btn,
  1875. X        XmNlabelPixmap, p->main.help_pixmap,
  1876. X        NULL
  1877. X    );
  1878. X
  1879. X    p->main.playpause_pixmap = bm_to_px(
  1880. X        m->main.playpause_btn,
  1881. X        playpause_bits,
  1882. X        playpause_width,
  1883. X        playpause_height,
  1884. X        depth,
  1885. X        BM_PX_NORMAL
  1886. X    );
  1887. X    p->main.playpause_hlpixmap = bm_to_px(
  1888. X        m->main.playpause_btn,
  1889. X        playpause_bits,
  1890. X        playpause_width,
  1891. X        playpause_height,
  1892. X        depth,
  1893. X        BM_PX_HIGHLIGHT
  1894. X    );
  1895. X    XtVaSetValues(m->main.playpause_btn,
  1896. X        XmNlabelPixmap, p->main.playpause_pixmap,
  1897. X        NULL
  1898. X    );
  1899. X
  1900. X    p->main.stop_pixmap = bm_to_px(
  1901. X        m->main.stop_btn,
  1902. X        stop_bits,
  1903. X        stop_width,
  1904. X        stop_height,
  1905. X        depth,
  1906. X        BM_PX_NORMAL
  1907. X    );
  1908. X    p->main.stop_hlpixmap = bm_to_px(
  1909. X        m->main.stop_btn,
  1910. X        stop_bits,
  1911. X        stop_width,
  1912. X        stop_height,
  1913. X        depth,
  1914. X        BM_PX_HIGHLIGHT
  1915. X    );
  1916. X    XtVaSetValues(m->main.stop_btn,
  1917. X        XmNlabelPixmap, p->main.stop_pixmap,
  1918. X        NULL
  1919. X    );
  1920. X
  1921. X    p->main.prevtrk_pixmap = bm_to_px(
  1922. X        m->main.prevtrk_btn,
  1923. X        prevtrk_bits,
  1924. X        prevtrk_width,
  1925. X        prevtrk_height,
  1926. X        depth,
  1927. X        BM_PX_NORMAL
  1928. X    );
  1929. X    p->main.prevtrk_hlpixmap = bm_to_px(
  1930. X        m->main.prevtrk_btn,
  1931. X        prevtrk_bits,
  1932. X        prevtrk_width,
  1933. X        prevtrk_height,
  1934. X        depth,
  1935. X        BM_PX_HIGHLIGHT
  1936. X    );
  1937. X    XtVaSetValues(m->main.prevtrk_btn,
  1938. X        XmNlabelPixmap, p->main.prevtrk_pixmap,
  1939. X        NULL
  1940. X    );
  1941. X
  1942. X    p->main.nexttrk_pixmap = bm_to_px(
  1943. X        m->main.nexttrk_btn,
  1944. X        nexttrk_bits,
  1945. X        nexttrk_width,
  1946. X        nexttrk_height,
  1947. X        depth,
  1948. X        BM_PX_NORMAL
  1949. X    );
  1950. X    p->main.nexttrk_hlpixmap = bm_to_px(
  1951. X        m->main.nexttrk_btn,
  1952. X        nexttrk_bits,
  1953. X        nexttrk_width,
  1954. X        nexttrk_height,
  1955. X        depth,
  1956. X        BM_PX_HIGHLIGHT
  1957. X    );
  1958. X    XtVaSetValues(m->main.nexttrk_btn,
  1959. X        XmNlabelPixmap, p->main.nexttrk_pixmap,
  1960. X        NULL
  1961. X    );
  1962. X
  1963. X    p->main.previdx_pixmap = bm_to_px(
  1964. X        m->main.previdx_btn,
  1965. X        previdx_bits,
  1966. X        previdx_width,
  1967. X        previdx_height,
  1968. X        depth,
  1969. X        BM_PX_NORMAL
  1970. X    );
  1971. X    p->main.previdx_hlpixmap = bm_to_px(
  1972. X        m->main.previdx_btn,
  1973. X        previdx_bits,
  1974. X        previdx_width,
  1975. X        previdx_height,
  1976. X        depth,
  1977. X        BM_PX_HIGHLIGHT
  1978. X    );
  1979. X    XtVaSetValues(m->main.previdx_btn,
  1980. X        XmNlabelPixmap, p->main.previdx_pixmap,
  1981. X        NULL
  1982. X    );
  1983. X
  1984. X    p->main.nextidx_pixmap = bm_to_px(
  1985. X        m->main.nextidx_btn,
  1986. X        nextidx_bits,
  1987. X        nextidx_width,
  1988. X        nextidx_height,
  1989. X        depth,
  1990. X        BM_PX_NORMAL
  1991. X    );
  1992. X    p->main.nextidx_hlpixmap = bm_to_px(
  1993. X        m->main.nextidx_btn,
  1994. X        nextidx_bits,
  1995. X        nextidx_width,
  1996. X        nextidx_height,
  1997. X        depth,
  1998. X        BM_PX_HIGHLIGHT
  1999. X    );
  2000. X    XtVaSetValues(m->main.nextidx_btn,
  2001. X        XmNlabelPixmap, p->main.nextidx_pixmap,
  2002. X        NULL
  2003. X    );
  2004. X
  2005. X    p->main.rew_pixmap = bm_to_px(
  2006. X        m->main.rew_btn,
  2007. X        rew_bits,
  2008. X        rew_width,
  2009. X        rew_height,
  2010. X        depth,
  2011. X        BM_PX_NORMAL
  2012. X    );
  2013. X    p->main.rew_hlpixmap = bm_to_px(
  2014. X        m->main.rew_btn,
  2015. X        rew_bits,
  2016. X        rew_width,
  2017. X        rew_height,
  2018. X        depth,
  2019. X        BM_PX_HIGHLIGHT
  2020. X    );
  2021. X    XtVaSetValues(m->main.rew_btn,
  2022. X        XmNlabelPixmap, p->main.rew_pixmap,
  2023. X        NULL
  2024. X    );
  2025. X
  2026. X    p->main.ff_pixmap = bm_to_px(
  2027. X        m->main.ff_btn,
  2028. X        ff_bits,
  2029. X        ff_width,
  2030. X        ff_height,
  2031. X        depth,
  2032. X        BM_PX_NORMAL
  2033. X    );
  2034. X    p->main.ff_hlpixmap = bm_to_px(
  2035. X        m->main.ff_btn,
  2036. X        ff_bits,
  2037. X        ff_width,
  2038. X        ff_height,
  2039. X        depth,
  2040. X        BM_PX_HIGHLIGHT
  2041. X    );
  2042. X    XtVaSetValues(m->main.ff_btn,
  2043. X        XmNlabelPixmap, p->main.ff_pixmap,
  2044. X        NULL
  2045. X    );
  2046. X
  2047. X    p->dbprog.logo_pixmap = bm_to_px(
  2048. X        m->main.dbprog_btn,
  2049. X        logo_bits,
  2050. X        logo_width,
  2051. X        logo_height,
  2052. X        depth,
  2053. X        BM_PX_NORMAL
  2054. X    );
  2055. X    XtVaSetValues(m->dbprog.logo_lbl,
  2056. X        XmNlabelType, XmPIXMAP,
  2057. X        XmNlabelPixmap, p->dbprog.logo_pixmap,
  2058. X        XmNlabelInsensitivePixmap, p->dbprog.logo_pixmap,
  2059. X        NULL
  2060. X    );
  2061. X
  2062. X    p->dialog.xmcd_pixmap = bm_to_px(
  2063. X        m->main.dbprog_btn,
  2064. X        xmcd_bits,
  2065. X        xmcd_width,
  2066. X        xmcd_height,
  2067. X        depth,
  2068. X        BM_PX_WHITE
  2069. X    );
  2070. X    XtVaSetValues(m->dialog.about,
  2071. X        XmNsymbolPixmap, p->dialog.xmcd_pixmap,
  2072. X        NULL
  2073. X    );
  2074. X}
  2075. X
  2076. X
  2077. X/*
  2078. X * pre_realize_config
  2079. X *    Top-level function to perform set-up and initialization tasks
  2080. X *    prior to realizing all widgets.
  2081. X *
  2082. X * Args:
  2083. X *    m - Pointer to the main widgets structure.
  2084. X *
  2085. X * Return:
  2086. X *    Nothing.
  2087. X */
  2088. Xvoid
  2089. Xpre_realize_config(widgets_t *m)
  2090. X{
  2091. X    unsigned char        labtype;
  2092. X    static XtActionsRec    actions[] = {
  2093. X        { "hotkey",    hotkey },
  2094. X        { "focuschg",    focuschg },
  2095. X        { "mainmap",    mainmap }
  2096. X    };
  2097. X
  2098. X    /* Set geometry and location of all main widgets */
  2099. X    force_geometry(m);
  2100. X
  2101. X    /* Make main window toggle buttons have the same label setting as
  2102. X     * the pushbuttons.
  2103. X     */
  2104. X    XtVaGetValues(m->main.playpause_btn, XmNlabelType, &labtype, NULL);
  2105. X    XtVaSetValues(m->main.btnlbl_btn, XmNlabelType, labtype, NULL);
  2106. X    XtVaSetValues(m->main.lock_btn, XmNlabelType, labtype, NULL);
  2107. X    XtVaSetValues(m->main.repeat_btn, XmNlabelType, labtype, NULL);
  2108. X    XtVaSetValues(m->main.shuffle_btn, XmNlabelType, labtype, NULL);
  2109. X
  2110. X    /* Register action routines */
  2111. X    XtAppAddActions(
  2112. X        XtWidgetToApplicationContext(m->toplevel),
  2113. X        actions,
  2114. X        XtNumber(actions)
  2115. X    );
  2116. X
  2117. X    /* Add translations for iconification handling */
  2118. X    XtOverrideTranslations(
  2119. X        m->toplevel,
  2120. X        XtParseTranslationTable(
  2121. X            "<MapNotify>: mainmap()\n<UnmapNotify>: mainmap()"
  2122. X        )
  2123. X    );
  2124. X
  2125. X    /* Add translations for shortcut keys */
  2126. X    hotkey_setup(m);
  2127. X
  2128. X    /* Add translations for widget-sensitive help popup */
  2129. X    help_setup(m);
  2130. X}
  2131. X
  2132. X
  2133. X/*
  2134. X * post_realize_config
  2135. X *    Top-level function to perform set-up and initialization tasks
  2136. X *    after realizing all widgets.
  2137. X *
  2138. X * Args:
  2139. X *    m - Pointer to the main widgets structure.
  2140. X *
  2141. X * Return:
  2142. X *    Nothing.
  2143. X */
  2144. Xvoid
  2145. Xpost_realize_config(widgets_t *m, pixmaps_t *p)
  2146. X{
  2147. X    Display        *display = XtDisplay(m->toplevel);
  2148. X    int        depth = DefaultDepth(display, DefaultScreen(display));
  2149. X
  2150. X    /* Make pixmaps for all the button tops */
  2151. X    make_pixmaps(m, p, depth);
  2152. X
  2153. X    /* Get WM_DELETE_WINDOW atom */
  2154. X    delw = XmInternAtom(display, "WM_DELETE_WINDOW", False);
  2155. X
  2156. X    XmProcessTraversal(m->main.playpause_btn, XmTRAVERSE_CURRENT);
  2157. X}
  2158. X
  2159. X
  2160. X/*
  2161. X * register_main_callbacks
  2162. X *    Register all callback routines for widgets in the main window
  2163. X *
  2164. X * Args:
  2165. X *    m - Pointer to the main widgets structure
  2166. X *    s - Pointer to the curstat_t structure
  2167. X *
  2168. X * Return:
  2169. X *    Nothing.
  2170. X */
  2171. XSTATIC void
  2172. Xregister_main_callbacks(widgets_t *m, curstat_t *s)
  2173. X{
  2174. X    /* Main window callbacks */
  2175. X    XtAddCallback(
  2176. X        m->main.form,
  2177. X        XmNfocusCallback,
  2178. X        (XtCallbackProc) cd_form_focus_chg,
  2179. X        (XtPointer) m->main.form
  2180. X    );
  2181. X
  2182. X    XtAddCallback(
  2183. X        m->main.eject_btn,
  2184. X        XmNactivateCallback,
  2185. X        (XtCallbackProc) cd_load_eject,
  2186. X        (XtPointer) s
  2187. X    );
  2188. X    XtAddEventHandler(
  2189. X        m->main.eject_btn,
  2190. X        FocusChangeMask,
  2191. X        False,
  2192. X        (XtEventHandler) cd_btn_focus_chg,
  2193. X        (XtPointer) NULL
  2194. X    );
  2195. X
  2196. X    XtAddCallback(
  2197. X        m->main.poweroff_btn,
  2198. X        XmNactivateCallback,
  2199. X        (XtCallbackProc) cd_poweroff,
  2200. X        (XtPointer) s
  2201. X    );
  2202. X    XtAddEventHandler(
  2203. X        m->main.poweroff_btn,
  2204. X        FocusChangeMask,
  2205. X        False,
  2206. X        (XtEventHandler) cd_btn_focus_chg,
  2207. X        (XtPointer) NULL
  2208. X    );
  2209. X
  2210. X    XtAddCallback(
  2211. X        m->main.dbprog_btn,
  2212. X        XmNactivateCallback,
  2213. X        (XtCallbackProc) cd_dbprog,
  2214. X        (XtPointer) s
  2215. X    );
  2216. X    XtAddEventHandler(
  2217. X        m->main.dbprog_btn,
  2218. X        FocusChangeMask,
  2219. X        False,
  2220. X        (XtEventHandler) cd_btn_focus_chg,
  2221. X        (XtPointer) NULL
  2222. X    );
  2223. X
  2224. X    XtAddCallback(
  2225. X        m->main.time_btn,
  2226. X        XmNactivateCallback,
  2227. X        (XtCallbackProc) cd_time,
  2228. X        (XtPointer) s
  2229. X    );
  2230. X    XtAddEventHandler(
  2231. X        m->main.time_btn,
  2232. X        FocusChangeMask,
  2233. X        False,
  2234. X        (XtEventHandler) cd_btn_focus_chg,
  2235. X        (XtPointer) NULL
  2236. X    );
  2237. X
  2238. X    XtAddCallback(
  2239. X        m->main.ab_btn,
  2240. X        XmNactivateCallback,
  2241. X        (XtCallbackProc) cd_ab,
  2242. X        (XtPointer) s
  2243. X    );
  2244. X    XtAddEventHandler(
  2245. X        m->main.ab_btn,
  2246. X        FocusChangeMask,
  2247. X        False,
  2248. X        (XtEventHandler) cd_btn_focus_chg,
  2249. X        (XtPointer) NULL
  2250. X    );
  2251. X
  2252. X    XtAddCallback(
  2253. X        m->main.sample_btn,
  2254. X        XmNactivateCallback,
  2255. X        (XtCallbackProc) cd_sample,
  2256. X        (XtPointer) s
  2257. X    );
  2258. X    XtAddEventHandler(
  2259. X        m->main.sample_btn,
  2260. X        FocusChangeMask,
  2261. X        False,
  2262. X        (XtEventHandler) cd_btn_focus_chg,
  2263. X        (XtPointer) NULL
  2264. X    );
  2265. X
  2266. X    XtAddCallback(
  2267. X        m->main.keypad_btn,
  2268. X        XmNactivateCallback,
  2269. X        (XtCallbackProc) cd_keypad_popup,
  2270. X        (XtPointer) s
  2271. X    );
  2272. X    XtAddEventHandler(
  2273. X        m->main.keypad_btn,
  2274. X        FocusChangeMask,
  2275. X        False,
  2276. X        (XtEventHandler) cd_btn_focus_chg,
  2277. X        (XtPointer) NULL
  2278. X    );
  2279. X
  2280. X    XtAddCallback(
  2281. X        m->main.help_btn,
  2282. X        XmNactivateCallback,
  2283. X        (XtCallbackProc) cd_help_popup,
  2284. X        (XtPointer) s
  2285. X    );
  2286. X    XtAddEventHandler(
  2287. X        m->main.help_btn,
  2288. X        FocusChangeMask,
  2289. X        False,
  2290. X        (XtEventHandler) cd_btn_focus_chg,
  2291. X        (XtPointer) NULL
  2292. X    );
  2293. X
  2294. X    XtAddCallback(
  2295. X        m->main.level_scale,
  2296. X        XmNvalueChangedCallback,
  2297. X        (XtCallbackProc) cd_level,
  2298. X        (XtPointer) s
  2299. X    );
  2300. X    XtAddCallback(
  2301. X        m->main.level_scale,
  2302. X        XmNdragCallback,
  2303. X        (XtCallbackProc) cd_level,
  2304. X        (XtPointer) s
  2305. X    );
  2306. X
  2307. X    XtAddCallback(
  2308. X        m->main.playpause_btn,
  2309. X        XmNactivateCallback,
  2310. X        (XtCallbackProc) cd_play_pause,
  2311. X        (XtPointer) s
  2312. X    );
  2313. X    XtAddEventHandler(
  2314. X        m->main.playpause_btn,
  2315. X        FocusChangeMask,
  2316. X        False,
  2317. X        (XtEventHandler) cd_btn_focus_chg,
  2318. X        (XtPointer) NULL
  2319. X    );
  2320. X
  2321. X    XtAddCallback(
  2322. X        m->main.stop_btn,
  2323. X        XmNactivateCallback,
  2324. X        (XtCallbackProc) cd_stop,
  2325. X        (XtPointer) s
  2326. X    );
  2327. X    XtAddEventHandler(
  2328. X        m->main.stop_btn,
  2329. X        FocusChangeMask,
  2330. X        False,
  2331. X        (XtEventHandler) cd_btn_focus_chg,
  2332. X        (XtPointer) NULL
  2333. X    );
  2334. X
  2335. X    XtAddCallback(
  2336. X        m->main.prevtrk_btn,
  2337. X        XmNactivateCallback,
  2338. X        (XtCallbackProc) cd_prevtrk,
  2339. X        (XtPointer) s
  2340. X    );
  2341. X    XtAddEventHandler(
  2342. X        m->main.prevtrk_btn,
  2343. X        FocusChangeMask,
  2344. X        False,
  2345. X        (XtEventHandler) cd_btn_focus_chg,
  2346. X        (XtPointer) NULL
  2347. X    );
  2348. X
  2349. X    XtAddCallback(
  2350. X        m->main.nexttrk_btn,
  2351. X        XmNactivateCallback,
  2352. X        (XtCallbackProc) cd_nexttrk,
  2353. X        (XtPointer) s
  2354. X    );
  2355. X    XtAddEventHandler(
  2356. X        m->main.nexttrk_btn,
  2357. X        FocusChangeMask,
  2358. X        False,
  2359. X        (XtEventHandler) cd_btn_focus_chg,
  2360. X        (XtPointer) NULL
  2361. X    );
  2362. X
  2363. X    XtAddCallback(
  2364. X        m->main.previdx_btn,
  2365. X        XmNactivateCallback,
  2366. X        (XtCallbackProc) cd_previdx,
  2367. X        (XtPointer) s
  2368. X    );
  2369. X    XtAddEventHandler(
  2370. X        m->main.previdx_btn,
  2371. X        FocusChangeMask,
  2372. X        False,
  2373. X        (XtEventHandler) cd_btn_focus_chg,
  2374. X        (XtPointer) NULL
  2375. X    );
  2376. X
  2377. X    XtAddCallback(
  2378. X        m->main.nextidx_btn,
  2379. X        XmNactivateCallback,
  2380. X        (XtCallbackProc) cd_nextidx,
  2381. X        (XtPointer) s
  2382. X    );
  2383. X    XtAddEventHandler(
  2384. X        m->main.nextidx_btn,
  2385. X        FocusChangeMask,
  2386. X        False,
  2387. X        (XtEventHandler) cd_btn_focus_chg,
  2388. X        (XtPointer) NULL
  2389. X    );
  2390. X
  2391. X    XtAddCallback(
  2392. X        m->main.rew_btn,
  2393. X        XmNarmCallback,
  2394. X        (XtCallbackProc) cd_rew,
  2395. X        (XtPointer) s
  2396. X    );
  2397. X    XtAddCallback(
  2398. X        m->main.rew_btn,
  2399. X        XmNdisarmCallback,
  2400. X        (XtCallbackProc) cd_rew,
  2401. X        (XtPointer) s
  2402. X    );
  2403. X    XtAddCallback(
  2404. X        m->main.rew_btn,
  2405. X        XmNactivateCallback,
  2406. X        (XtCallbackProc) cd_rew,
  2407. X        (XtPointer) s
  2408. X    );
  2409. X    XtAddEventHandler(
  2410. X        m->main.rew_btn,
  2411. X        FocusChangeMask,
  2412. X        False,
  2413. X        (XtEventHandler) cd_btn_focus_chg,
  2414. X        (XtPointer) NULL
  2415. X    );
  2416. X
  2417. X    XtAddCallback(
  2418. X        m->main.ff_btn,
  2419. X        XmNarmCallback,
  2420. X        (XtCallbackProc) cd_ff,
  2421. X        (XtPointer) s
  2422. X    );
  2423. X    XtAddCallback(
  2424. X        m->main.ff_btn,
  2425. X        XmNdisarmCallback,
  2426. X        (XtCallbackProc) cd_ff,
  2427. X        (XtPointer) s
  2428. X    );
  2429. X    XtAddCallback(
  2430. X        m->main.ff_btn,
  2431. X        XmNactivateCallback,
  2432. X        (XtCallbackProc) cd_ff,
  2433. X        (XtPointer) s
  2434. X    );
  2435. X    XtAddEventHandler(
  2436. X        m->main.ff_btn,
  2437. X        FocusChangeMask,
  2438. X        False,
  2439. X        (XtEventHandler) cd_btn_focus_chg,
  2440. X        (XtPointer) NULL
  2441. X    );
  2442. X
  2443. X    /* Install WM_DELETE_WINDOW handler */
  2444. X    XmAddWMProtocolCallback(
  2445. X        m->toplevel,
  2446. X        delw,
  2447. X        (XtCallbackProc) cd_exit,
  2448. X        (XtPointer) s
  2449. X    );
  2450. X}
  2451. X
  2452. X
  2453. X/*
  2454. X * register_keypad_callbacks
  2455. X *    Register all callback routines for widgets in the keypad window
  2456. X *
  2457. X * Args:
  2458. X *    m - Pointer to the main widgets structure
  2459. X *    s - Pointer to the curstat_t structure
  2460. X *
  2461. X * Return:
  2462. X *    Nothing.
  2463. X */
  2464. XSTATIC void
  2465. Xregister_keypad_callbacks(widgets_t *m, curstat_t *s)
  2466. X{
  2467. X    int    i;
  2468. X
  2469. X    XtAddCallback(
  2470. X        m->keypad.form,
  2471. X        XmNfocusCallback,
  2472. X        (XtCallbackProc) cd_form_focus_chg,
  2473. X        (XtPointer) m->keypad.form
  2474. X    );
  2475. X    /* Keypad popup callbacks */
  2476. X    for (i = 0; i < 10; i++) {
  2477. X        XtAddCallback(
  2478. X            m->keypad.num_btn[i],
  2479. X            XmNactivateCallback,
  2480. X            (XtCallbackProc) cd_keypad_num,
  2481. X            (XtPointer) i
  2482. X        );
  2483. X    }
  2484. X    XtAddCallback(
  2485. X        m->keypad.enter_btn,
  2486. X        XmNactivateCallback,
  2487. X        (XtCallbackProc) cd_keypad_enter,
  2488. X        (XtPointer) s
  2489. X    );
  2490. X    XtAddCallback(
  2491. X        m->keypad.cancel_btn,
  2492. X        XmNactivateCallback,
  2493. X        (XtCallbackProc) cd_keypad_popdown,
  2494. X        (XtPointer) s
  2495. X    );
  2496. X    XtAddCallback(
  2497. X        m->keypad.clear_btn,
  2498. X        XmNactivateCallback,
  2499. X        (XtCallbackProc) cd_keypad_clear,
  2500. X        (XtPointer) s
  2501. X    );
  2502. X
  2503. X    /* Install WM_DELETE_WINDOW handler */
  2504. X    XmAddWMProtocolCallback(
  2505. X        XtParent(m->keypad.form),
  2506. X        delw,
  2507. X        (XtCallbackProc) cd_keypad_popdown,
  2508. X        (XtPointer) s
  2509. X    );
  2510. X}
  2511. X
  2512. X
  2513. X/*
  2514. X * register_dbprog_callbacks
  2515. X *    Register all callback routines for widgets in the
  2516. X *    database/program window
  2517. X *
  2518. X * Args:
  2519. X *    m - Pointer to the main widgets structure
  2520. X *    s - Pointer to the curstat_t structure
  2521. X *
  2522. X * Return:
  2523. X *    Nothing.
  2524. X */
  2525. XSTATIC void
  2526. Xregister_dbprog_callbacks(widgets_t *m, curstat_t *s)
  2527. X{
  2528. X    /* Database/program popup callbacks */
  2529. X    XtAddCallback(
  2530. X        m->dbprog.form,
  2531. X        XmNfocusCallback,
  2532. X        (XtCallbackProc) cd_form_focus_chg,
  2533. X        (XtPointer) m->dbprog.form
  2534. X    );
  2535. X    XtAddCallback(
  2536. X        m->dbprog.about_btn,
  2537. X        XmNactivateCallback,
  2538. X        (XtCallbackProc) cd_about,
  2539. X        (XtPointer) s
  2540. X    );
  2541. X    XtAddCallback(
  2542. X        m->dbprog.dtitle_txt,
  2543. X        XmNvalueChangedCallback,
  2544. X        (XtCallbackProc) dbprog_dtitle_new,
  2545. X        (XtPointer) s
  2546. X    );
  2547. X    XtAddCallback(
  2548. X        m->dbprog.dtitle_txt,
  2549. X        XmNactivateCallback,
  2550. X        (XtCallbackProc) dbprog_dtitle_new,
  2551. X        (XtPointer) s
  2552. X    );
  2553. X    XtAddCallback(
  2554. X        m->dbprog.extd_btn,
  2555. X        XmNactivateCallback,
  2556. X        (XtCallbackProc) dbprog_extd,
  2557. X        (XtPointer) s
  2558. X    );
  2559. X    XtAddCallback(
  2560. X        m->dbprog.trk_list,
  2561. X        XmNdefaultActionCallback,
  2562. X        (XtCallbackProc) dbprog_trklist_play,
  2563. X        (XtPointer) s
  2564. X    );
  2565. X    XtAddCallback(
  2566. X        m->dbprog.trk_list,
  2567. X        XmNbrowseSelectionCallback,
  2568. X        (XtCallbackProc) dbprog_trklist_select,
  2569. X        (XtPointer) s
  2570. X    );
  2571. X    XtAddCallback(
  2572. X        m->dbprog.ttitle_txt,
  2573. X        XmNvalueChangedCallback,
  2574. X        (XtCallbackProc) dbprog_ttitle_new,
  2575. X        (XtPointer) s
  2576. X    );
  2577. X    XtAddCallback(
  2578. X        m->dbprog.ttitle_txt,
  2579. X        XmNactivateCallback,
  2580. X        (XtCallbackProc) dbprog_ttitle_new,
  2581. X        (XtPointer) s
  2582. X    );
  2583. X    XtAddCallback(
  2584. X        m->dbprog.extt_btn,
  2585. X        XmNactivateCallback,
  2586. X        (XtCallbackProc) dbprog_extt,
  2587. X        (XtPointer) TRUE
  2588. X    );
  2589. X    XtAddCallback(
  2590. X        m->dbprog.pgmseq_txt,
  2591. X        XmNmodifyVerifyCallback,
  2592. X        (XtCallbackProc) dbprog_pgmseq_verify,
  2593. X        (XtPointer) s
  2594. X    );
  2595. X    XtAddCallback(
  2596. X        m->dbprog.pgmseq_txt,
  2597. X        XmNvalueChangedCallback,
  2598. X        (XtCallbackProc) dbprog_pgmseq_txtchg,
  2599. X        (XtPointer) s
  2600. X    );
  2601. X    XtAddCallback(
  2602. X        m->dbprog.pgmseq_txt,
  2603. X        XmNfocusCallback,
  2604. X        (XtCallbackProc) dbprog_pgmseq_focuschg,
  2605. X        (XtPointer) s
  2606. X    );
  2607. X    XtAddCallback(
  2608. X        m->dbprog.pgmseq_txt,
  2609. X        XmNlosingFocusCallback,
  2610. X        (XtCallbackProc) dbprog_pgmseq_focuschg,
  2611. X        (XtPointer) s
  2612. X    );
  2613. X    XtAddCallback(
  2614. X        m->dbprog.addpgm_btn,
  2615. X        XmNactivateCallback,
  2616. X        (XtCallbackProc) dbprog_addpgm,
  2617. X        (XtPointer) s
  2618. X    );
  2619. X    XtAddCallback(
  2620. X        m->dbprog.clrpgm_btn,
  2621. X        XmNactivateCallback,
  2622. X        (XtCallbackProc) dbprog_clrpgm,
  2623. X        (XtPointer) s
  2624. X    );
  2625. X    XtAddCallback(
  2626. X        m->dbprog.playpgm_btn,
  2627. X        XmNactivateCallback,
  2628. X        (XtCallbackProc) dbprog_playpgm,
  2629. X        (XtPointer) s
  2630. X    );
  2631. X    XtAddCallback(
  2632. X        m->dbprog.savedb_btn,
  2633. X        XmNactivateCallback,
  2634. X        (XtCallbackProc) dbprog_savedb,
  2635. X        (XtPointer) s
  2636. X    );
  2637. X    XtAddCallback(
  2638. X        m->dbprog.loaddb_btn,
  2639. X        XmNactivateCallback,
  2640. X        (XtCallbackProc) dbprog_loaddb,
  2641. X        (XtPointer) s
  2642. X    );
  2643. X    XtAddCallback(
  2644. X        m->dbprog.linkdb_btn,
  2645. X        XmNactivateCallback,
  2646. X        (XtCallbackProc) dbprog_link,
  2647. X        (XtPointer) s
  2648. X    );
  2649. X    XtAddCallback(
  2650. X        m->dbprog.cancel_btn,
  2651. X        XmNactivateCallback,
  2652. X        (XtCallbackProc) dbprog_cancel,
  2653. X        (XtPointer) s
  2654. X    );
  2655. X
  2656. X    /* Install WM_DELETE_WINDOW handler */
  2657. X    XmAddWMProtocolCallback(
  2658. X        XtParent(m->dbprog.form),
  2659. X        delw,
  2660. X        (XtCallbackProc) dbprog_cancel,
  2661. X        (XtPointer) s
  2662. X    );
  2663. X}
  2664. X
  2665. X
  2666. X/*
  2667. X * register_extd_callbacks
  2668. X *    Register all callback routines for widgets in the extended
  2669. X *    disc information window
  2670. X *
  2671. X * Args:
  2672. X *    m - Pointer to the main widgets structure
  2673. X *    s - Pointer to the curstat_t structure
  2674. X *
  2675. X * Return:
  2676. X *    Nothing.
  2677. X */
  2678. XSTATIC void
  2679. Xregister_extd_callbacks(widgets_t *m, curstat_t *s)
  2680. X{
  2681. X    XtAddCallback(
  2682. X        m->dbextd.form,
  2683. X        XmNfocusCallback,
  2684. X        (XtCallbackProc) cd_form_focus_chg,
  2685. X        (XtPointer) m->dbextd.form
  2686. X    );
  2687. X    XtAddCallback(
  2688. X        m->dbextd.disc_txt,
  2689. X        XmNvalueChangedCallback,
  2690. X        (XtCallbackProc) dbprog_set_changed,
  2691. X        (XtPointer) s
  2692. X    );
  2693. X    XtAddCallback(
  2694. X        m->dbextd.ok_btn,
  2695. X        XmNactivateCallback,
  2696. X        (XtCallbackProc) dbprog_extd_ok,
  2697. X        (XtPointer) s
  2698. X    );
  2699. X    XtAddCallback(
  2700. X        m->dbextd.clear_btn,
  2701. X        XmNactivateCallback,
  2702. X        (XtCallbackProc) dbprog_extd_clear,
  2703. X        (XtPointer) s
  2704. X    );
  2705. X    XtAddCallback(
  2706. X        m->dbextd.cancel_btn,
  2707. X        XmNactivateCallback,
  2708. X        (XtCallbackProc) dbprog_extd_cancel,
  2709. X        (XtPointer) s
  2710. X    );
  2711. X
  2712. X    /* Install WM_DELETE_WINDOW handler */
  2713. X    XmAddWMProtocolCallback(
  2714. X        XtParent(m->dbextd.form),
  2715. X        delw,
  2716. X        (XtCallbackProc) dbprog_extd_cancel,
  2717. X        (XtPointer) s
  2718. X    );
  2719. X}
  2720. X
  2721. X
  2722. X/*
  2723. X * register_extt_callbacks
  2724. X *    Register all callback routines for widgets in the extended
  2725. X *    track information window
  2726. X *
  2727. X * Args:
  2728. X *    m - Pointer to the main widgets structure
  2729. X *    s - Pointer to the curstat_t structure
  2730. X *
  2731. X * Return:
  2732. X *    Nothing.
  2733. X */
  2734. XSTATIC void
  2735. Xregister_extt_callbacks(widgets_t *m, curstat_t *s)
  2736. X{
  2737. X    XtAddCallback(
  2738. X        m->dbextt.form,
  2739. X        XmNfocusCallback,
  2740. X        (XtCallbackProc) cd_form_focus_chg,
  2741. X        (XtPointer) m->dbextt.form
  2742. X    );
  2743. X    XtAddCallback(
  2744. X        m->dbextt.trk_txt,
  2745. X        XmNvalueChangedCallback,
  2746. X        (XtCallbackProc) dbprog_set_changed,
  2747. X        (XtPointer) s
  2748. X    );
  2749. X    XtAddCallback(
  2750. X        m->dbextt.ok_btn,
  2751. X        XmNactivateCallback,
  2752. X        (XtCallbackProc) dbprog_extt_ok,
  2753. X        (XtPointer) s
  2754. X    );
  2755. X    XtAddCallback(
  2756. X        m->dbextt.clear_btn,
  2757. X        XmNactivateCallback,
  2758. X        (XtCallbackProc) dbprog_extt_clear,
  2759. X        (XtPointer) s
  2760. X    );
  2761. X    XtAddCallback(
  2762. X        m->dbextt.cancel_btn,
  2763. X        XmNactivateCallback,
  2764. X        (XtCallbackProc) dbprog_extt_cancel,
  2765. X        (XtPointer) s
  2766. X    );
  2767. X
  2768. X    /* Install WM_DELETE_WINDOW handler */
  2769. X    XmAddWMProtocolCallback(
  2770. X        XtParent(m->dbextt.form),
  2771. X        delw,
  2772. X        (XtCallbackProc) dbprog_extt_cancel,
  2773. X        (XtPointer) s
  2774. X    );
  2775. X}
  2776. X
  2777. X
  2778. X/*
  2779. X * register_dirsel_callbacks
  2780. X *    Register all callback routines for widgets in the CD database
  2781. X *    directory selector window
  2782. X *
  2783. X * Args:
  2784. X *    m - Pointer to the main widgets structure
  2785. X *    s - Pointer to the curstat_t structure
  2786. X *
  2787. X * Return:
  2788. X *    Nothing.
  2789. X */
  2790. XSTATIC void
  2791. Xregister_dirsel_callbacks(widgets_t *m, curstat_t *s)
  2792. X{
  2793. X    /* Directory selector popup callbacks */
  2794. X    XtAddCallback(
  2795. X        m->dirsel.form,
  2796. X        XmNfocusCallback,
  2797. X        (XtCallbackProc) cd_form_focus_chg,
  2798. X        (XtPointer) m->dirsel.form
  2799. X    );
  2800. X    XtAddCallback(
  2801. X        m->dirsel.dir_list,
  2802. X        XmNdefaultActionCallback,
  2803. X        (XtCallbackProc) dbprog_dirsel_ok,
  2804. X        (XtPointer) s
  2805. X    );
  2806. X    XtAddCallback(
  2807. X        m->dirsel.dir_list,
  2808. X        XmNbrowseSelectionCallback,
  2809. X        (XtCallbackProc) dbprog_dirsel_select,
  2810. X        (XtPointer) s
  2811. X    );
  2812. X    XtAddCallback(
  2813. X        m->dirsel.ok_btn,
  2814. X        XmNactivateCallback,
  2815. X        (XtCallbackProc) dbprog_dirsel_ok,
  2816. X        (XtPointer) s
  2817. X    );
  2818. X    XtAddCallback(
  2819. X        m->dirsel.cancel_btn,
  2820. X        XmNactivateCallback,
  2821. X        (XtCallbackProc) dbprog_dirsel_cancel,
  2822. X        (XtPointer) s
  2823. X    );
  2824. X
  2825. X    /* Install WM_DELETE_WINDOW handler */
  2826. X    XmAddWMProtocolCallback(
  2827. X        XtParent(m->dirsel.form),
  2828. X        delw,
  2829. X        (XtCallbackProc) dbprog_dirsel_cancel,
  2830. X        (XtPointer) s
  2831. X    );
  2832. X}
  2833. X
  2834. X
  2835. X/*
  2836. X * register_linksel_callbacks
  2837. X *    Register all callback routines for widgets in the CD database
  2838. X *    search-link window
  2839. X *
  2840. X * Args:
  2841. X *    m - Pointer to the main widgets structure
  2842. X *    s - Pointer to the curstat_t structure
  2843. X *
  2844. X * Return:
  2845. X *    Nothing.
  2846. X */
  2847. XSTATIC void
  2848. Xregister_linksel_callbacks(widgets_t *m, curstat_t *s)
  2849. X{
  2850. X    /* Link selector popup callbacks */
  2851. X    XtAddCallback(
  2852. X        m->linksel.form,
  2853. X        XmNfocusCallback,
  2854. X        (XtCallbackProc) cd_form_focus_chg,
  2855. X        (XtPointer) m->linksel.form
  2856. X    );
  2857. X    XtAddCallback(
  2858. X        m->linksel.link_list,
  2859. X        XmNdefaultActionCallback,
  2860. X        (XtCallbackProc) dbprog_linksel_ok,
  2861. X        (XtPointer) s
  2862. X    );
  2863. X    XtAddCallback(
  2864. X        m->linksel.link_list,
  2865. X        XmNbrowseSelectionCallback,
  2866. X        (XtCallbackProc) dbprog_linksel_select,
  2867. X        (XtPointer) s
  2868. X    );
  2869. X    XtAddCallback(
  2870. X        m->linksel.ok_btn,
  2871. X        XmNactivateCallback,
  2872. X        (XtCallbackProc) dbprog_linksel_ok,
  2873. X        (XtPointer) s
  2874. X    );
  2875. X    XtAddCallback(
  2876. X        m->linksel.cancel_btn,
  2877. X        XmNactivateCallback,
  2878. X        (XtCallbackProc) dbprog_linksel_cancel,
  2879. X        (XtPointer) s
  2880. X    );
  2881. X
  2882. X    /* Install WM_DELETE_WINDOW handler */
  2883. X    XmAddWMProtocolCallback(
  2884. X        XtParent(m->linksel.form),
  2885. X        delw,
  2886. X        (XtCallbackProc) dbprog_linksel_cancel,
  2887. X        (XtPointer) s
  2888. X    );
  2889. X}
  2890. X
  2891. X
  2892. X/*
  2893. X * register_help_callbacks
  2894. X *    Register all callback routines for widgets in the help text
  2895. X *    display window
  2896. X *
  2897. X * Args:
  2898. X *    m - Pointer to the main widgets structure
  2899. X *    s - Pointer to the curstat_t structure
  2900. X *
  2901. X * Return:
  2902. X *    Nothing.
  2903. X */
  2904. XSTATIC void
  2905. Xregister_help_callbacks(widgets_t *m, curstat_t *s)
  2906. X{
  2907. X    /* Help popup window callbacks */
  2908. X    XtAddCallback(
  2909. X        m->help.form,
  2910. X        XmNfocusCallback,
  2911. X        (XtCallbackProc) cd_form_focus_chg,
  2912. X        (XtPointer) m->help.form
  2913. X    );
  2914. X    XtAddCallback(
  2915. X        m->help.ok_btn,
  2916. X        XmNactivateCallback,
  2917. X        (XtCallbackProc) cd_help_popdown,
  2918. X        (XtPointer) s
  2919. X    );
  2920. X
  2921. X    /* Install WM_DELETE_WINDOW handler */
  2922. X    XmAddWMProtocolCallback(
  2923. X        XtParent(m->help.form),
  2924. X        delw,
  2925. X        (XtCallbackProc) cd_help_popdown,
  2926. X        (XtPointer) s
  2927. X    );
  2928. X}
  2929. X
  2930. X
  2931. X/*
  2932. X * register_dialog_callbacks
  2933. X *    Register all callback routines for widgets in the dialog
  2934. X *    box windows
  2935. X *
  2936. X * Args:
  2937. X *    m - Pointer to the main widgets structure
  2938. X *    s - Pointer to the curstat_t structure
  2939. X *
  2940. X * Return:
  2941. X *    Nothing.
  2942. X */
  2943. XSTATIC void
  2944. Xregister_dialog_callbacks(widgets_t *m, curstat_t *s)
  2945. X{
  2946. X    Widget    ok_btn;
  2947. X
  2948. X    ok_btn = XmMessageBoxGetChild(m->dialog.warning, XmDIALOG_OK_BUTTON);
  2949. X    XtAddCallback(
  2950. X        ok_btn,
  2951. X        XmNactivateCallback,
  2952. X        (XtCallbackProc) cd_warning_popdown,
  2953. X        (XtPointer) s
  2954. X    );
  2955. X
  2956. X    ok_btn = XmMessageBoxGetChild(m->dialog.fatal, XmDIALOG_OK_BUTTON);
  2957. X    XtAddCallback(
  2958. X        ok_btn,
  2959. X        XmNactivateCallback,
  2960. X        (XtCallbackProc) cd_fatal_popdown,
  2961. X        (XtPointer) s
  2962. X    );
  2963. X}
  2964. X
  2965. X
  2966. X/*
  2967. X * register_callbacks
  2968. X *    Top-level function to register all callback routines
  2969. X *
  2970. X * Args:
  2971. X *    m - Pointer to the main widgets structure
  2972. X *    s - Pointer to the curstat_t structure
  2973. X *
  2974. X * Return:
  2975. X *    Nothing.
  2976. X */
  2977. Xvoid
  2978. Xregister_callbacks(widgets_t *m, curstat_t *s)
  2979. X{
  2980. X    register_main_callbacks(m, s);
  2981. X    register_keypad_callbacks(m, s);
  2982. X    register_dbprog_callbacks(m, s);
  2983. X    register_extd_callbacks(m, s);
  2984. X    register_extt_callbacks(m, s);
  2985. X    register_dirsel_callbacks(m, s);
  2986. X    register_linksel_callbacks(m, s);
  2987. X    register_help_callbacks(m, s);
  2988. X    register_dialog_callbacks(m, s);
  2989. X}
  2990. X
  2991. X
  2992. END_OF_FILE
  2993. if test 60957 -ne `wc -c <'widget.c'`; then
  2994.     echo shar: \"'widget.c'\" unpacked with wrong size!
  2995. fi
  2996. # end of 'widget.c'
  2997. fi
  2998. if test ! -d 'bitmaps' ; then
  2999.     echo shar: Creating directory \"'bitmaps'\"
  3000.     mkdir 'bitmaps'
  3001. fi
  3002. if test -f 'bitmaps/Imakefile' -a "${1}" != "-c" ; then 
  3003.   echo shar: Will not clobber existing file \"'bitmaps/Imakefile'\"
  3004. else
  3005. echo shar: Extracting \"'bitmaps/Imakefile'\" \(382 characters\)
  3006. sed "s/^X//" >'bitmaps/Imakefile' <<'END_OF_FILE'
  3007. X/*
  3008. X * @(#)Imakefile    1.3 93/09/28
  3009. X *
  3010. X * Imakefile for xmcd/bitmaps
  3011. X */
  3012. X
  3013. X
  3014. XSRCS=    ab.xbm \
  3015. X    btnlbl.xbm \
  3016. X    dbprog.xbm \
  3017. X    eject.xbm \
  3018. X    ff.xbm \
  3019. X    help.xbm \
  3020. X    keypad.xbm \
  3021. X    lock.xbm \
  3022. X    logo.xbm \
  3023. X    nextidx.xbm \
  3024. X    nexttrk.xbm \
  3025. X    playpaus.xbm \
  3026. X    poweroff.xbm \
  3027. X    previdx.xbm \
  3028. X    prevtrk.xbm \
  3029. X    repeat.xbm \
  3030. X    rew.xbm \
  3031. X    sample.xbm \
  3032. X    shuffle.xbm \
  3033. X    stop.xbm \
  3034. X    time.xbm \
  3035. X    xmcd.xbm
  3036. X
  3037. XAllTarget()
  3038. X
  3039. END_OF_FILE
  3040. if test 382 -ne `wc -c <'bitmaps/Imakefile'`; then
  3041.     echo shar: \"'bitmaps/Imakefile'\" unpacked with wrong size!
  3042. fi
  3043. # end of 'bitmaps/Imakefile'
  3044. fi
  3045. echo shar: End of archive 11 \(of 13\).
  3046. cp /dev/null ark11isdone
  3047. MISSING=""
  3048. for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 ; do
  3049.     if test ! -f ark${I}isdone ; then
  3050.     MISSING="${MISSING} ${I}"
  3051.     fi
  3052. done
  3053. if test "${MISSING}" = "" ; then
  3054.     echo You have unpacked all 13 archives.
  3055.     echo "Now read the README and INSTALL files for further instructions."
  3056.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  3057. else
  3058.     echo You still need to unpack the following archives:
  3059.     echo "        " ${MISSING}
  3060. fi
  3061. ##  End of shell archive.
  3062. exit 0
  3063. -- 
  3064.     ///  Ti Kan                vorsprung durch technik
  3065.    ///   AMB Research Laboratories, Sunnyvale, CA. USA
  3066.   ///    ti@amb.org
  3067.  //////  ...!{decwrl,synopsys,tandem,tsoft,ultra}!sgiblab!bazooka!ti
  3068. ///      ...!uunet!bazooka!ti
  3069.  
  3070.  
  3071.  
  3072. exit 0 # Just in case...
  3073. -- 
  3074.   // chris@Sterling.COM           | Send comp.sources.x submissions to:
  3075. \X/  Amiga: The only way to fly!  |    sources-x@sterling.com
  3076.        "It's intuitively obvious to the most casual observer..."
  3077.  GCS d++(--) -p+ c++ !l u++ e+ m+(-) s++/++ n h--- f+ g+++ w+ t++ r+ y+
  3078.