dockapps/ascd/ascd/wings_main.c

1071 lines
29 KiB
C

/* ===========================================================================
* AScd: the AfterStep and WindowMaker CD player
* gui_wings.c: window handling using WINGs toolkit
* ===========================================================================
* Copyright (c) 1999 Denis Bourez and Rob Malda. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Denis Bourez & Rob Malda
* 4. Neither the name of the author nor the names of any co-contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY DENIS BOUREZ AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL DENIS BOUREZ, ROB MALDA OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
* ===========================================================================
*/
#include <dirent.h>
#include <WINGs.h>
#include "ext.h"
/*int old_track = 0;*/
void close_win(WMWidget *self, void *data) {
WMCloseWindow(win);
en_vue = FALSE;
muted_volume = atoi(WMGetTextFieldText(b_mutedvol));
min_volume = atoi(WMGetTextFieldText(b_minvol));
max_volume = atoi(WMGetTextFieldText(b_maxvol));
cue_time = atoi(WMGetTextFieldText(b_cuetime));
fade_step = atoi(WMGetTextFieldText(b_fadestep));
}
void close_aboutwin(WMWidget *self, void *data) {
WMCloseWindow(aboutwin);
about_en_vue = FALSE;
}
void close_dbwin(WMWidget *self, void *data) {
char txt[127];
char txt2 [127];
WMCloseWindow(dbwin);
strcpy(cd->artist, WMGetTextFieldText(db_artist));
strcpy(cd->cdname, WMGetTextFieldText(db_title));
if (strlen(WMGetTextFieldText(db_track)) > 0) {
cd->trk[db_curtrack - 1].songname = malloc(strlen(WMGetTextFieldText(db_track)) + 1);
strcpy(cd->trk[db_curtrack - 1].songname, WMGetTextFieldText(db_track));
}
save();
load();
if (cd->artist != NULL) {
strcpy(txt, cd->artist);
if (strcmp(txt, "") == 0) strcpy(txt, "unknown artist");
} else {
strcpy(txt, "unknown artist");
}
strcat(txt, "\n");
if (cd->cdname != NULL) {
strcpy(txt2, cd->cdname);
if (strcmp(txt2, "") == 0) strcpy(txt2, "unknown album");
} else {
strcpy(txt2, "unknown album");
}
strcat(txt, txt2);
WMSetButtonText(b_title, txt);
db_en_vue = FALSE;
}
void quit_ascd(WMWidget *self, void *data) {
exit(0);
}
void save_cb(WMWidget *self, void *data) {
muted_volume = atoi(WMGetTextFieldText(b_mutedvol));
min_volume = atoi(WMGetTextFieldText(b_minvol));
max_volume = atoi(WMGetTextFieldText(b_maxvol));
cue_time = atoi(WMGetTextFieldText(b_cuetime));
fade_step = atoi(WMGetTextFieldText(b_fadestep));
cd_device = WMGetTextFieldText(b_device);
save_rc_file();
}
void track_select(WMWidget *self, void *data) {
show_db_pos = 0;
direct_track = WMGetPopUpButtonSelectedItem(self) + 1;
cd_control(DIRECTTRACK);
old_track = 0;
if (cur_cdmode == WM_CDM_STOPPED) cd_control(PLAY);
}
void theme_pick(WMWidget *self, void *data) {
strcpy(theme, WMGetPopUpButtonItem(self, WMGetPopUpButtonSelectedItem(self)));
fak_load_theme(theme, TRUE);
fak_maskset();
}
void help_cb(WMWidget *self, void *data) {
quick_reference(0);
}
void mode1_cb(WMWidget *self, void *data) {
if (WMGetButtonSelected(b_mode1)) {
WMSetButtonSelected((b_mode2), FALSE);
} else {
WMSetButtonSelected((b_mode2), TRUE);
}
if (WMGetButtonSelected(b_mode1)) {
if (WMGetButtonSelected(b_mode3)) time_mode = 0;
else time_mode = 1;
} else {
if (WMGetButtonSelected(b_mode3)) time_mode = 2;
else time_mode = 3;
}
}
void mode2_cb(WMWidget *self, void *data) {
if (WMGetButtonSelected(b_mode2)) {
WMSetButtonSelected((b_mode1), FALSE);
} else {
WMSetButtonSelected((b_mode1), TRUE);
}
if (WMGetButtonSelected(b_mode1)) {
if (WMGetButtonSelected(b_mode3)) time_mode = 0;
else time_mode = 1;
} else {
if (WMGetButtonSelected(b_mode3)) time_mode = 2;
else time_mode = 3;
}
}
void mode3_cb(WMWidget *self, void *data) {
if (WMGetButtonSelected(b_mode3)) {
WMSetButtonSelected((b_mode4), FALSE);
} else {
WMSetButtonSelected((b_mode4), TRUE);
}
if (WMGetButtonSelected(b_mode1)) {
if (WMGetButtonSelected(b_mode3)) time_mode = 0;
else time_mode = 1;
} else {
if (WMGetButtonSelected(b_mode3)) time_mode = 2;
else time_mode = 3;
}
}
void mode4_cb(WMWidget *self, void *data) {
if (WMGetButtonSelected(b_mode4)) {
WMSetButtonSelected((b_mode3), FALSE);
} else {
WMSetButtonSelected((b_mode3), TRUE);
}
if (WMGetButtonSelected(b_mode1)) {
if (WMGetButtonSelected(b_mode3)) time_mode = 0;
else time_mode = 1;
} else {
if (WMGetButtonSelected(b_mode3)) time_mode = 2;
else time_mode = 3;
}
}
void autoplay_cb(WMWidget *self, void *data) {
if (autoplay) autoplay = 0;
else autoplay = 1;
if (WMGetButtonSelected(b_mode1)) {
if (WMGetButtonSelected(b_mode3)) time_mode = 0;
else time_mode = 1;
} else {
if (WMGetButtonSelected(b_mode3)) time_mode = 2;
else time_mode = 3;
}
}
void autorepeat_cb(WMWidget *self, void *data) {
if (autorepeat) autorepeat = 0;
else autorepeat = 1;
}
void ignoreavoid_cb(WMWidget *self, void *data) {
if (ignore_avoid) ignore_avoid = 0;
else ignore_avoid = 1;
}
void upper_cb(WMWidget *self, void *data) {
if (force_upper) force_upper = 0;
else force_upper = 1;
}
void scroll_cb(WMWidget *self, void *data) {
if (show_db) show_db = 0;
else show_db = 1;
}
void artist_cb(WMWidget *self, void *data) {
if (show_artist) show_artist = 0;
else show_artist = 1;
}
void volume_cb(WMWidget *self, void *data) {
if (cur_cdmode != WM_CDM_EJECTED) {
volume = WMGetSliderValue(self);
cd_volume(volume, 10, max_volume);
redraw = TRUE;
}
}
/* --------------------------------------------------- */
void create_about_window(WMScreen *scr) {
char txt[256];
WMWidget *lb1, *lb2, *lb3, *lb4, *lb5, *lb6;
WMFont *font;
aboutwin = WMCreateWindow(scr, "AScd-about");
WMSetWindowCloseAction(aboutwin, close_aboutwin, NULL);
WMSetWindowTitle(aboutwin, "AScd Info");
WMResizeWidget(aboutwin, 350, 170);
lb1 = WMCreateLabel(aboutwin);
WMResizeWidget(lb1, 35, 20);
WMMoveWidget(lb1, 10, 10);
font = WMBoldSystemFontOfSize(scr, 12);
if (font) {
WMSetLabelFont(lb1, font);
WMReleaseFont(font);
}
WMSetLabelText(lb1, "AScd");
lb2 = WMCreateLabel(aboutwin);
WMResizeWidget(lb2, 200, 20);
WMMoveWidget(lb2, 50, 10);
sprintf(txt, "release %s", VERSION);
WMSetLabelText(lb2, txt);
lb3 = WMCreateLabel(aboutwin);
WMResizeWidget(lb3, 280, 40);
WMMoveWidget(lb3, 50, 30);
font = WMSystemFontOfSize(scr, 10);
if (font) {
WMSetLabelFont(lb3, font);
WMReleaseFont(font);
}
sprintf(txt, "(c) 1996-1999 Denis Bourez and Rob Malda\nContact: denis@rsn.fdn.fr\nhttp://worldserver.oleane.com/rsn/ascd-en.html");
WMSetLabelText(lb3, txt);
lb5 = WMCreateLabel(aboutwin);
WMResizeWidget(lb5, 60, 20);
WMMoveWidget(lb5, 10, 70);
font = WMBoldSystemFontOfSize(scr, 10);
if (font) {
WMSetLabelFont(lb5, font);
WMReleaseFont(font);
}
WMSetLabelText(lb5, "Ctrl:");
lb4 = WMCreateLabel(aboutwin);
WMResizeWidget(lb4, 260, 20);
WMMoveWidget(lb4, 50, 70);
font = WMSystemFontOfSize(scr, 10);
if (font) {
WMSetLabelFont(lb4, font);
WMReleaseFont(font);
}
sprintf(txt, "CD Control %s + %s", cd_control_version(), wm_libver_string());
WMSetLabelText(lb4, txt);
lb6 = WMCreateLabel(aboutwin);
WMResizeWidget(lb6, 60, 20);
WMMoveWidget(lb6, 10, 85);
font = WMBoldSystemFontOfSize(scr, 10);
if (font) {
WMSetLabelFont(lb6, font);
WMReleaseFont(font);
}
WMSetLabelText(lb6, "Theme:");
about_th1 = WMCreateLabel(aboutwin);
WMResizeWidget(about_th1, 280, 12);
WMMoveWidget(about_th1, 50, 89);
font = WMSystemFontOfSize(scr, 10);
if (font) {
WMSetLabelFont(about_th1, font);
WMReleaseFont(font);
}
WMSetLabelText(about_th1, "A");
about_th2 = WMCreateLabel(aboutwin);
WMResizeWidget(about_th2, 280, 12);
WMMoveWidget(about_th2, 50, 101);
font = WMSystemFontOfSize(scr, 10);
if (font) {
WMSetLabelFont(about_th2, font);
WMReleaseFont(font);
}
WMSetLabelText(about_th2, "B");
about_th3 = WMCreateLabel(aboutwin);
WMResizeWidget(about_th3, 280, 12);
WMMoveWidget(about_th3, 50, 113);
font = WMSystemFontOfSize(scr, 10);
if (font) {
WMSetLabelFont(about_th3, font);
WMReleaseFont(font);
}
WMSetLabelText(about_th3, "C");
about_th4 = WMCreateLabel(aboutwin);
WMResizeWidget(about_th4, 280, 12);
WMMoveWidget(about_th4, 50, 125);
font = WMSystemFontOfSize(scr, 10);
if (font) {
WMSetLabelFont(about_th4, font);
WMReleaseFont(font);
}
WMSetLabelText(about_th4, "D");
about_th5 = WMCreateLabel(aboutwin);
WMResizeWidget(about_th5, 280, 12);
WMMoveWidget(about_th5, 50, 137);
font = WMSystemFontOfSize(scr, 10);
if (font) {
WMSetLabelFont(about_th5, font);
WMReleaseFont(font);
}
WMSetLabelText(about_th5, "E");
about_th6 = WMCreateLabel(aboutwin);
WMResizeWidget(about_th6, 280, 12);
WMMoveWidget(about_th6, 50, 149);
font = WMSystemFontOfSize(scr, 10);
if (font) {
WMSetLabelFont(about_th6, font);
WMReleaseFont(font);
}
WMSetLabelText(about_th6, "F");
WMRealizeWidget(aboutwin);
}
void about_window(WMScreen *scr) {
char txt[256];
if (! about_en_vue) {
sprintf(txt, "%s %s", th_name, th_release);
WMSetLabelText(about_th1, txt);
WMSetLabelText(about_th2, th_author);
WMSetLabelText(about_th3, th_email);
WMSetLabelText(about_th4, th_url);
WMSetLabelText(about_th5, th_comment);
sprintf(txt, "Faktory: %dx%d (panels: %d Buttons: %d)", backXPM.attributes.width, backXPM.attributes.height, panels, but_max);
WMSetLabelText(about_th6, txt);
WMRealizeWidget(aboutwin);
WMMapSubwidgets(aboutwin);
WMMapWidget(aboutwin);
about_en_vue = TRUE;
} else {
WMCloseWindow(aboutwin);
about_en_vue = FALSE;
}
}
/* --------------------------------------------------- */
void db_prev_cb(WMWidget *self, void *data) {
char txt[256];
if (cur_cdmode == WM_CDM_EJECTED) return;
strcpy(cd->artist, WMGetTextFieldText(db_artist));
strcpy(cd->cdname, WMGetTextFieldText(db_title));
if (strlen(WMGetTextFieldText(db_track)) > 0) {
cd->trk[db_curtrack - 1].songname = malloc(strlen(WMGetTextFieldText(db_track)) + 1);
strcpy(cd->trk[db_curtrack - 1].songname, WMGetTextFieldText(db_track));
}
save();
load();
if (db_curtrack == 1) db_curtrack = cur_ntracks;
else db_curtrack--;
sprintf(txt, "Tk %d:", db_curtrack);
WMSetLabelText(db_tlabel, txt);
if (cd->trk[db_curtrack - 1].songname != NULL) {
sprintf(txt, cd->trk[db_curtrack - 1].songname);
} else {
strcpy(txt, "");
}
WMSetTextFieldText(db_track, txt);
if (cd->trk[db_curtrack - 1].avoid) {
WMSetButtonSelected(db_avoid, TRUE);
} else {
WMSetButtonSelected(db_avoid, FALSE);
}
WMRealizeWidget(dbwin);
}
void db_next_cb(WMWidget *self, void *data) {
char txt[256];
if (cur_cdmode == WM_CDM_EJECTED) return;
strcpy(cd->artist, WMGetTextFieldText(db_artist));
strcpy(cd->cdname, WMGetTextFieldText(db_title));
if (strlen(WMGetTextFieldText(db_track)) > 0) {
cd->trk[db_curtrack - 1].songname = malloc(strlen(WMGetTextFieldText(db_track)) + 1);
strcpy(cd->trk[db_curtrack - 1].songname, WMGetTextFieldText(db_track));
}
save();
load();
if (db_curtrack == cur_ntracks) db_curtrack = 1;
else db_curtrack++;
sprintf(txt, "Tk %d:", db_curtrack);
WMSetLabelText(db_tlabel, txt);
if (cd->trk[db_curtrack - 1].songname != NULL) {
sprintf(txt, cd->trk[db_curtrack - 1].songname);
} else {
strcpy(txt, "");
}
WMSetTextFieldText(db_track, txt);
if (cd->trk[db_curtrack - 1].avoid) {
WMSetButtonSelected(db_avoid, TRUE);
} else {
WMSetButtonSelected(db_avoid, FALSE);
}
WMRealizeWidget(dbwin);
}
void db_avoid_cb(WMWidget *self, void *data) {
if (cur_cdmode == WM_CDM_EJECTED) return;
if (cd->trk[db_curtrack - 1].avoid) {
cd->trk[db_curtrack - 1].avoid = 0;
} else {
cd->trk[db_curtrack - 1].avoid = 1;
}
save();
load();
}
void db_playauto_cb(WMWidget *self, void *data) {
if (cur_cdmode == WM_CDM_EJECTED) return;
if (cd->autoplay) {
cd->autoplay = 0;
} else {
cd->autoplay = 1;
}
save();
load();
}
void db_volume_cb(WMWidget *self, void *data) {
if (cur_cdmode != WM_CDM_EJECTED) {
cd->volume = WMGetSliderValue(self);
save();
load();
volume = cd->volume;
cd_volume(volume, 10, max_volume);
redraw = TRUE;
WMSetSliderMinValue(b_volume, min_volume);
WMSetSliderMaxValue(b_volume, max_volume);
WMSetSliderValue(b_volume, volume);
}
}
void create_db_window(WMScreen *scr) {
char txt[256];
WMWidget *fr, *fr2;
WMWidget *lb1, *lb2, *lb3;
dbwin = WMCreateWindow(scr, "AScd-db");
WMSetWindowCloseAction(dbwin, close_dbwin, NULL);
WMSetWindowTitle(dbwin, "AScd database edition");
WMResizeWidget(dbwin, 350, 220);
fr = WMCreateFrame(dbwin);
WMMoveWidget(fr, 10, 05);
WMResizeWidget(fr, 330, 105);
WMSetFrameTitle(fr, "CD info:");
lb1 = WMCreateLabel(dbwin);
WMResizeWidget(lb1, 40, 20);
WMMoveWidget(lb1, 16, 20);
WMSetLabelText(lb1, "Artist:");
db_artist = WMCreateTextField(dbwin);
WMMoveWidget(db_artist, 70, 20);
WMResizeWidget(db_artist, 255, 20);
lb2 = WMCreateLabel(dbwin);
WMResizeWidget(lb2, 40, 20);
WMMoveWidget(lb2, 16, 40);
WMSetLabelText(lb2, "Title:");
db_title = WMCreateTextField(dbwin);
WMMoveWidget(db_title, 70, 40);
WMResizeWidget(db_title, 255, 20);
db_playauto = WMCreateButton(dbwin, WBTSwitch);
WMMoveWidget(db_playauto, 70, 65);
WMResizeWidget(db_playauto, 255, 20);
WMSetButtonText(db_playauto, "play this CD automatically (WorkMan)");
WMSetButtonAction(db_playauto, db_playauto_cb, NULL);
lb3 = WMCreateLabel(dbwin);
WMResizeWidget(lb3, 54, 20);
WMMoveWidget(lb3, 16, 85);
WMSetLabelText(lb3, "Volume:");
db_volume = WMCreateSlider(dbwin);
WMResizeWidget(db_volume, 255, 15);
WMMoveWidget(db_volume, 70, 88);
WMSetSliderKnobThickness(db_volume, 22);
WMSetSliderAction(db_volume, db_volume_cb, NULL);
/* --- */
fr2 = WMCreateFrame(dbwin);
WMMoveWidget(fr2, 10, 115);
WMResizeWidget(fr2, 330, 65);
WMSetFrameTitle(fr2, "Track info:");
db_tlabel = WMCreateLabel(dbwin);
WMResizeWidget(db_tlabel, 54, 20);
WMMoveWidget(db_tlabel, 16, 130);
sprintf(txt, "Track %d:", db_curtrack);
WMSetLabelText(db_tlabel, txt);
db_track = WMCreateTextField(dbwin);
WMMoveWidget(db_track, 70, 130);
WMResizeWidget(db_track, 255, 20);
db_avoid = WMCreateButton(dbwin, WBTSwitch);
WMMoveWidget(db_avoid, 70, 152);
WMResizeWidget(db_avoid, 235, 20);
WMSetButtonText(db_avoid, "don't play this track");
WMSetButtonAction(db_avoid, db_avoid_cb, NULL);
/* --- */
db_prev = WMCreateButton(dbwin, 0);
WMResizeWidget(db_prev, 110, 25);
WMMoveWidget(db_prev, 10, 190);
WMSetButtonText(db_prev, "Previous Track");
WMSetButtonAction(db_prev, db_prev_cb, NULL);
db_next = WMCreateButton(dbwin, 0);
WMResizeWidget(db_next, 110, 25);
WMMoveWidget(db_next, 125, 190);
WMSetButtonText(db_next, "Next Track");
WMSetButtonAction(db_next, db_next_cb, NULL);
db_close = WMCreateButton(dbwin, 0);
WMResizeWidget(db_close, 55, 25);
WMMoveWidget(db_close, 285, 190);
WMSetButtonText(db_close, "Close");
WMSetButtonAction(db_close, close_dbwin, NULL);
WMRealizeWidget(dbwin);
}
void db_window(WMScreen *scr) {
char txt[256];
if (! db_en_vue) {
if (cur_cdmode == WM_CDM_EJECTED) return;
/* 0.13 fix */
if (db_curtrack < 1) db_curtrack = 1;
load();
if (cd->artist != NULL) strcpy(txt, cd->artist);
else strcpy(txt, "");
WMSetTextFieldText(db_artist, txt);
if (cd->cdname != NULL) strcpy(txt, cd->cdname);
else strcpy(txt, "");
WMSetTextFieldText(db_title, txt);
if (cd->autoplay) {
WMSetButtonSelected(db_playauto, TRUE);
} else {
WMSetButtonSelected(db_playauto, TRUE);
}
if (cd->trk[db_curtrack - 1].songname != NULL) {
sprintf(txt, cd->trk[db_curtrack - 1].songname);
} else {
strcpy(txt, "");
}
WMSetTextFieldText(db_track, txt);
if (cd->trk[db_curtrack - 1].avoid) {
WMSetButtonSelected(db_avoid, TRUE);
} else {
WMSetButtonSelected(db_avoid, FALSE);
}
WMSetSliderMinValue(db_volume, min_volume);
WMSetSliderMaxValue(db_volume, max_volume);
if (cd->volume > 0) WMSetSliderValue(db_volume, cd->volume);
else WMSetSliderValue(db_volume, max_volume);
WMRealizeWidget(dbwin);
WMMapSubwidgets(dbwin);
WMMapWidget(dbwin);
db_en_vue = TRUE;
} else {
WMCloseWindow(dbwin);
db_en_vue = FALSE;
}
}
void db_cb(WMWidget *self, void *data) {
char txt[127];
sprintf(txt, "Tk %d:", db_curtrack);
WMSetLabelText(db_tlabel, txt);
/*WMRealizeWidget(dbwin);*/
db_window(scr);
}
void about_cb(WMWidget *self, void *data) {
about_window(scr);
}
void create_big_window(WMScreen *scr) {
WMWidget *fr, *fr3, *fr4, *fr5;
WMWidget *lb1, *lb2, *lb3, *lb4, *lb6;
win = WMCreateWindow(scr, "AScd");
WMSetWindowCloseAction(win, close_win, NULL);
WMSetWindowTitle(win, "AScd");
WMResizeWidget(win, 320, 370);
b_title = WMCreateButton(win, 0);
WMResizeWidget(b_title, 300, 40);
WMMoveWidget(b_title, 10, 5);
WMSetButtonText(b_title, "1\n2");
WMSetButtonAction(b_title, db_cb, NULL);
pop = WMCreatePopUpButton(win);
WMResizeWidget(pop, 300, 20);
WMMoveWidget(pop, 10, 50);
WMSetPopUpButtonPullsDown(pop, True);
WMSetPopUpButtonText(pop, "Tracks");
WMAddPopUpButtonItem(pop, "1");
WMSetPopUpButtonAction(pop, track_select, NULL);
fr = WMCreateFrame(win);
WMMoveWidget(fr, 10, 75);
WMResizeWidget(fr, 110, 140);
WMSetFrameTitle(fr, "Playback:");
b_autoplay = WMCreateButton(win, WBTSwitch);
WMMoveWidget(b_autoplay, 20, 95);
WMResizeWidget(b_autoplay, 90, 20);
WMSetButtonText(b_autoplay, "autoplay");
WMSetButtonAction(b_autoplay, autoplay_cb, NULL);
b_autorepeat = WMCreateButton(win, WBTSwitch);
WMMoveWidget(b_autorepeat, 20, 115);
WMResizeWidget(b_autorepeat, 90, 20);
WMSetButtonText(b_autorepeat, "autorepeat");
WMSetButtonAction(b_autorepeat, autorepeat_cb, NULL);
b_ignoreavoid = WMCreateButton(win, WBTSwitch);
WMMoveWidget(b_ignoreavoid, 20, 135);
WMResizeWidget(b_ignoreavoid, 90, 20);
WMSetButtonText(b_ignoreavoid, "apply skips");
WMSetButtonAction(b_ignoreavoid, ignoreavoid_cb, NULL);
lb6 = WMCreateLabel(win);
WMResizeWidget(lb6, 80, 20);
WMMoveWidget(lb6, 15, 165);
WMSetLabelText(lb6, "CD Device:");
b_device = WMCreateTextField(win);
WMResizeWidget(b_device, 85, 20);
WMMoveWidget(b_device, 20, 185);
fr3 = WMCreateFrame(win);
WMMoveWidget(fr3, 130, 75);
WMResizeWidget(fr3, 180, 140);
WMSetFrameTitle(fr3, "Display:");
b_scroll = WMCreateButton(win, WBTSwitch);
WMMoveWidget(b_scroll, 140, 95);
WMResizeWidget(b_scroll, 130, 20);
WMSetButtonText(b_scroll, "scroll song names");
WMSetButtonAction(b_scroll, scroll_cb, NULL);
b_artist = WMCreateButton(win, WBTSwitch);
WMMoveWidget(b_artist, 140, 115);
WMResizeWidget(b_artist, 130, 20);
WMSetButtonText(b_artist, "add artist name");
WMSetButtonAction(b_artist, artist_cb, NULL);
b_upper = WMCreateButton(win, WBTSwitch);
WMMoveWidget(b_upper, 140, 135);
WMResizeWidget(b_upper, 130, 20);
WMSetButtonText(b_upper, "force uppercase");
WMSetButtonAction(b_upper, upper_cb, NULL);
lb4 = WMCreateLabel(win);
WMResizeWidget(lb4, 80, 20);
WMMoveWidget(lb4, 135, 165);
WMSetLabelText(lb4, "Theme:");
pop2 = WMCreatePopUpButton(win);
WMResizeWidget(pop2, 160, 20);
WMMoveWidget(pop2, 140, 185);
WMSetPopUpButtonText(pop2, theme);
WMAddPopUpButtonItem(pop2, "1");
WMSetPopUpButtonAction(pop2, theme_pick, NULL);
b_help = WMCreateButton(win, 0);
WMResizeWidget(b_help, 80, 18);
WMMoveWidget(b_help, 220, 165);
WMSetButtonText(b_help, "Quick Ref.");
WMSetButtonAction(b_help, help_cb, NULL);
/* the volume */
fr4 = WMCreateFrame(win);
WMMoveWidget(fr4, 10, 220);
WMResizeWidget(fr4, 300, 80);
WMSetFrameTitle(fr4, "Volume & Misc:");
b_minvol = WMCreateTextField(win);
WMResizeWidget(b_minvol, 30, 20);
WMMoveWidget(b_minvol, 20, 240);
b_volume = WMCreateSlider(win);
WMResizeWidget(b_volume, 220, 20);
WMMoveWidget(b_volume, 50, 240);
WMSetSliderKnobThickness(b_volume, 22);
WMSetSliderAction(b_volume, volume_cb, NULL);
b_maxvol = WMCreateTextField(win);
WMResizeWidget(b_maxvol, 30, 20);
WMMoveWidget(b_maxvol, 270, 240);
lb1 = WMCreateLabel(win);
WMResizeWidget(lb1, 40, 20);
WMMoveWidget(lb1, 15, 270);
WMSetLabelText(lb1, "Muted");
b_mutedvol = WMCreateTextField(win);
WMResizeWidget(b_mutedvol, 30, 20);
WMMoveWidget(b_mutedvol, 65, 270);
lb2 = WMCreateLabel(win);
WMResizeWidget(lb2, 70, 20);
WMMoveWidget(lb2, 105, 270);
WMSetLabelText(lb2, "Cue Time");
b_cuetime = WMCreateTextField(win);
WMResizeWidget(b_cuetime, 25, 20);
WMMoveWidget(b_cuetime, 180, 270);
lb3 = WMCreateLabel(win);
WMResizeWidget(lb3, 33, 20);
WMMoveWidget(lb3, 225, 270);
WMSetLabelText(lb3, "Fade");
b_fadestep = WMCreateTextField(win);
WMResizeWidget(b_fadestep, 25, 20);
WMMoveWidget(b_fadestep, 275, 270);
/* the counter modes */
fr5 = WMCreateFrame(win);
WMMoveWidget(fr5, 10, 305);
WMResizeWidget(fr5, 190, 60);
WMSetFrameTitle(fr5, "Counter Mode:");
b_mode1 = WMCreateButton(win, WBTRadio);
WMMoveWidget(b_mode1, 20, 320);
WMResizeWidget(b_mode1, 55, 20);
WMSetButtonText(b_mode1, "Track");
WMSetButtonAction(b_mode1, mode1_cb, NULL);
b_mode2 = WMCreateButton(win, WBTRadio);
WMMoveWidget(b_mode2, 20, 340);
WMResizeWidget(b_mode2, 55, 20);
WMSetButtonText(b_mode2, "CD");
WMSetButtonAction(b_mode2, mode2_cb, NULL);
b_mode3 = WMCreateButton(win, WBTRadio);
WMMoveWidget(b_mode3, 90, 320);
WMResizeWidget(b_mode3, 85, 20);
WMSetButtonText(b_mode3, "Elapsed");
WMSetButtonAction(b_mode3, mode3_cb, NULL);
b_mode4 = WMCreateButton(win, WBTRadio);
WMMoveWidget(b_mode4, 90, 340);
WMResizeWidget(b_mode4, 85, 20);
WMSetButtonText(b_mode4, "Remaining");
WMSetButtonAction(b_mode4, mode4_cb, NULL);
/* the global buttons */
b_save = WMCreateButton(win, 0);
WMResizeWidget(b_save, 50, 25);
WMMoveWidget(b_save, 205, 340);
WMSetButtonText(b_save, "Save");
WMSetButtonAction(b_save, save_cb, NULL);
b_about = WMCreateButton(win, 0);
WMResizeWidget(b_about, 50, 25);
WMMoveWidget(b_about, 205, 310);
WMSetButtonText(b_about, "Info");
WMSetButtonAction(b_about, about_cb, NULL);
b_save = WMCreateButton(win, 0);
WMResizeWidget(b_save, 50, 25);
WMMoveWidget(b_save, 260, 310);
WMSetButtonText(b_save, "Quit");
WMSetButtonAction(b_save, quit_ascd, NULL);
b_close = WMCreateButton(win, 0);
WMResizeWidget(b_close, 50, 25);
WMMoveWidget(b_close, 260, 340);
WMSetButtonText(b_close, "Close");
WMSetButtonAction(b_close, close_win, NULL);
/* finished, draw everything */
WMRealizeWidget(win);
/*
WMMapSubwidgets(win);
WMMapWidget(win);
*/
}
void update_track() {
int i;
char txt[127];
char txt2[127];
if (en_vue) {
if (cur_cdmode != WM_CDM_EJECTED) {
if (cd->artist != NULL) {
strcpy(txt, cd->artist);
if (strcmp(txt, "") == 0) strcpy(txt, "unknown artist");
} else {
strcpy(txt, "unknown artist");
}
strcat(txt, "\n");
if (cd->cdname != NULL) {
strcpy(txt2, cd->cdname);
if (strcmp(txt2, "") == 0) strcpy(txt2, "unknown album");
} else {
strcpy(txt2, "unknown album");
}
strcat(txt, txt2);
WMSetButtonText(b_title, txt);
for (i = WMGetPopUpButtonNumberOfItems(pop); i >= 0; i --) {
WMRemovePopUpButtonItem(pop, i);
}
for (i = 0; i < cur_ntracks; i++) {
sprintf(txt, "%2d ", i + 1);
if (cd->trk[i].songname != NULL) strcat(txt, cd->trk[i].songname);
WMAddPopUpButtonItem(pop, txt);
}
pistes = cur_ntracks;
if (cur_track >= 1) {
if (cd->trk[cur_track - 1].songname != NULL) {
sprintf(txt, "%s", cd->trk[cur_track - 1].songname);
if (strcmp(txt, "") == 0) sprintf(txt, "Track %d", cur_track);
WMSetPopUpButtonText(pop, txt);
} else {
sprintf(txt, "Track %d", cur_track);
WMSetPopUpButtonText(pop, txt);
}
} else {
WMSetPopUpButtonText(pop, "Track 1");
}
} else {
WMSetButtonText(b_title, "No CD in drive\nor the tray is not loaded");
}
}
}
void big_window(WMScreen *scr) {
int i;
char txt[256];
DIR *dir_fd;
struct dirent *dir_pt;
if (! en_vue) {
/*if (cur_cdmode == WM_CDM_EJECTED) return;*/
en_vue = TRUE;
sprintf(txt, "%d", cue_time);
WMSetTextFieldText(b_cuetime, txt);
sprintf(txt, "%d", fade_step);
WMSetTextFieldText(b_fadestep, txt);
sprintf(txt, "%d", min_volume);
WMSetTextFieldText(b_minvol, txt);
sprintf(txt, "%d", max_volume);
WMSetTextFieldText(b_maxvol, txt);
sprintf(txt, "%d", muted_volume);
WMSetTextFieldText(b_mutedvol, txt);
WMSetTextFieldText(b_device, cd_device);
WMSetSliderMinValue(b_volume, min_volume);
WMSetSliderMaxValue(b_volume, max_volume);
WMSetSliderValue(b_volume, volume);
/* remove everything in the two popups */
for (i = WMGetPopUpButtonNumberOfItems(pop); i >= 0; i --) {
WMRemovePopUpButtonItem(pop, i);
}
for (i = WMGetPopUpButtonNumberOfItems(pop2); i >= 0; i --) {
WMRemovePopUpButtonItem(pop2, i);
}
/* update the database stuff. AScd 0.13: I deleted all this
stuff from this function as update_track() do the same! */
update_track();
/* make the theme select menu */
sprintf(txt, "%s/Themes", THDIR);
if ((dir_fd = opendir(txt)) != NULL) {
while((dir_pt = readdir(dir_fd)) != NULL) {
if (dir_pt->d_name[0] != '.') {
WMAddPopUpButtonItem(pop2, dir_pt->d_name);
}
}
closedir(dir_fd);
}
WMSetPopUpButtonText(pop2, theme);
/* several options toggles */
if (autoplay) {
WMSetButtonSelected(b_autoplay, TRUE);
} else {
WMSetButtonSelected(b_autoplay, FALSE);
}
if (autorepeat) {
WMSetButtonSelected(b_autorepeat, TRUE);
} else {
WMSetButtonSelected(b_autorepeat, FALSE);
}
if (show_db) {
WMSetButtonSelected(b_scroll, TRUE);
} else {
WMSetButtonSelected(b_scroll, FALSE);
}
if (show_artist) {
WMSetButtonSelected(b_artist, TRUE);
} else {
WMSetButtonSelected(b_artist, FALSE);
}
if (ignore_avoid) {
WMSetButtonSelected(b_ignoreavoid, FALSE);
} else {
WMSetButtonSelected(b_ignoreavoid, TRUE);
}
if (force_upper) {
WMSetButtonSelected(b_upper, TRUE);
} else {
WMSetButtonSelected(b_upper, FALSE);
}
/* finally, the counter mode radio buttons */
switch(time_mode) {
case 0:
WMSetButtonSelected((b_mode1), TRUE);
WMSetButtonSelected((b_mode2), FALSE);
WMSetButtonSelected((b_mode3), TRUE);
WMSetButtonSelected((b_mode4), FALSE);
break;
case 1:
WMSetButtonSelected((b_mode1), TRUE);
WMSetButtonSelected((b_mode2), FALSE);
WMSetButtonSelected((b_mode4), TRUE);
WMSetButtonSelected((b_mode3), FALSE);
break;
case 2:
WMSetButtonSelected((b_mode2), TRUE);
WMSetButtonSelected((b_mode1), FALSE);
WMSetButtonSelected((b_mode3), TRUE);
WMSetButtonSelected((b_mode4), FALSE);
break;
default:
WMSetButtonSelected((b_mode2), TRUE);
WMSetButtonSelected((b_mode1), FALSE);
WMSetButtonSelected((b_mode4), TRUE);
WMSetButtonSelected((b_mode3), FALSE);
break;
}
WMRealizeWidget(win);
WMMapSubwidgets(win);
WMMapWidget(win);
} else {
WMCloseWindow(win);
muted_volume = atoi(WMGetTextFieldText(b_mutedvol));
min_volume = atoi(WMGetTextFieldText(b_minvol));
max_volume = atoi(WMGetTextFieldText(b_maxvol));
cue_time = atoi(WMGetTextFieldText(b_cuetime));
fade_step = atoi(WMGetTextFieldText(b_fadestep));
en_vue = FALSE;
}
}