home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AmigActive 13
/
AACD13.ISO
/
AACD
/
Utilities
/
ACDPlay
/
src
/
V1.5
/
Visual.c.BAK
< prev
next >
Wrap
Text File
|
1997-12-02
|
94KB
|
2,139 lines
/* Visual.c */
#include "Constants.h"
#include <exec/types.h>
#include <exec/memory.h>
#include <exec/libraries.h>
#include <intuition/intuition.h>
#include <intuition/intuitionbase.h>
#include <intuition/gadgetclass.h>
#include <libraries/gadtools.h>
#include <libraries/commodities.h>
#include <libraries/asl.h>
#include <graphics/rastport.h>
#include <devices/scsidisk.h>
#include <devices/cd.h>
#include <libraries/screennotify.h>
#include <pragma/screennotify_lib.h>
#include "AsmLib/CD-ROM.h"
#include "Locale.h"
#include "Structures/Application.h"
#include "Structures/DirNode.h"
#include "Structures/MyPubScreenNode.h"
#include "Structures/CDTitleNode.h"
#include <clib/alib_protos.h>
#include <clib/dos_protos.h>
#include <clib/exec_protos.h>
#include <clib/asl_protos.h>
#include <clib/gadtools_protos.h>
#include <clib/graphics_protos.h>
#include <clib/intuition_protos.h>
#include <clib/commodities_protos.h>
#include <clib/icon_protos.h>
#include <clib/locale_protos.h>
#include <clib/wb_protos.h>
#include <wbstartup.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include "ACDPlay_protos.h"
extern char *ls[ANZ_MSG];
extern char *PROG_FULLNAME;
char *TEXT_MAIN_DIRECTCHOICE0[] = {"_1", "_2", "_3", "_4", "_5", "_6", "_7", "_8", "_9", "1_0", NULL};
char *TEXT_MAIN_DIRECTCHOICE1[] = {"11", "12", "13", "14", "15", "16", "17", "18", "19", "20", NULL};
void MakeInterior(Application *app, WORD win)
{
register struct AppWin *appwin = &app->appwin[win];
/*int i;*/
if (!appwin->window) return;
/* Damit bei Fade-Makros die Titel nicht flackern */
if (win != WINDOW_VOLUME)
UpdateWinTitle(app);
switch (win)
{
case WINDOW_MAIN: /* Hauptfenster */
if ((app->appwin[WINDOW_MAIN].gadget[GADGET_MAIN_TITLESHOW]) && ((app->cdstr->active == AUDIO_STAT_PLAYING) || (app->cdstr->active == AUDIO_STAT_PAUSED)))
GT_SetGadgetAttrs(appwin->gadget[GADGET_MAIN_TITLESHOW], appwin->window, NULL, GTTX_Text, (FindNode(app->cdstr->cdtitles, app->cdstr->cur_track - 1))->ln_Name, TAG_END);
if (app->appwin[WINDOW_MAIN].gadget[GADGET_MAIN_TRACKSHOW])
GT_SetGadgetAttrs(appwin->gadget[GADGET_MAIN_TRACKSHOW], appwin->window, NULL, GTNM_Number, app->cdstr->cdx->cdx_CurrentTrack, TAG_END);
if (app->appwin[WINDOW_MAIN].gadget[GADGET_MAIN_INDEXSHOW])
GT_SetGadgetAttrs(appwin->gadget[GADGET_MAIN_INDEXSHOW], appwin->window, NULL, GTNM_Number, app->cdstr->cdx->cdx_CurrentIndex, TAG_END);
break;
case WINDOW_CDINFO: /* CD-Informationsfenster */
FormatA(app->timeshowbuf + 20, "%02ld:%02ld", (LONG)base2min(app->cdstr->cdx->cdx_TOCData->Entry[0].Address), (LONG)base2sec(app->cdstr->cdx->cdx_TOCData->Entry[0].Address));
GT_SetGadgetAttrs(appwin->gadget[GADGET_CDINFO_AUTHOR], appwin->window, NULL, GTTX_Text, app->cdstr->artistname, TAG_END);
GT_SetGadgetAttrs(appwin->gadget[GADGET_CDINFO_TITLE], appwin->window, NULL, GTTX_Text, app->cdstr->cdname, TAG_END);
GT_SetGadgetAttrs(appwin->gadget[GADGET_CDINFO_TRACKS], appwin->window, NULL, GTNM_Number, app->cdstr->num_track, TAG_END);
GT_SetGadgetAttrs(appwin->gadget[GADGET_CDINFO_TIME], appwin->window, NULL, GTTX_Text, app->timeshowbuf + 20, TAG_END);
break;
case WINDOW_DRIVEINFO:
GT_SetGadgetAttrs(appwin->gadget[GADGET_DRIVEINFO_DEVICE], appwin->window, NULL, GTTX_Text, app->cdstr->device, GTTX_Justification, GTJ_LEFT, TAG_END);
GT_SetGadgetAttrs(appwin->gadget[GADGET_DRIVEINFO_UNIT], appwin->window, NULL, GTNM_Number, app->cdstr->unit, TAG_END);
GT_SetGadgetAttrs(appwin->gadget[GADGET_DRIVEINFO_VENDOR], appwin->window, NULL, GTTX_Text, app->cdstr->cdx->cdx_Vendor, TAG_END);
GT_SetGadgetAttrs(appwin->gadget[GADGET_DRIVEINFO_PRODUCT], appwin->window, NULL, GTTX_Text, &app->cdstr->cdx->cdx_Product, TAG_END);
GT_SetGadgetAttrs(appwin->gadget[GADGET_DRIVEINFO_SPECIFIC], appwin->window, NULL, GTTX_Text, &app->cdstr->cdx->cdx_Specific, TAG_END);
break;
case WINDOW_PUBSCREEN:
GT_SetGadgetAttrs(appwin->gadget[GADGET_PUBSCREEN_LISTVIEW], appwin->window, NULL, GTLV_Labels, app->pubscreenlist, TAG_END);
break;
case WINDOW_TITLES:
GT_SetGadgetAttrs(appwin->gadget[GADGET_TITLES_LISTVIEW], appwin->window, NULL, GTLV_Labels, app->cdstr->cdtitles, TAG_END);
break;
case WINDOW_EDIT:
GT_SetGadgetAttrs(appwin->gadget[GADGET_EDIT_TITLE], appwin->window, NULL, GTST_String, app->cdstr->cdname, TAG_END);
GT_SetGadgetAttrs(appwin->gadget[GADGET_EDIT_ARTIST], appwin->window, NULL, GTST_String, app->cdstr->artistname, TAG_END);
GT_SetGadgetAttrs(appwin->gadget[GADGET_EDIT_LISTVIEW], appwin->window, NULL, GTLV_Labels, app->cdstr->cdtitles, TAG_END);
if (app->edit_pos >= 0)
{
GT_SetGadgetAttrs(appwin->gadget[GADGET_EDIT_LISTVIEW], appwin->window, NULL, GTLV_Selected, app->edit_pos, TAG_END);
}
break;
case WINDOW_PROGRAM:
GT_SetGadgetAttrs(appwin->gadget[GADGET_PROGRAM_LVCD], appwin->window, NULL, GTLV_Labels, app->cdstr->cdtitles, TAG_END);
GT_SetGadgetAttrs(appwin->gadget[GADGET_PROGRAM_LVPRG], appwin->window, NULL, GTLV_Labels, app->cdstr->progtitles, TAG_END);
break;
case WINDOW_AB:
DoABBuffer(app);
break;
case WINDOW_VOLUME:
GT_SetGadgetAttrs(appwin->gadget[GADGET_VOLUME_LEFT], appwin->window, NULL, GTSL_Level, app->cdstr->cdx->cdx_Volume[0], TAG_DONE);
GT_SetGadgetAttrs(appwin->gadget[GADGET_VOLUME_MASTER], appwin->window, NULL, GTSL_Level, (app->cdstr->cdx->cdx_Volume[0]+app->cdstr->cdx->cdx_Volume[1])/2, TAG_DONE);
GT_SetGadgetAttrs(appwin->gadget[GADGET_VOLUME_RIGHT], appwin->window, NULL, GTSL_Level, app->cdstr->cdx->cdx_Volume[1], TAG_DONE);
break;
case WINDOW_SAVEAUDIO:
DoSizeBuffer(app);
break;
}
}
void UpdateGadgets(Application *app)
{
int percent;
/* printf("Zustand des CDLW: %d", (int)app->cdstr->cdx->cdx_Active);
printf(" Anzahl Tracks: %d \n", (int)app->cdstr->cdx->cdx_TOCData->TrackNum);
*/
if (app->cdstr->num_track != app->cdstr->cdx->cdx_TOCData->TrackNum)
{
UpdateTrackNumber(app);
}
if (app->cdstr->cur_track != app->cdstr->cdx->cdx_CurrentTrack)
{
UpdateCurrentTrack(app);
}
/* Aktuelle Index-Anzeige, kann doch hier plaziert werden, oder? */
if (app->cdstr->cur_index != app->cdstr->cdx->cdx_CurrentIndex)
{
app->cdstr->cur_index = app->cdstr->cdx->cdx_CurrentIndex;
if (app->appwin[WINDOW_MAIN].gadget[GADGET_MAIN_INDEXSHOW])
GT_SetGadgetAttrs(app->appwin[WINDOW_MAIN].gadget[GADGET_MAIN_INDEXSHOW], app->appwin[WINDOW_MAIN].window, NULL, GTNM_Number, app->cdstr->cur_index, TAG_END);
}
if (app->cdstr->active != app->cdstr->cdx->cdx_Active)
{
UpdateStatus(app);
}
percent = app->cdstr->cdx->cdx_TrackLength ? (int) (((double) 100 / (double)app->cdstr->cdx->cdx_TrackLength) * app->cdstr->cdx->cdx_CurrentRelAddr) : 0;
if (app->cdstr->time_percentage != percent)
{
UpdateTimePercent(app, percent);
}
if (app->cdstr->time_curseconds != app->cdstr->cdx->cdx_CurrentAbsAddr / 75)
{
UpdateTimeGadget(app);
}
/* TestUnitLUN() wird nur von HandleEvents() aus aufgerufen */
TestABRepeat(app);
app->cdstr->useraction = FALSE; /* useraction-Bool wieder auf unwahr stellen */
}
void UpdateTrackNumber(struct Application *app)
{
app->cdstr->num_track = app->cdstr->cdx->cdx_TOCData->TrackNum;
/* Falls das CD-Info-Fenster offen ist, Anzahl Tracks modifizieren */
if (app->appwin[WINDOW_CDINFO].window)
{
GT_SetGadgetAttrs(app->appwin[WINDOW_CDINFO].gadget[GADGET_CDINFO_TRACKS], app->appwin[WINDOW_CDINFO].window, NULL, GTNM_Number, app->cdstr->num_track, TAG_END);
}
/* Falls das Hauptfenster offen ist, Direktwahlbuttons ggf. shaden */
if (app->appwin[WINDOW_MAIN].window)
{
int i;
for (i = GADGET_MAIN_DIRECTCHOICE0; i < app->cdstr->num_track + GADGET_MAIN_DIRECTCHOICE0; i++)
{
if (app->appwin[WINDOW_MAIN].gadget[i])
GT_SetGadgetAttrs(app->appwin[WINDOW_MAIN].gadget[i], app->appwin[WINDOW_MAIN].window, NULL, GA_Disabled, FALSE, TAG_END);
}
for (i = app->cdstr->num_track + GADGET_MAIN_DIRECTCHOICE0; i < GADGET_MAIN_DIRECTCHOICE1 + 10; i++)
{
if (app->appwin[WINDOW_MAIN].gadget[i])
GT_SetGadgetAttrs(app->appwin[WINDOW_MAIN].gadget[i], app->appwin[WINDOW_MAIN].window, NULL, GA_Disabled, TRUE, TAG_END);
}
}
}
void UpdateCurrentTrack(struct Application *app)
{
/* letzten Track retten */
UBYTE lasttrack = app->cdstr->cur_track;
app->cdstr->cur_track = app->cdstr->cdx->cdx_CurrentTrack;
/* Die Wiederholung wird nicht ausgeführt, wenn die Trackveränderung */
/* von einem der Buttons in ACDPlay (oder über ARexx) geschah, oder */
/* wenn der Track danach 0 ist. (Stop, Eject auch bei anderen Playern) */
if ((app->cdstr->useraction == FALSE) && (app->cdstr->cdx->cdx_Active != AUDIO_STAT_NO_DISK) && (app->cdstr->repeatmode != REPEATMODE_REPAB))
{
switch (app->cdstr->playmode)
{
case PLAYMODE_CD:
if ((app->cdstr->repeatmode == REPEATMODE_REPALL) && (!app->cdstr->cur_track))
{
CDPlayA(app->cdstr->cdx, app->cdstr->cdx->cdx_TOCData->FirstAudioTrack, 1);
app->cdstr->cur_track = app->cdstr->cdx->cdx_TOCData->FirstAudioTrack;
app->cdstr->cdx->cdx_Active = AUDIO_STAT_PLAYING;
}
break;
case PLAYMODE_RNDCD:
if (app->cdstr->repeatmode != REPEATMODE_REPTRACK)
{
UBYTE newtrack = GetRandomTrack(app);
if (newtrack)
{
CDPlayA(app->cdstr->cdx, newtrack, 1);
app->cdstr->cur_track = newtrack;
app->cdstr->cdx->cdx_Active = AUDIO_STAT_PLAYING;
}
else
{
CDStopA(app->cdstr->cdx);
InitRandomTracks(app->cdstr->cdtitles);
app->cdstr->cur_track = 0;
app->cdstr->cdx->cdx_Active = AUDIO_STAT_STOPPED;
}
}
break;
case PLAYMODE_PRG:
if (app->cdstr->repeatmode != REPEATMODE_REPTRACK)
{
if (((struct Node *)app->cdstr->actprognode) == app->cdstr->progtitles->lh_TailPred)
if (app->cdstr->repeatmode == REPEATMODE_REPALL)
{
ProgramStart(app);
app->cdstr->cur_track = app->cdstr->actprognode->ptn_track;
app->cdstr->cdx->cdx_Active = AUDIO_STAT_PLAYING;
}
else
{
CDStopA(app->cdstr->cdx);
app->cdstr->cur_track = 0;
app->cdstr->actprognode = NULL;
app->cdstr->cdx->cdx_Active = AUDIO_STAT_STOPPED;
}
else
{
ProgramNext(app);
app->cdstr->cur_track = app->cdstr->actprognode->ptn_track;
app->cdstr->cdx->cdx_Active = AUDIO_STAT_PLAYING;
}
}
break;
case PLAYMODE_RNDPRG:
if (app->cdstr->repeatmode != REPEATMODE_REPTRACK)
{
if (ProgramNext(app))
{
app->cdstr->cur_track = app->cdstr->actprognode->ptn_track;
app->cdstr->cdx->cdx_Active = AUDIO_STAT_PLAYING;
}
else
{
CDStopA(app->cdstr->cdx);
app->cdstr->cur_track = 0;
app->cdstr->actprognode = NULL;
app->cdstr->cdx->cdx_Active = AUDIO_STAT_STOPPED;
}
}
break;
}
if (app->cdstr->repeatmode == REPEATMODE_REPTRACK)
{
CDPlayA(app->cdstr->cdx, lasttrack, 1);
app->cdstr->cur_track = lasttrack;
app->cdstr->cdx->cdx_Active = AUDIO_STAT_PLAYING;
}
}
if (app->appwin[WINDOW_MAIN].window)
{
/* Aktueller-Track-Anzeige */
if (app->appwin[WINDOW_MAIN].gadget[GADGET_MAIN_TRACKSHOW])
GT_SetGadgetAttrs(app->appwin[WINDOW_MAIN].gadget[GADGET_MAIN_TRACKSHOW], app->appwin[WINDOW_MAIN].window, NULL, GTNM_Number, app->cdstr->cur_track, TAG_END);
/* Name des Tracks ändert sich */
if ((app->appwin[WINDOW_MAIN].gadget[GADGET_MAIN_TITLESHOW]) && ((app->cdstr->active == AUDIO_STAT_PLAYING) || (app->cdstr->active == AUDIO_STAT_PAUSED)))
GT_SetGadgetAttrs(app->appwin[WINDOW_MAIN].gadget[GADGET_MAIN_TITLESHOW], app->appwin[WINDOW_MAIN].window, NULL, GTTX_Text, app->cdstr->cur_track?(FindNode(app->cdstr->cdtitles, app->cdstr->cur_track - 1))->ln_Name : NULL, TAG_END);
}
}
void UpdateStatus(struct Application *app)
{
UBYTE lastactive = app->cdstr->active; /* wichtig für UpdateCDTitles und */
/* später auch für Gadget-Shadings */
app->cdstr->active = app->cdstr->cdx->cdx_Active;
if ((lastactive == AUDIO_STAT_NO_DISK) || (app->cdstr->active == AUDIO_STAT_NO_DISK))
{
/* GT_SetAttrs überprüft nicht ob das Window offen ist: EnforcerHits */
if (app->appwin[WINDOW_TITLES].window)
GT_SetGadgetAttrs(app->appwin[WINDOW_TITLES].gadget[GADGET_TITLES_LISTVIEW], app->appwin[WINDOW_TITLES].window, NULL, GTLV_Labels, ~0, TAG_END);
if (app->appwin[WINDOW_EDIT].window)
GT_SetGadgetAttrs(app->appwin[WINDOW_EDIT].gadget[GADGET_EDIT_LISTVIEW], app->appwin[WINDOW_EDIT].window, NULL, GTLV_Labels, ~0, TAG_END);
if (app->appwin[WINDOW_PROGRAM].window)
GT_SetGadgetAttrs(app->appwin[WINDOW_PROGRAM].gadget[GADGET_PROGRAM_LVCD], app->appwin[WINDOW_PROGRAM].window, NULL, GTLV_Labels, ~0, TAG_END);
/* Das Programmlistview wird schon in ProgramLoad() verändert */
UpdateCDTitles(app);
if (app->appwin[WINDOW_TITLES].window)
GT_SetGadgetAttrs(app->appwin[WINDOW_TITLES].gadget[GADGET_TITLES_LISTVIEW], app->appwin[WINDOW_TITLES].window, NULL, GTLV_Labels, app->cdstr->cdtitles, TAG_END);
if (app->appwin[WINDOW_EDIT].window)
GT_SetGadgetAttrs(app->appwin[WINDOW_EDIT].gadget[GADGET_EDIT_LISTVIEW], app->appwin[WINDOW_EDIT].window, NULL, GTLV_Labels, app->cdstr->cdtitles, TAG_END);
if (app->appwin[WINDOW_PROGRAM].window)
GT_SetGadgetAttrs(app->appwin[WINDOW_PROGRAM].gadget[GADGET_PROGRAM_LVCD], app->appwin[WINDOW_PROGRAM].window, NULL, GTLV_Labels, app->cdstr->cdtitles, TAG_END);
}
/* Window-Titel updaten */
UpdateWinTitle(app);
/* PauseGadget updaten */
if (app->cdstr->active == AUDIO_STAT_PAUSED)
SelectGadget(app, WINDOW_MAIN, GADGET_MAIN_PAUSE, TRUE);
else
SelectGadget(app, WINDOW_MAIN, GADGET_MAIN_PAUSE, FALSE);
if (lastactive == AUDIO_STAT_NO_DISK)
{
if (app->appwin[WINDOW_MAIN].window)
{
int i;
/* einige Direktwahlbuttons enablen */
for (i = GADGET_MAIN_DIRECTCHOICE0; i < app->cdstr->num_track + GADGET_MAIN_DIRECTCHOICE0; i++)
{
if (app->appwin[WINDOW_MAIN].gadget[i])
GT_SetGadgetAttrs(app->appwin[WINDOW_MAIN].gadget[i], app->appwin[WINDOW_MAIN].window, NULL, GA_Disabled, FALSE, TAG_END);
}
for (i = GADGET_MAIN_TITLESHOW; i <= GADGET_MAIN_REPEATMODE; i++)
{
if (app->appwin[WINDOW_MAIN].gadget[i])
GT_SetGadgetAttrs(app->appwin[WINDOW_MAIN].gadget[i], app->appwin[WINDOW_MAIN].window, NULL, GA_Disabled, FALSE, TAG_END);
}
for (i = GADGET_MAIN_JUMPBWRD; i <= GADGET_MAIN_SRCHFWRD; i++)
{
if (app->appwin[WINDOW_MAIN].gadget[i])
OnGadget(app->appwin[WINDOW_MAIN].gadget[i], app->appwin[WINDOW_MAIN].window, NULL);
}
if (app->appwin[WINDOW_MAIN].gadget[GADGET_MAIN_PAUSE])
OnGadget(app->appwin[WINDOW_MAIN].gadget[GADGET_MAIN_PAUSE], app->appwin[WINDOW_MAIN].window, NULL);
if (app->appwin[WINDOW_MAIN].gadget[GADGET_MAIN_PLAY])
OnGadget(app->appwin[WINDOW_MAIN].gadget[GADGET_MAIN_PLAY], app->appwin[WINDOW_MAIN].window, NULL);
}
if (app->appwin[WINDOW_CDINFO].window)
{
FormatA(app->timeshowbuf + 20, "%02ld:%02ld", (LONG)base2min(app->cdstr->cdx->cdx_TOCData->Entry[0].Address), (LONG)base2sec(app->cdstr->cdx->cdx_TOCData->Entry[0].Address));
GT_SetGadgetAttrs(app->appwin[WINDOW_CDINFO].gadget[GADGET_CDINFO_AUTHOR], app->appwin[WINDOW_CDINFO].window, NULL, GTTX_Text, app->cdstr->artistname, TAG_END);
GT_SetGadgetAttrs(app->appwin[WINDOW_CDINFO].gadget[GADGET_CDINFO_TITLE], app->appwin[WINDOW_CDINFO].window, NULL, GTTX_Text, app->cdstr->cdname, TAG_END);
GT_SetGadgetAttrs(app->appwin[WINDOW_CDINFO].gadget[GADGET_CDINFO_TRACKS], app->appwin[WINDOW_CDINFO].window, NULL, GTNM_Number, app->cdstr->num_track, TAG_END);
GT_SetGadgetAttrs(app->appwin[WINDOW_CDINFO].gadget[GADGET_CDINFO_TIME], app->appwin[WINDOW_CDINFO].window, NULL, GTTX_Text, app->timeshowbuf + 20, TAG_END);
}
if (app->appwin[WINDOW_EDIT].window)
{
GT_SetGadgetAttrs(app->appwin[WINDOW_EDIT].gadget[GADGET_EDIT_TITLE], app->appwin[WINDOW_EDIT].window, NULL, GTST_String, app->cdstr->cdname, GA_Disabled, FALSE, TAG_END);
GT_SetGadgetAttrs(app->appwin[WINDOW_EDIT].gadget[GADGET_EDIT_ARTIST], app->appwin[WINDOW_EDIT].window, NULL, GTST_String, app->cdstr->artistname, GA_Disabled, FALSE, TAG_END);
GT_SetGadgetAttrs(app->appwin[WINDOW_EDIT].gadget[GADGET_EDIT_SAVE], app->appwin[WINDOW_EDIT].window, NULL, GA_Disabled, FALSE, TAG_END);
}
if (app->appwin[WINDOW_PROGRAM].window)
{
GT_SetGadgetAttrs(app->appwin[WINDOW_PROGRAM].gadget[GADGET_PROGRAM_COPYALL], app->appwin[WINDOW_PROGRAM].window, NULL, GA_Disabled, FALSE, TAG_END);
GT_SetGadgetAttrs(app->appwin[WINDOW_PROGRAM].gadget[GADGET_PROGRAM_DEL], app->appwin[WINDOW_PROGRAM].window, NULL, GA_Disabled, FALSE, TAG_END);
GT_SetGadgetAttrs(app->appwin[WINDOW_PROGRAM].gadget[GADGET_PROGRAM_LOAD], app->appwin[WINDOW_PROGRAM].window, NULL, GA_Disabled, FALSE, TAG_END);
GT_SetGadgetAttrs(app->appwin[WINDOW_PROGRAM].gadget[GADGET_PROGRAM_SAVE], app->appwin[WINDOW_PROGRAM].window, NULL, GA_Disabled, FALSE, TAG_END);
}
if (app->appwin[WINDOW_AB].window)
{
GT_SetGadgetAttrs(app->appwin[WINDOW_AB].gadget[GADGET_AB_A_TRACK], app->appwin[WINDOW_AB].window, NULL, GA_Disabled, FALSE, TAG_END);
GT_SetGadgetAttrs(app->appwin[WINDOW_AB].gadget[GADGET_AB_B_TRACK], app->appwin[WINDOW_AB].window, NULL, GA_Disabled, FALSE, TAG_END);
GT_SetGadgetAttrs(app->appwin[WINDOW_AB].gadget[GADGET_AB_A_TIME], app->appwin[WINDOW_AB].window, NULL, GA_Disabled, FALSE, TAG_END);
GT_SetGadgetAttrs(app->appwin[WINDOW_AB].gadget[GADGET_AB_B_TIME], app->appwin[WINDOW_AB].window, NULL, GA_Disabled, FALSE, TAG_END);
}
if (app->appwin[WINDOW_SAVEAUDIO].window)
{
GT_SetGadgetAttrs(app->appwin[WINDOW_SAVEAUDIO].gadget[GADGET_SAVEAUDIO_SIZE], app->appwin[WINDOW_SAVEAUDIO].window, NULL, GA_Disabled, FALSE, TAG_END);
GT_SetGadgetAttrs(app->appwin[WINDOW_SAVEAUDIO].gadget[GADGET_SAVEAUDIO_SAVE], app->appwin[WINDOW_SAVEAUDIO].window, NULL, GA_Disabled, FALSE, TAG_END);
}
}
switch (app->cdstr->active)
{
case AUDIO_STAT_NO_DISK:
if (app->appwin[WINDOW_MAIN].window)
{
int i;
if (app->appwin[WINDOW_MAIN].gadget[GADGET_MAIN_TITLESHOW])
GT_SetGadgetAttrs(app->appwin[WINDOW_MAIN].gadget[GADGET_MAIN_TITLESHOW], app->appwin[WINDOW_MAIN].window, NULL, GTTX_Text, NULL, TAG_END);
for (i = GADGET_MAIN_DIRECTCHOICE0; i < app->cdstr->num_track + GADGET_MAIN_DIRECTCHOICE0; i++)
{
if (app->appwin[WINDOW_MAIN].gadget[i])
GT_SetGadgetAttrs(app->appwin[WINDOW_MAIN].gadget[i], app->appwin[WINDOW_MAIN].window, NULL, GA_Disabled, TRUE, TAG_END);
}
for (i = GADGET_MAIN_TITLESHOW; i <= GADGET_MAIN_TRACKSLIDER; i++)
{
if (app->appwin[WINDOW_MAIN].gadget[i])
GT_SetGadgetAttrs(app->appwin[WINDOW_MAIN].gadget[i], app->appwin[WINDOW_MAIN].window, NULL, GA_Disabled, TRUE, TAG_END);
}
for (i = GADGET_MAIN_JUMPBWRD; i <= GADGET_MAIN_PLAY; i++)
{
if (app->appwin[WINDOW_MAIN].gadget[i])
OffGadget(app->appwin[WINDOW_MAIN].gadget[i], app->appwin[WINDOW_MAIN].window, NULL);
}
}
if (app->appwin[WINDOW_CDINFO].window)
{
GT_SetGadgetAttrs(app->appwin[WINDOW_CDINFO].gadget[GADGET_CDINFO_AUTHOR], app->appwin[WINDOW_CDINFO].window, NULL, GTTX_Text, NULL, TAG_END);
GT_SetGadgetAttrs(app->appwin[WINDOW_CDINFO].gadget[GADGET_CDINFO_TITLE], app->appwin[WINDOW_CDINFO].window, NULL, GTTX_Text, NULL, TAG_END);
GT_SetGadgetAttrs(app->appwin[WINDOW_CDINFO].gadget[GADGET_CDINFO_TRACKS], app->appwin[WINDOW_CDINFO].window, NULL, GTNM_Number, 0, TAG_END);
GT_SetGadgetAttrs(app->appwin[WINDOW_CDINFO].gadget[GADGET_CDINFO_TIME], app->appwin[WINDOW_CDINFO].window, NULL, GTTX_Text, NULL, TAG_END);
}
if (app->appwin[WINDOW_EDIT].window)
{
GT_SetGadgetAttrs(app->appwin[WINDOW_EDIT].gadget[GADGET_EDIT_TITLE], app->appwin[WINDOW_EDIT].window, NULL, GTST_String, NULL, GA_Disabled, TRUE, TAG_END);
GT_SetGadgetAttrs(app->appwin[WINDOW_EDIT].gadget[GADGET_EDIT_ARTIST], app->appwin[WINDOW_EDIT].window, NULL, GTST_String, NULL, GA_Disabled, TRUE, TAG_END);
GT_SetGadgetAttrs(app->appwin[WINDOW_EDIT].gadget[GADGET_EDIT_TRACKTITLE], app->appwin[WINDOW_EDIT].window, NULL, GTST_String, NULL, GA_Disabled, TRUE, TAG_END);
GT_SetGadgetAttrs(app->appwin[WINDOW_EDIT].gadget[GADGET_EDIT_SAVE], app->appwin[WINDOW_EDIT].window, NULL, GA_Disabled, TRUE, TAG_END);
}
if (app->appwin[WINDOW_PROGRAM].window)
{
GT_SetGadgetAttrs(app->appwin[WINDOW_PROGRAM].gadget[GADGET_PROGRAM_COPYALL], app->appwin[WINDOW_PROGRAM].window, NULL, GA_Disabled, TRUE, TAG_END);
GT_SetGadgetAttrs(app->appwin[WINDOW_PROGRAM].gadget[GADGET_PROGRAM_DEL], app->appwin[WINDOW_PROGRAM].window, NULL, GA_Disabled, TRUE, TAG_END);
GT_SetGadgetAttrs(app->appwin[WINDOW_PROGRAM].gadget[GADGET_PROGRAM_LOAD], app->appwin[WINDOW_PROGRAM].window, NULL, GA_Disabled, TRUE, TAG_END);
GT_SetGadgetAttrs(app->appwin[WINDOW_PROGRAM].gadget[GADGET_PROGRAM_SAVE], app->appwin[WINDOW_PROGRAM].window, NULL, GA_Disabled, TRUE, TAG_END);
}
if (app->appwin[WINDOW_AB].window)
{
app->cdstr->a_adr = app->cdstr->b_adr = NULL;
app->cdstr->a_track = app->cdstr->b_track = 0;
DoABBuffer(app);
GT_SetGadgetAttrs(app->appwin[WINDOW_AB].gadget[GADGET_AB_A], app->appwin[WINDOW_AB].window, NULL, GA_Disabled, TRUE, TAG_END);
GT_SetGadgetAttrs(app->appwin[WINDOW_AB].gadget[GADGET_AB_B], app->appwin[WINDOW_AB].window, NULL, GA_Disabled, TRUE, TAG_END);
GT_SetGadgetAttrs(app->appwin[WINDOW_AB].gadget[GADGET_AB_A_TRACK], app->appwin[WINDOW_AB].window, NULL, GTIN_Number, app->cdstr->a_track, GA_Disabled, TRUE, TAG_END);
GT_SetGadgetAttrs(app->appwin[WINDOW_AB].gadget[GADGET_AB_B_TRACK], app->appwin[WINDOW_AB].window, NULL, GTIN_Number, app->cdstr->b_track, GA_Disabled, TRUE, TAG_END);
GT_SetGadgetAttrs(app->appwin[WINDOW_AB].gadget[GADGET_AB_A_TIME], app->appwin[WINDOW_AB].window, NULL, GTST_String, app->cdstr->buf_ab_time_a, GA_Disabled, TRUE, TAG_END);
GT_SetGadgetAttrs(app->appwin[WINDOW_AB].gadget[GADGET_AB_B_TIME], app->appwin[WINDOW_AB].window, NULL, GTST_String, app->cdstr->buf_ab_time_b, GA_Disabled, TRUE, TAG_END);
}
if (app->appwin[WINDOW_SAVEAUDIO].window)
{
GT_SetGadgetAttrs(app->appwin[WINDOW_SAVEAUDIO].gadget[GADGET_SAVEAUDIO_SIZE], app->appwin[WINDOW_SAVEAUDIO].window, NULL, GA_Disabled, TRUE, TAG_END);
GT_SetGadgetAttrs(app->appwin[WINDOW_SAVEAUDIO].gadget[GADGET_SAVEAUDIO_SAVE], app->appwin[WINDOW_SAVEAUDIO].window, NULL, GA_Disabled, TRUE, TAG_END);
/* Wichtig ist, daß das hier nach den Funktionen für's A-B-Repeat-Fenster aufgerufen wird */
DoSizeBuffer(app);
}
break;
case AUDIO_STAT_PLAYING:
if (app->appwin[WINDOW_MAIN].window)
{
if (app->appwin[WINDOW_MAIN].gadget[GADGET_MAIN_TITLESHOW])
GT_SetGadgetAttrs(app->appwin[WINDOW_MAIN].gadget[GADGET_MAIN_TITLESHOW], app->appwin[WINDOW_MAIN].window, NULL, GTTX_Text, (FindNode(app->cdstr->cdtitles, app->cdstr->cur_track - 1))->ln_Name, TAG_END);
if (app->appwin[WINDOW_MAIN].gadget[GADGET_MAIN_TRACKSLIDER])
GT_SetGadgetAttrs(app->appwin[WINDOW_MAIN].gadget[GADGET_MAIN_TRACKSLIDER], app->appwin[WINDOW_MAIN].window, NULL, GA_Disabled, FALSE, TAG_END);
if (app->appwin[WINDOW_MAIN].gadget[GADGET_MAIN_STOP])
OnGadget(app->appwin[WINDOW_MAIN].gadget[GADGET_MAIN_STOP], app->appwin[WINDOW_MAIN].window, NULL);
}
if (app->appwin[WINDOW_AB].window)
{
GT_SetGadgetAttrs(app->appwin[WINDOW_AB].gadget[GADGET_AB_A], app->appwin[WINDOW_AB].window, NULL, GA_Disabled, FALSE, TAG_END);
GT_SetGadgetAttrs(app->appwin[WINDOW_AB].gadget[GADGET_AB_B], app->appwin[WINDOW_AB].window, NULL, GA_Disabled, FALSE, TAG_END);
}
break;
case AUDIO_STAT_PAUSED:
if (app->appwin[WINDOW_MAIN].window)
{
if (app->appwin[WINDOW_MAIN].gadget[GADGET_MAIN_TITLESHOW])
GT_SetGadgetAttrs(app->appwin[WINDOW_MAIN].gadget[GADGET_MAIN_TITLESHOW], app->appwin[WINDOW_MAIN].window, NULL, GTTX_Text, (FindNode(app->cdstr->cdtitles, app->cdstr->cur_track - 1))->ln_Name, TAG_END);
if (app->appwin[WINDOW_MAIN].gadget[GADGET_MAIN_TRACKSLIDER])
GT_SetGadgetAttrs(app->appwin[WINDOW_MAIN].gadget[GADGET_MAIN_TRACKSLIDER], app->appwin[WINDOW_MAIN].window, NULL, GA_Disabled, FALSE, TAG_END);
if (app->appwin[WINDOW_MAIN].gadget[GADGET_MAIN_STOP])
OnGadget(app->appwin[WINDOW_MAIN].gadget[GADGET_MAIN_STOP], app->appwin[WINDOW_MAIN].window, NULL);
}
if (app->appwin[WINDOW_AB].window)
{
GT_SetGadgetAttrs(app->appwin[WINDOW_AB].gadget[GADGET_AB_A], app->appwin[WINDOW_AB].window, NULL, GA_Disabled, FALSE, TAG_END);
GT_SetGadgetAttrs(app->appwin[WINDOW_AB].gadget[GADGET_AB_B], app->appwin[WINDOW_AB].window, NULL, GA_Disabled, FALSE, TAG_END);
}
break;
case AUDIO_STAT_STOPPED:
CDStopA(app->cdstr->cdx);
app->cdstr->actprognode = NULL;
if (app->appwin[WINDOW_MAIN].window)
{
if (app->appwin[WINDOW_MAIN].gadget[GADGET_MAIN_TITLESHOW])
GT_SetGadgetAttrs(app->appwin[WINDOW_MAIN].gadget[GADGET_MAIN_TITLESHOW], app->appwin[WINDOW_MAIN].window, NULL, GTTX_Text, NULL, TAG_END);
if (lastactive != AUDIO_STAT_NO_DISK)
{
if (app->appwin[WINDOW_MAIN].gadget[GADGET_MAIN_STOP])
OffGadget(app->appwin[WINDOW_MAIN].gadget[GADGET_MAIN_STOP], app->appwin[WINDOW_MAIN].window, NULL);
if (app->appwin[WINDOW_MAIN].gadget[GADGET_MAIN_TRACKSLIDER])
GT_SetGadgetAttrs(app->appwin[WINDOW_MAIN].gadget[GADGET_MAIN_TRACKSLIDER], app->appwin[WINDOW_MAIN].window, NULL, GA_Disabled, TRUE, TAG_END);
}
}
if (app->appwin[WINDOW_AB].window)
{
GT_SetGadgetAttrs(app->appwin[WINDOW_AB].gadget[GADGET_AB_A], app->appwin[WINDOW_AB].window, NULL, GA_Disabled, TRUE, TAG_END);
GT_SetGadgetAttrs(app->appwin[WINDOW_AB].gadget[GADGET_AB_B], app->appwin[WINDOW_AB].window, NULL, GA_Disabled, TRUE, TAG_END);
}
break;
}
}
void UpdateTimePercent(struct Application *app, int val)
{
app->cdstr->time_percentage = val;
/* ggf. Trackslider ändern */
if (app->appwin[WINDOW_MAIN].window && app->appwin[WINDOW_MAIN].gadget[GADGET_MAIN_TRACKSLIDER])
{
GT_SetGadgetAttrs(app->appwin[WINDOW_MAIN].gadget[GADGET_MAIN_TRACKSLIDER], app->appwin[WINDOW_MAIN].window, NULL, GTSL_Level, app->cdstr->time_percentage, TAG_END);
}
}
void UpdateTimeGadget(struct Application *app)
{
/* Time-Gad aktualisieren */
app->cdstr->time_curseconds = app->cdstr->cdx->cdx_CurrentAbsAddr / 75;
if (app->appwin[WINDOW_MAIN].window)
{
DoTimeBuffer(app);
ChangeButtonText(app, WINDOW_MAIN, GADGET_MAIN_TIMESHOW, app->timeshowbuf);
}
}
void UpdateUnitLUN(struct Application *app)
{
struct AppWin *appwin = &app->appwin[WINDOW_VOLUME];
struct CDxRequest *cdx = app->cdstr->cdx;
/* Unit oder LUN geändert */
app->cdstr->unit = cdx->cdx_Unit;
app->cdstr->lun = cdx->cdx_LUN;
if (app->appwin[WINDOW_DRIVEINFO].window)
MakeInterior(app, WINDOW_DRIVEINFO);
/* CD entfernt vorgaukeln, damit alle Puffer wieder freigegeben werden */
cdx->cdx_Active = AUDIO_STAT_NO_DISK;
UpdateGadgets(app);
/* neuen, realen Status aktualisieren */
CDUpdateA(cdx);
UpdateGadgets(app);
/* Volume-Fenster aktualisieren, ist nicht in MakeInterior, da es nur hier gebraucht wird */
if (appwin->window)
{
GT_SetGadgetAttrs(appwin->gadget[GADGET_VOLUME_LEFT], appwin->window, NULL, GTSL_Level, cdx->cdx_Volume[0], TAG_END);
GT_SetGadgetAttrs(appwin->gadget[GADGET_VOLUME_MASTER], appwin->window, NULL, GTSL_Level, (cdx->cdx_Volume[0]+cdx->cdx_Volume[1])/2, TAG_END);
GT_SetGadgetAttrs(appwin->gadget[GADGET_VOLUME_RIGHT], appwin->window, NULL, GTSL_Level, cdx->cdx_Volume[1], TAG_END);
}
}
void TestABRepeat(struct Application *app)
{
/* Test für A-B-Repeat */
if ((app->cdstr->repeatmode == REPEATMODE_REPAB) && (app->cdstr->active == AUDIO_STAT_PLAYING))
{
/* Prüfen, ob a >= Anfang ist, ansonsten Absturz! */
if ((app->cdstr->a_track > 0) && (app->cdstr->a_adr >= app->cdstr->cdx->cdx_TOCData->FirstAudioAddress))
{
/* Prüfen, ob a < b ist */
if (app->cdstr->a_adr < app->cdstr->b_adr)
{
/* Prüfen, ob sich ACDPlay außerhalb des A-B-Bereichs befindet */
if ((app->cdstr->cdx->cdx_CurrentAbsAddr < app->cdstr->a_adr) || (app->cdstr->b_adr < app->cdstr->cdx->cdx_CurrentAbsAddr))
{
CDJumpA(app->cdstr->cdx, app->cdstr->a_adr, JUMPMODE_PLAY_ABS);
CDUpdateA(app->cdstr->cdx);
UpdateGadgets(app);
}
}
}
}
}
void UpdateWinTitle(Application *app)
{
int i = 0;
if (app->appwin[WINDOW_MAIN].window)
{
SetWindowTitles(app->appwin[WINDOW_MAIN].window, "", (UBYTE *) -1);
switch (app->cdstr->active)
{
case AUDIO_STAT_NO_DISK:
strncpy(app->winmaintitlebuf, ls[MSG_CDTITLE_NOCD], 50);
break;
case AUDIO_STAT_PLAYING:
strncpy(app->winmaintitlebuf, ls[MSG_CDTITLE_PLAYING], 50);
break;
case AUDIO_STAT_PAUSED:
strncpy(app->winmaintitlebuf, ls[MSG_CDTITLE_PAUSE], 50);
break;
case AUDIO_STAT_STOPPED:
strncpy(app->winmaintitlebuf, ls[MSG_CDTITLE_CD], 50);
break;
}
if ((app->cdstr->active != AUDIO_STAT_NO_DISK) && (app->flag_tool & FLAG_TOOL_USEWINDOWBAR))
{
strcat(app->winmaintitlebuf, " [");
strncat(app->winmaintitlebuf, app->cdstr->cdname, MAXCDNAME);
strcat(app->winmaintitlebuf, "]");
}
SetWindowTitles(app->appwin[WINDOW_MAIN].window, app->winmaintitlebuf, (UBYTE *) -1);
}
if (app->appwin[WINDOW_TITLES].window)
SetWindowTitles(app->appwin[WINDOW_TITLES].window, "", (UBYTE *) -1);
if ((app->appwin[WINDOW_TITLES].window) || (app->flag_tool & FLAG_TOOL_USESCREENBAR))
{
if (app->cdstr->active == AUDIO_STAT_NO_DISK)
strncpy(app->wintitlestitlebuf, ls[MSG_CDTITLE_NOCD], 50);
else
{
strncpy(app->wintitlestitlebuf, app->cdstr->cdname, MAXCDNAME);
strcat(app->wintitlestitlebuf, " · ");
strncat(app->wintitlestitlebuf, app->cdstr->artistname, MAXARTISTNAME);
}
}
if (app->appwin[WINDOW_TITLES].window)
SetWindowTitles(app->appwin[WINDOW_TITLES].window, app->wintitlestitlebuf, (UBYTE *) -1);
/* Screenbar benutzen */
if (app->flag_tool & FLAG_TOOL_USESCREENBAR)
{
for (i = 0; i < ANZ_WINDOWS; i++)
{
if (app->appwin[i].window)
SetWindowTitles(app->appwin[i].window, (UBYTE *) -1, app->wintitlestitlebuf);
}
}
}
BOOL UpdateCDTitles(Application *app)
{
BOOL success = TRUE;
FreeList(app->cdstr->cdtitles);
app->cdstr->cdtitles = NULL;
/* Neue Listen müssen auf jeden Fall erzeugt werden */
if (app->cdstr->cdtitles = GetVecA(sizeof(struct List), MEMF_PUBLIC | MEMF_CLEAR))
NewList(app->cdstr->cdtitles);
else
return (FALSE);
CDUpdateA(app->cdstr->cdx);
app->cdstr->active = app->cdstr->cdx->cdx_Active;
switch(app->cdstr->active)
{
case AUDIO_STAT_NO_DISK:
/* Name und Interpreten-Strings 'leeren' */
app->cdstr->cdname[0] = 0; /* Nullzeichen am Anfang */
app->cdstr->artistname[0] = 0;
/* Listen bleiben leer */
/* actprogramnode auf NULL setzen */
app->cdstr->actprognode = NULL;
/* Programm-LV leeren */
if (app->appwin[WINDOW_PROGRAM].window)
GT_SetGadgetAttrs(app->appwin[WINDOW_PROGRAM].gadget[GADGET_PROGRAM_LVPRG], app->appwin[WINDOW_PROGRAM].window, NULL, GTLV_Labels, ~0, TAG_END);
FreeList(app->cdstr->progtitles);
app->cdstr->progtitles = NULL;
if (app->cdstr->progtitles = GetVecA(sizeof(struct List), MEMF_PUBLIC | MEMF_CLEAR))
NewList(app->cdstr->progtitles);
else
success = FALSE;
if (app->appwin[WINDOW_PROGRAM].window)
GT_SetGadgetAttrs(app->appwin[WINDOW_PROGRAM].gadget[GADGET_PROGRAM_LVPRG], app->appwin[WINDOW_PROGRAM].window, NULL, GTLV_Labels, app->cdstr->progtitles, TAG_END);
break;
case AUDIO_STAT_PLAYING:
case AUDIO_STAT_PAUSED:
case AUDIO_STAT_STOPPED:
{
char *wantedname;
char *filebuffer;
ULONG filelength;
if (wantedname = GetVecA(strlen(app->cdstr->diskpath) + 22, MEMF_PUBLIC | MEMF_CLEAR))
{
strcpy(wantedname, app->cdstr->diskpath);
strcat(wantedname, "ID");
strcat(wantedname, app->cdstr->cdx->cdx_TOCData->CDID);
if ((filelength = ExamineFileLength(wantedname)) && (filebuffer = OpenFile(wantedname)))
{
/* Das passiert, wenn die CD-Titel bereits gespeichert */
/* waren und die Datei auch gefunden wurde */
char *actpos = filebuffer;
CDTitleNode *tempnode;
int i, j;
/* Name des Interpreten */
/* Bei allen Schleifen wird auf LF-Zeichen geachtet und überprüft, ob die
Datei schon zuende ist */
for (i = 0; (*(actpos) != 0x0A) && (actpos - filebuffer < filelength); i++, actpos++)
{
if (i >= MAXARTISTNAME)
{
while ((*(actpos) != 0x0A) && (actpos - filebuffer < filelength))
actpos++;
break;
}
app->cdstr->artistname[i] = *(actpos);
}
app->cdstr->artistname[i] = 0;
actpos++;
/* Falls der Interpret gar nicht ausgefüllt wurde, wird der Standardtitel genommen */
if (!strlen(app->cdstr->artistname))
strncpy(app->cdstr->artistname, ls[MSG_CDTITLE_UNKNOWNARTIST], MAXARTISTNAME);
/* CD-Name */
for (i = 0; (*(actpos) != 0x0A) && (actpos - filebuffer < filelength); i++, actpos++)
{
if (i >= MAXCDNAME)
{
while ((*(actpos) != 0x0A) && (actpos - filebuffer < filelength))
actpos++;
break;
}
app->cdstr->cdname[i] = *(actpos);
}
app->cdstr->cdname[i] = 0;
actpos++;
/* Falls kein Name eingetragen wurde, Standardname */
if (!strlen(app->cdstr->cdname))
strncpy(app->cdstr->cdname, ls[MSG_CDTITLE_UNKNOWNCD], MAXCDNAME);
/* Alle Titel */
for (i = 0; i < app->cdstr->num_track; i++)
{
if (tempnode = GetVecA(sizeof(struct CDTitleNode), MEMF_PUBLIC | MEMF_CLEAR))
{
for (j = 0; (*(actpos) != 0x0A) && (actpos - filebuffer < filelength); j++, actpos++)
{
if (i >= MAXTITLENAME)
{
while ((*(actpos) != 0x0A) && (actpos - filebuffer < filelength))
actpos++;
break;
}
tempnode->cdtn_titlename[j] = *(actpos);
}
tempnode->cdtn_titlename[j] = 0;
actpos++;
/* Falls kein Titel eingetragen wurde, Standardtitel */
if (!strlen(tempnode->cdtn_titlename))
{
strncpy(tempnode->cdtn_titlename, ls[MSG_CDTITLE_TRACK], MAXTITLENAME - 5);
strcat(tempnode->cdtn_titlename, " #");
inttostr(i + 1, tempnode->cdtn_titlename + strlen(tempnode->cdtn_titlename), 10);
}
tempnode->cdtn_Node.ln_Name = tempnode->cdtn_titlename;
AddTail(app->cdstr->cdtitles, (Node *) tempnode);
}
else
success = FALSE;
}
FreeVec(filebuffer);
}
else
{
/* Hier werden Default-Titel benutzt, wenn noch nichts */
/* gespeichert war oder die Datei nicht gefunden wurde */
/* oder sonstwas */
int i;
CDTitleNode *tempnode;
/* Name und Interpreten-Strings setzen */
strncpy(app->cdstr->cdname, ls[MSG_CDTITLE_UNKNOWNCD], MAXCDNAME);
strncpy(app->cdstr->artistname, ls[MSG_CDTITLE_UNKNOWNARTIST], MAXARTISTNAME);
/* Für jeden Track eine CDTitleNode erstellen und ausfüllen */
for (i = 1; i <= app->cdstr->num_track; i++)
{
if (tempnode = GetVecA(sizeof(struct CDTitleNode), MEMF_PUBLIC | MEMF_CLEAR))
{
strncpy(tempnode->cdtn_titlename, ls[MSG_CDTITLE_TRACK], MAXTITLENAME - 5);
strcat(tempnode->cdtn_titlename, " #");
inttostr(i, tempnode->cdtn_titlename + strlen(tempnode->cdtn_titlename), 10);
tempnode->cdtn_Node.ln_Name = tempnode->cdtn_titlename;
AddTail(app->cdstr->cdtitles, (Node *) tempnode);
}
else
success = FALSE;
}
}
FreeVec(wantedname);
}
/* Hier wird das Programm geladen */
ProgramLoad(app);
}
break;
}
return (success);
}
void ChangeButtonText(Application *app, WORD win, WORD button, char *newtext)
{
if (app->appwin[win].window)
{
if (app->appwin[win].gadget[button])
{
static struct NewGadget newgad;
static struct Gadget *glist = NULL;
static struct Gadget *gad;
RemoveGadget(app->appwin[win].window, app->appwin[win].gadget[button]);
/* Jetzt ist die Gadgetstruktur noch nicht freigegeben */
newgad.ng_LeftEdge = app->appwin[win].gadget[button]->LeftEdge;
newgad.ng_TopEdge = app->appwin[win].gadget[button]->TopEdge;
newgad.ng_Width = app->appwin[win].gadget[button]->Width;
newgad.ng_Height = app->appwin[win].gadget[button]->Height;
newgad.ng_GadgetText = newtext;
newgad.ng_TextAttr = app->font;
newgad.ng_GadgetID = button;
newgad.ng_VisualInfo = app->visualinfo;
/* setzt voraus, daß ein Buttongadget aus nur einem Gadget besteht */
app->appwin[win].gadget[button]->NextGadget = NULL;
FreeGadgets(app->appwin[win].gadget[button]);
gad = CreateContext(&glist);
app->appwin[win].gadget[button] = CreateGadget(BUTTON_KIND, gad, &newgad, TAG_END);
/* wieder was freigeben */
gad->NextGadget = NULL;
FreeGadgets(gad);
AddGadget(app->appwin[win].window, app->appwin[win].gadget[button], button);
RefreshGList(app->appwin[win].gadget[button], app->appwin[win].window, NULL, 1);
}
}
}
void SelectGadget(Application *app, WORD win, WORD gadid, BOOL status)
{
/* Diese Funktion wird eigentlich nur für das Pause-Gadget benutzt, */
/* funktioniert aber für jedes handgemachte Toggle-Gadget */
/* status == TRUE -> selektiert, status == FALSE -> nicht selektiert */
/* Es wird selbständig überprüft, ob das Window/Gadget existiert */
if (app->appwin[win].window)
{
if (app->appwin[win].gadget[gadid])
{
RemoveGadget(app->appwin[win].window, app->appwin[win].gadget[gadid]);
if (status)
app->appwin[win].gadget[gadid]->Flags |= GFLG_SELECTED;
else
app->appwin[win].gadget[gadid]->Flags &= ~GFLG_SELECTED;
AddGadget(app->appwin[win].window, app->appwin[win].gadget[gadid], gadid);
RefreshGList(app->appwin[win].gadget[gadid], app->appwin[win].window, NULL, 1);
}
}
}
BOOL MakeVisuals(Application *app, WORD win)
{
BOOL success = FALSE;
struct NewGadget newgad = {0};
Gadget *gad;
static char colon[] = ":";
static char leave[] = "";
int widest = 0;
/* Diese Attribute sind für alle Gadgets gleich */
newgad.ng_VisualInfo = app->visualinfo;
newgad.ng_TextAttr = app->font;
/* In allen Fenstern sind Gadgets, also: */
app->appwin[win].gadgetlist = NULL;
gad = CreateContext(&(app->appwin[win].gadgetlist));
switch (win)
{
case WINDOW_MAIN:
/*** Gadgets ***/
if (app->appwin[WINDOW_MAIN].gadget = GetVecA(sizeof(struct Gadget *) * ANZ_GADGET_MAIN, MEMF_PUBLIC | MEMF_CLEAR))
{
#include "ACDP_Image.c"
#include "ACDP_Image_mwb.c"
int temp1, temp2, i;
static char *TEXT_MAIN_PLAYMODE[5]; /* Wenn ich die Variablen gleich */
static char *TEXT_MAIN_REPEAT[5]; /* initialisiere, funktioniert's nicht */
/* Zuerst wird das längste GUI-Element und die Größe des Fensters ermittelt, */
/* nicht selektierte Elemente werden natürlich nicht berücksichtigt */
/* Mindestwerte */
widest = 200;
app->appwin[WINDOW_MAIN].maxsize[HEIGHT] = YOFFSET + 2;
if (app->flag_main & FLAG_MAIN_DIRECTCHOICE0)
{
temp1 = (FindWidest(TEXT_MAIN_DIRECTCHOICE0, app->font) - TextWidth("_", app->font) + BUTTONSPACE) * 10;
widest = temp1 > widest ? temp1 : widest;
app->appwin[WINDOW_MAIN].maxsize[HEIGHT] += BUTTONHEIGHT + INTERHEIGHT;
}
if (app->flag_main & FLAG_MAIN_DIRECTCHOICE1)
{
temp1 = (FindWidest(TEXT_MAIN_DIRECTCHOICE1, app->font) + BUTTONSPACE) * 10;
widest = temp1 > widest ? temp1 : widest;
app->appwin[WINDOW_MAIN].maxsize[HEIGHT] += BUTTONHEIGHT + INTERHEIGHT;
}
if (app->flag_main & FLAG_MAIN_TITLE)
app->appwin[WINDOW_MAIN].maxsize[HEIGHT] += BUTTONHEIGHT + INTERHEIGHT;
if (app->flag_main & FLAG_MAIN_TIME)
{
temp1 = TextWidth(ls[MSG_MAIN_INDEX], app->font) + TextWidth(ls[MSG_MAIN_TRACK], app->font) + 2 * TextWidth("99", app->font) + TextWidth("99:99 / 99:99", app->font) + 4 * INTERWIDTH + 3 * BUTTONSPACE;
widest = temp1 > widest ? temp1 : widest;
app->appwin[WINDOW_MAIN].maxsize[HEIGHT] += BUTTONHEIGHT + INTERHEIGHT;
}
if (app->flag_main & FLAG_MAIN_MODE)
{
TEXT_MAIN_PLAYMODE[0] = ls[MSG_MAIN_PM_CD_GAD];
TEXT_MAIN_PLAYMODE[1] = ls[MSG_MAIN_PM_RNDCD_GAD];
TEXT_MAIN_PLAYMODE[2] = ls[MSG_MAIN_PM_PRG_GAD];
TEXT_MAIN_PLAYMODE[3] = ls[MSG_MAIN_PM_RNDPRG_GAD];
TEXT_MAIN_PLAYMODE[4] = NULL;
TEXT_MAIN_REPEAT[0] = ls[MSG_MAIN_REP_NOREP_GAD];
TEXT_MAIN_REPEAT[1] = ls[MSG_MAIN_REP_REPTRACK_GAD];
TEXT_MAIN_REPEAT[2] = ls[MSG_MAIN_REP_REPALL_GAD];
TEXT_MAIN_REPEAT[3] = ls[MSG_MAIN_REP_REPAB_GAD];
TEXT_MAIN_REPEAT[4] = NULL;
temp1 = FindWidest(TEXT_MAIN_PLAYMODE, app->font);
temp2 = FindWidest(TEXT_MAIN_REPEAT, app->font);
temp1 = temp1 > temp2 ? temp1 : temp2;
temp1 = 2 * temp1 + 2 * BUTTONSPACE + 40;
widest = temp1 > widest ? temp1 : widest;
app->appwin[WINDOW_MAIN].maxsize[HEIGHT] += BUTTONHEIGHT + INTERHEIGHT;
}
if (app->flag_main & FLAG_MAIN_PANEL)
{
temp1 = 8 * WIDTH_PANELIMG;
widest = temp1 > widest ? temp1 : widest;
app->appwin[WINDOW_MAIN].maxsize[HEIGHT] += HEIGHT_PANELIMG + INTERHEIGHT;
}
if (app->flag_main & FLAG_MAIN_TRACKSLIDER)
app->appwin[WINDOW_MAIN].maxsize[HEIGHT] += app->font->ta_YSize + 3 + INTERHEIGHT;
/* widest ggf. durch 10 teilbar machen */
if ((app->flag_main & FLAG_MAIN_DIRECTCHOICE0) || (app->flag_main & FLAG_MAIN_DIRECTCHOICE1))
if (i = (widest % 10)) widest += 10 - i;
app->appwin[WINDOW_MAIN].minsize[WIDTH] = app->appwin[WINDOW_MAIN].maxsize[WIDTH] = XOFFSET + widest + 8;
app->appwin[WINDOW_MAIN].minsize[HEIGHT] = app->font->ta_YSize + app->screen->WBorTop + 1;
if (!app->flag_main) /* wenn gar keine Flags gesetzt sind */
app->appwin[WINDOW_MAIN].maxsize[HEIGHT] = app->appwin[WINDOW_MAIN].minsize[HEIGHT];
/* nun werden die Gadgets selbst erstellt .... */
/* ........................................... */
temp2 = YOFFSET; /* für die y-Pos der Gadgets benutzt */
if (app->flag_main & FLAG_MAIN_DIRECTCHOICE0)
{
newgad.ng_TopEdge = temp2;
newgad.ng_Width = widest / 10;
newgad.ng_Height = BUTTONHEIGHT;
for (i = GADGET_MAIN_DIRECTCHOICE0; i < GADGET_MAIN_DIRECTCHOICE0 + 10; i++)
{
newgad.ng_LeftEdge = XOFFSET + (i - GADGET_MAIN_DIRECTCHOICE0) * (widest / 10);
newgad.ng_GadgetText = TEXT_MAIN_DIRECTCHOICE0[i - GADGET_MAIN_DIRECTCHOICE0];
newgad.ng_GadgetID = i;
app->appwin[WINDOW_MAIN].gadget[i] = gad = CreateGadget(BUTTON_KIND, gad, &newgad, GT_Underscore, '_', GA_Disabled, (app->cdstr->num_track <= i - GADGET_MAIN_DIRECTCHOICE0) || (app->cdstr->active == AUDIO_STAT_NO_DISK) ? TRUE : FALSE, TAG_END);
}
temp2 += BUTTONHEIGHT + INTERHEIGHT;
}
if (app->flag_main & FLAG_MAIN_DIRECTCHOICE1)
{
if (app->flag_main & FLAG_MAIN_DIRECTCHOICE0) /* zwischen beiden Direktwahl- */
{ /* reihen soll kein Abstand sein */
temp2 -= INTERHEIGHT;
app->appwin[WINDOW_MAIN].maxsize[HEIGHT] -= INTERHEIGHT;
}
newgad.ng_TopEdge = temp2;
newgad.ng_Width = widest / 10;
newgad.ng_Height = BUTTONHEIGHT;
for (i = GADGET_MAIN_DIRECTCHOICE1; i < GADGET_MAIN_DIRECTCHOICE1 + 10; i++)
{
newgad.ng_LeftEdge = XOFFSET + (i - GADGET_MAIN_DIRECTCHOICE1) * (widest / 10);
newgad.ng_GadgetText = TEXT_MAIN_DIRECTCHOICE1[i - GADGET_MAIN_DIRECTCHOICE1];
newgad.ng_GadgetID = i;
app->appwin[WINDOW_MAIN].gadget[i] = gad = CreateGadget(BUTTON_KIND, gad, &newgad, GA_Disabled, (app->cdstr->num_track <= i - GADGET_MAIN_DIRECTCHOICE0) || (app->cdstr->active == AUDIO_STAT_NO_DISK) ? TRUE : FALSE, TAG_END);
}
temp2 += BUTTONHEIGHT + INTERHEIGHT;
}
if (app->flag_main & FLAG_MAIN_TITLE)
{
newgad.ng_LeftEdge = XOFFSET;
newgad.ng_TopEdge = temp2;
newgad.ng_Width = widest;
newgad.ng_Height = BUTTONHEIGHT;
newgad.ng_GadgetText = NULL;
newgad.ng_GadgetID = GADGET_MAIN_TITLESHOW;
app->appwin[WINDOW_MAIN].gadget[GADGET_MAIN_TITLESHOW] = gad = CreateGadget(TEXT_KIND, gad, &newgad, GTTX_Border, TRUE, TAG_END);
temp2 += BUTTONHEIGHT + INTERHEIGHT;
}
if (app->flag_main & FLAG_MAIN_TIME)
{
int temp3 = TextWidth("99", app->font);
int temp4 = TextWidth("99:99 / 99:99", app->font);
int temp5 = TextWidth(ls[MSG_MAIN_TRACK], app->font);
int temp6 = TextWidth(ls[MSG_MAIN_INDEX], app->font);
temp1 = temp5 + temp6 + 2 * temp3 + temp4 + 4 * INTERWIDTH + 3 * BUTTONSPACE;
newgad.ng_LeftEdge = XOFFSET + temp5 + INTERWIDTH;
newgad.ng_TopEdge = temp2;
newgad.ng_Width = temp3 + BUTTONSPACE + (widest - temp1) / 3;
newgad.ng_Height = BUTTONHEIGHT;
newgad.ng_GadgetText = ls[MSG_MAIN_TRACK];
newgad.ng_GadgetID = GADGET_MAIN_TRACKSHOW;
app->appwin[WINDOW_MAIN].gadget[GADGET_MAIN_TRACKSHOW] = gad = CreateGadget(NUMBER_KIND, gad, &newgad, GTNM_Border, TRUE, GTNM_Justification, GTJ_CENTER, GTNM_Number, app->cdstr->cdx->cdx_CurrentTrack, TAG_END);
newgad.ng_LeftEdge += newgad.ng_Width + INTERWIDTH + temp6 + INTERWIDTH;
newgad.ng_GadgetText = ls[MSG_MAIN_INDEX];
newgad.ng_GadgetID = GADGET_MAIN_INDEXSHOW;
app->appwin[WINDOW_MAIN].gadget[GADGET_MAIN_INDEXSHOW] = gad = CreateGadget(NUMBER_KIND, gad, &newgad, GTNM_Border, TRUE, GTNM_Justification, GTJ_CENTER, GTNM_Number, app->cdstr->cdx->cdx_CurrentIndex, TAG_END);
newgad.ng_LeftEdge += newgad.ng_Width + INTERWIDTH;
newgad.ng_Width = temp4 + BUTTONSPACE + widest - temp1 - (widest - temp1) / 3 * 2;
DoTimeBuffer(app);
newgad.ng_GadgetText = app->timeshowbuf;
newgad.ng_GadgetID = GADGET_MAIN_TIMESHOW;
app->appwin[WINDOW_MAIN].gadget[GADGET_MAIN_TIMESHOW] = gad = CreateGadget(BUTTON_KIND, gad, &newgad, GA_Disabled, app->cdstr->active == AUDIO_STAT_NO_DISK ? TRUE : FALSE, TAG_END);
temp2 += BUTTONHEIGHT + INTERHEIGHT;
}
if (app->flag_main & FLAG_MAIN_MODE)
{
newgad.ng_LeftEdge = XOFFSET;
newgad.ng_TopEdge = temp2;
newgad.ng_Width = widest / 2;
newgad.ng_Height = BUTTONHEIGHT;
newgad.ng_GadgetText = NULL;
newgad.ng_GadgetID = GADGET_MAIN_PLAYMODE;
app->appwin[WINDOW_MAIN].gadget[GADGET_MAIN_PLAYMODE] = gad = CreateGadget(CYCLE_KIND, gad, &newgad, GTCY_Labels, TEXT_MAIN_PLAYMODE, GA_Disabled, app->cdstr->active == AUDIO_STAT_NO_DISK ? TRUE : FALSE, GTCY_Active, app->cdstr->playmode, TAG_END);
newgad.ng_LeftEdge += widest / 2;
newgad.ng_Width = widest - (widest / 2);
newgad.ng_GadgetID = GADGET_MAIN_REPEATMODE;
app->appwin[WINDOW_MAIN].gadget[GADGET_MAIN_REPEATMODE] = gad = CreateGadget(CYCLE_KIND, gad, &newgad, GTCY_Labels, TEXT_MAIN_REPEAT, GA_Disabled, app->cdstr->active == AUDIO_STAT_NO_DISK ? TRUE : FALSE, GTCY_Active, app->cdstr->repeatmode, TAG_END);
temp2 += BUTTONHEIGHT + INTERHEIGHT;
}
if (app->flag_main & FLAG_MAIN_PANEL)
{
/* Testen, ob der Screen >=8 Farben hat. Ggf. mwb-bool einschalten */
BOOL mwb = FALSE;
if (((GetScreenDrawInfo(app->screen))->dri_Depth > 2) && app->magicwbmode)
mwb = TRUE;
if (app->appwin[WINDOW_MAIN].img = GetVecA(sizeof(struct Image) * 16, MEMF_PUBLIC | MEMF_CLEAR))
{
for (i = 0; i < 16; i++)
{
/* Images erstellen */
app->appwin[WINDOW_MAIN].img[i].LeftEdge = 0;
app->appwin[WINDOW_MAIN].img[i].TopEdge = 0;
app->appwin[WINDOW_MAIN].img[i].Width = WIDTH_PANELIMG;
app->appwin[WINDOW_MAIN].img[i].Height = HEIGHT_PANELIMG;
app->appwin[WINDOW_MAIN].img[i].Depth = mwb ? 3 : 2;
app->appwin[WINDOW_MAIN].img[i].ImageData = (mwb ? ((UWORD *)img_mwbdatapanel) : img_datapanel) + (i * HEIGHT_PANELIMG * (mwb ? 6 : 4));
app->appwin[WINDOW_MAIN].img[i].PlanePick = mwb ? 7 : 3;
app->appwin[WINDOW_MAIN].img[i].PlaneOnOff = 0;
app->appwin[WINDOW_MAIN].img[i].NextImage = NULL;
}
newgad.ng_TopEdge = temp2;
newgad.ng_Width = WIDTH_PANELIMG;
newgad.ng_Height = HEIGHT_PANELIMG;
newgad.ng_GadgetText = NULL;
/* Gadgets erstellen */
newgad.ng_LeftEdge = XOFFSET;
newgad.ng_GadgetID = GADGET_MAIN_CDOUT;
gad = CreateGadget(GENERIC_KIND, gad, &newgad, TAG_END);
app->appwin[WINDOW_MAIN].gadget[GADGET_MAIN_CDOUT] = gad;
for (i = GADGET_MAIN_JUMPBWRD; i <= GADGET_MAIN_SRCHFWRD; i++)
{
newgad.ng_LeftEdge = XOFFSET + (i - GADGET_MAIN_JUMPBWRD + 1) * WIDTH_PANELIMG + (widest - 8 * WIDTH_PANELIMG) / 2;
newgad.ng_GadgetID = i;
app->appwin[WINDOW_MAIN].gadget[i] = gad = CreateGadget(GENERIC_KIND, gad, &newgad, TAG_END);
}
for (i = GADGET_MAIN_STOP; i <= GADGET_MAIN_PLAY; i++)
{
newgad.ng_LeftEdge = XOFFSET + (i - GADGET_MAIN_STOP + 5) * WIDTH_PANELIMG + (widest - 8 * WIDTH_PANELIMG);
newgad.ng_GadgetID = i;
app->appwin[WINDOW_MAIN].gadget[i] = gad = CreateGadget(GENERIC_KIND, gad, &newgad, TAG_END);
}
/* Flags setzen und Gadgets mit Images verknüpfen */
for (i = GADGET_MAIN_CDOUT; i <= GADGET_MAIN_PLAY; i++)
{
app->appwin[WINDOW_MAIN].gadget[i]->GadgetType |= GTYP_BOOLGADGET;
app->appwin[WINDOW_MAIN].gadget[i]->Flags |= GFLG_GADGIMAGE | GFLG_GADGHIMAGE;
if ((app->cdstr->active == AUDIO_STAT_NO_DISK) && (i != GADGET_MAIN_CDOUT))
app->appwin[WINDOW_MAIN].gadget[i]->Flags |= GFLG_DISABLED;
app->appwin[WINDOW_MAIN].gadget[i]->Activation |= GACT_RELVERIFY | GACT_IMMEDIATE;
app->appwin[WINDOW_MAIN].gadget[i]->GadgetRender = app->appwin[WINDOW_MAIN].img + (i - GADGET_MAIN_CDOUT) * 2;
app->appwin[WINDOW_MAIN].gadget[i]->SelectRender = app->appwin[WINDOW_MAIN].img + ((i - GADGET_MAIN_CDOUT) * 2) + 1;
}
/* Stop-Gad im Stopped-Modus disablen */
if (app->cdstr->active == AUDIO_STAT_STOPPED)
app->appwin[WINDOW_MAIN].gadget[GADGET_MAIN_STOP]->Flags |= GFLG_DISABLED;
/* Pause soll ein Toggle-Gadget sein */
app->appwin[WINDOW_MAIN].gadget[GADGET_MAIN_PAUSE]->Activation |= GACT_TOGGLESELECT;
/* ggf. Gadget drücken */
if (app->cdstr->active == AUDIO_STAT_PAUSED)
app->appwin[WINDOW_MAIN].gadget[GADGET_MAIN_PAUSE]->Flags |= GFLG_SELECTED;
}
temp2 += HEIGHT_PANELIMG + INTERHEIGHT;
}
if (app->flag_main & FLAG_MAIN_TRACKSLIDER)
{
app->cdstr->time_percentage = app->cdstr->cdx->cdx_TrackLength ? (int) (((double) 100 / (double)app->cdstr->cdx->cdx_TrackLength) * app->cdstr->cdx->cdx_CurrentRelAddr) : 0;
newgad.ng_LeftEdge = XOFFSET;
newgad.ng_TopEdge = temp2;
newgad.ng_Width = widest;
newgad.ng_Height = app->font->ta_YSize + 3;
newgad.ng_GadgetText = NULL;
newgad.ng_GadgetID = GADGET_MAIN_TRACKSLIDER;
app->appwin[WINDOW_MAIN].gadget[GADGET_MAIN_TRACKSLIDER] = gad = CreateGadget(SLIDER_KIND, gad, &newgad, GTSL_Min, 0, GTSL_Max, 99, GTSL_Level, app->cdstr->time_percentage, PGA_Freedom, LORIENT_HORIZ, GA_RelVerify, TRUE, GA_Disabled, (app->cdstr->active == AUDIO_STAT_NO_DISK) || (app->cdstr->active == AUDIO_STAT_STOPPED) ? TRUE : FALSE, TAG_END);
}
success = TRUE;
}
break;
case WINDOW_ABOUT:
/*** Intuitexte ***/
if (app->appwin[WINDOW_ABOUT].itext = GetVecA(sizeof(struct IntuiText) * 4, MEMF_PUBLIC | MEMF_CLEAR))
{
#include "ACDP_Logo.c" /* Leider schon hier wegen der Konstanten */
int i, temp1;
char *stext[] = { ls[MSG_ABOUT_MAINPROGRAMMING],
leave,
"Marc Altmann",
"Martin Kresse",
leave,
ls[MSG_ABOUT_SCSIPROGRAMMING],
leave,
"Martin Kresse",
leave,
ls[MSG_ABOUT_TRANSLATEDBY],
leave,
ls[MSG_ABOUT_TRANSLATOR],
leave,
ls[MSG_ABOUT_PROOFREADBY],
leave,
ls[MSG_ABOUT_PROOFREADER],
leave,
ls[MSG_ABOUT_BETATESTERS],
leave,
"Marc Albrecht",
"Gregory Donner",
"Marc Doumayrou",
"Ole Friis",
"Siegfried Fröhlich",
"Sigurbjörn B. Lárusson",
"Jeroen Massar",
"Eivind Olsen",
"Bert Schulzki",
"Rino van Wijngaarden",
leave,
ls[MSG_ABOUT_THANKS],
leave,
"Alexander Altmann",
"Patrick Hess",
"Stefan Schupp",
leave,
ls[MSG_ABOUT_SUPPORT],
leave,
"mcthree@berlin.snafu.de",
"mak@atp.dame.de",
leave,
"http://www.snafu.de/~mcthree/acdplay",
NULL };
BYTE flags[] = { 1,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,
1,0,0,0,0,0,1,0,0,0,0,0 };
char *text[] = { PROG_FULLNAME,
"Emailware",
"© 1996,1997 Marc Altmann/Martin Kresse",
NULL };
temp1 = FindWidest(stext, app->font);
/* durch 16 teilbar machen */
if (i = (temp1 % 16))
temp1 += 16 - i;
widest = FindWidest(text, app->font);
widest = widest > WIDTH_ACDPLOGO ? widest : WIDTH_ACDPLOGO;
widest = widest > temp1 ? widest : temp1;
/* Scroller erstellen */
app->scroller->Text = stext;
app->scroller->Flags = flags;
app->scroller->LeftEdge = (widest - temp1) / 2 + FAKEREQUESTSPACE + XOFFSET + 10;
app->scroller->TopEdge = YOFFSET + 10 + HEIGHT_ACDPLOGO + 10 + 3 * app->font->ta_YSize + 12 + FAKEREQUESTSPACE;
app->scroller->Width = temp1;
app->scroller->Height = 6 * app->font->ta_YSize;
app->scroller->Font = app->font;
CreateScrollObject(app->scroller);
for (i = 0; i < 3; i++)
{
app->appwin[WINDOW_ABOUT].itext[i].FrontPen = 1;
app->appwin[WINDOW_ABOUT].itext[i].DrawMode = JAM1;
app->appwin[WINDOW_ABOUT].itext[i].LeftEdge = ((widest - TextWidth(text[i], app->font)) / 2) + FAKEREQUESTSPACE + XOFFSET + 10;
app->appwin[WINDOW_ABOUT].itext[i].TopEdge = i * app->font->ta_YSize + FAKEREQUESTSPACE + YOFFSET + 10 + HEIGHT_ACDPLOGO + 10;
app->appwin[WINDOW_ABOUT].itext[i].IText = text[i];
app->appwin[WINDOW_ABOUT].itext[i].ITextFont = app->font;
app->appwin[WINDOW_ABOUT].itext[i].NextText = i < 2 ? app->appwin[WINDOW_ABOUT].itext + i + 1 : NULL;
}
/* Image */
if (app->appwin[WINDOW_ABOUT].img = GetVecA(sizeof(struct Image), MEMF_PUBLIC | MEMF_CLEAR))
{
app->appwin[WINDOW_ABOUT].img->LeftEdge = ((widest - WIDTH_ACDPLOGO) / 2) + FAKEREQUESTSPACE + XOFFSET + 10;
app->appwin[WINDOW_ABOUT].img->TopEdge = FAKEREQUESTSPACE + YOFFSET + 10;
app->appwin[WINDOW_ABOUT].img->Width = WIDTH_ACDPLOGO;
app->appwin[WINDOW_ABOUT].img->Height = HEIGHT_ACDPLOGO;
app->appwin[WINDOW_ABOUT].img->Depth = 2;
app->appwin[WINDOW_ABOUT].img->ImageData = imgdata_acdplogo;
app->appwin[WINDOW_ABOUT].img->PlanePick = 3;
/* Gadget */
if (app->appwin[WINDOW_ABOUT].gadget = GetVecA(sizeof(struct Gadget *) * ANZ_GADGET_ABOUT, MEMF_PUBLIC | MEMF_CLEAR))
{
newgad.ng_TopEdge = YOFFSET + 10 + HEIGHT_ACDPLOGO + 10 + 3 * app->font->ta_YSize + 12 + 6 * app->font->ta_YSize + 10 + 2 * FAKEREQUESTSPACE;
newgad.ng_LeftEdge = XOFFSET;
newgad.ng_Width = 10 + widest + 10 + 2 * FAKEREQUESTSPACE;
newgad.ng_Height = BUTTONHEIGHT;
newgad.ng_GadgetText = ls[MSG_OK_GAD];
newgad.ng_GadgetID = GADGET_ABOUT_OK;
app->appwin[WINDOW_ABOUT].gadget[GADGET_ABOUT_OK] = gad = CreateGadget(BUTTON_KIND, gad, &newgad, TAG_END);
app->appwin[WINDOW_ABOUT].maxsize[WIDTH] = XOFFSET + 10 + widest + 10 + INTERWIDTH + 2 * FAKEREQUESTSPACE;
app->appwin[WINDOW_ABOUT].maxsize[HEIGHT] = YOFFSET + 10 + HEIGHT_ACDPLOGO + 10 + 3 * app->font->ta_YSize + 12 + 6 * app->font->ta_YSize + 10 + BUTTONHEIGHT + INTERHEIGHT + 2 + 2 * FAKEREQUESTSPACE;
if (app->appwin[WINDOW_ABOUT].bbox = GetVecA(sizeof(struct BevelBox), MEMF_PUBLIC | MEMF_CLEAR))
{
app->appwin[WINDOW_ABOUT].bbox->bb_LeftEdge = XOFFSET + 10 + FAKEREQUESTSPACE;
app->appwin[WINDOW_ABOUT].bbox->bb_TopEdge = YOFFSET + 10 + HEIGHT_ACDPLOGO + 10 + 3 * app->font->ta_YSize + 10 + FAKEREQUESTSPACE;
app->appwin[WINDOW_ABOUT].bbox->bb_Width = widest;
app->appwin[WINDOW_ABOUT].bbox->bb_Height = 2;
app->appwin[WINDOW_ABOUT].bbox->bb_FrameType = BBFT_BUTTON;
app->appwin[WINDOW_ABOUT].bbox->bb_Recessed = TRUE;
app->appwin[WINDOW_ABOUT].bbox->bb_VisualInfo = app->visualinfo;
success = TRUE;
}
}
}
}
break;
case WINDOW_CDINFO:
/* Intuitexte */
if (app->appwin[WINDOW_CDINFO].itext = GetVecA(sizeof(struct IntuiText) * ANZ_GADGET_CDINFO, MEMF_PUBLIC | MEMF_CLEAR))
{
int i;
char *text[] = { ls[MSG_CDINFO_ARTIST],
ls[MSG_CDINFO_CDTITLE],
leave,
ls[MSG_CDINFO_TRACKS],
ls[MSG_CDINFO_TIME],
NULL };
widest = FindWidest(text, app->font);
/* Maximalgröße */
app->appwin[WINDOW_CDINFO].maxheight = YOFFSET + 10 + 5 * app->font->ta_YSize + 10 + BUTTONHEIGHT + INTERHEIGHT + 10 + 2 * FAKEREQUESTSPACE;
AdjustNewSize(app, WINDOW_CDINFO, XOFFSET + 10 + widest + 10 + 100 + 10 + INTERWIDTH + 2 * FAKEREQUESTSPACE, app->appwin[WINDOW_CDINFO].maxheight);
for (i = 0; i < 5; i++)
{
app->appwin[WINDOW_CDINFO].itext[i].FrontPen = 2;
app->appwin[WINDOW_CDINFO].itext[i].DrawMode = JAM1;
app->appwin[WINDOW_CDINFO].itext[i].LeftEdge = FAKEREQUESTSPACE + XOFFSET + 10;
app->appwin[WINDOW_CDINFO].itext[i].TopEdge = (i * app->font->ta_YSize) + FAKEREQUESTSPACE + YOFFSET + 10;
app->appwin[WINDOW_CDINFO].itext[i].IText = text[i];
app->appwin[WINDOW_CDINFO].itext[i].ITextFont = app->font;
app->appwin[WINDOW_CDINFO].itext[i].NextText = i < 4 ? app->appwin[WINDOW_CDINFO].itext + i + 1 : NULL;
}
/* Gadgets */
if (app->appwin[WINDOW_CDINFO].gadget = GetVecA(sizeof(struct Gadget *) * 5, MEMF_PUBLIC | MEMF_CLEAR))
{
newgad.ng_TopEdge = YOFFSET + 10 + 5 * app->font->ta_YSize + 10 + 2 * FAKEREQUESTSPACE;
newgad.ng_LeftEdge = XOFFSET;
newgad.ng_Width = app->appwin[WINDOW_CDINFO].maxsize[WIDTH] - XOFFSET - 8;
newgad.ng_Height = BUTTONHEIGHT;
newgad.ng_GadgetText = ls[MSG_OK_GAD];
newgad.ng_GadgetID = GADGET_CDINFO_OK;
app->appwin[WINDOW_CDINFO].gadget[GADGET_CDINFO_OK] = gad = CreateGadget(BUTTON_KIND, gad, &newgad, TAG_END);
/* Diese Attribute sind für alle folgenden Gadgets gleich */
newgad.ng_LeftEdge = 10 + widest + 24 + FAKEREQUESTSPACE;
newgad.ng_Width = app->appwin[WINDOW_CDINFO].maxsize[WIDTH] - (XOFFSET + 10 + widest + 10 + 10 + INTERWIDTH + 2 * FAKEREQUESTSPACE);
newgad.ng_Height = app->font->ta_YSize;
newgad.ng_GadgetText = colon;
newgad.ng_Flags = NG_HIGHLABEL;
/* Autor */
newgad.ng_TopEdge = YOFFSET + 10 + FAKEREQUESTSPACE;
newgad.ng_GadgetID = GADGET_CDINFO_AUTHOR;
app->appwin[WINDOW_CDINFO].gadget[GADGET_CDINFO_AUTHOR] = gad = CreateGadget(TEXT_KIND, gad, &newgad, GTTX_Clipped, TRUE, TAG_END);
/* Titel */
newgad.ng_TopEdge += app->font->ta_YSize;
newgad.ng_GadgetID = GADGET_CDINFO_TITLE;
app->appwin[WINDOW_CDINFO].gadget[GADGET_CDINFO_TITLE] = gad = CreateGadget(TEXT_KIND, gad, &newgad, GTTX_Clipped, TRUE, TAG_END);
/* Spuren */
newgad.ng_TopEdge += 2 * app->font->ta_YSize;
newgad.ng_GadgetID = GADGET_CDINFO_TRACKS;
app->appwin[WINDOW_CDINFO].gadget[GADGET_CDINFO_TRACKS] = gad = CreateGadget(NUMBER_KIND, gad, &newgad, GTNM_Clipped, TRUE, TAG_END);
/* Zeit */
newgad.ng_TopEdge += app->font->ta_YSize;
newgad.ng_GadgetID = GADGET_CDINFO_TIME;
app->appwin[WINDOW_CDINFO].gadget[GADGET_CDINFO_TIME] = gad = CreateGadget(TEXT_KIND, gad, &newgad, GTTX_Clipped, TRUE, TAG_END);
success = TRUE;
}
}
break;
case WINDOW_DRIVEINFO:
/* Intuitexte */
if (app->appwin[WINDOW_DRIVEINFO].itext = GetVecA(sizeof(struct IntuiText) * 6, MEMF_PUBLIC | MEMF_CLEAR))
{
int i;
char *text[] = { ls[MSG_DRIVEINFO_DEVICE],
ls[MSG_DRIVEINFO_UNIT],
leave,
ls[MSG_DRIVEINFO_VENDOR],
ls[MSG_DRIVEINFO_PRODUCT],
ls[MSG_DRIVEINFO_SPECIFIC],
NULL };
widest = FindWidest(text, app->font);
/* Maximalgrößen */
app->appwin[WINDOW_DRIVEINFO].maxheight = YOFFSET + 10 + 6 * app->font->ta_YSize + 10 + BUTTONHEIGHT + INTERHEIGHT + 10 + 2 * FAKEREQUESTSPACE;
AdjustNewSize(app, WINDOW_DRIVEINFO, XOFFSET + 10 + widest + 10 + 100 + 10 + INTERWIDTH + 2 * FAKEREQUESTSPACE, app->appwin[WINDOW_DRIVEINFO].maxheight);
for (i = 0; i < 6; i++)
{
app->appwin[WINDOW_DRIVEINFO].itext[i].FrontPen = 2;
app->appwin[WINDOW_DRIVEINFO].itext[i].DrawMode = JAM1;
app->appwin[WINDOW_DRIVEINFO].itext[i].LeftEdge = FAKEREQUESTSPACE + XOFFSET + 10;
app->appwin[WINDOW_DRIVEINFO].itext[i].TopEdge = i * app->font->ta_YSize + FAKEREQUESTSPACE + YOFFSET + 10;
app->appwin[WINDOW_DRIVEINFO].itext[i].IText = text[i];
app->appwin[WINDOW_DRIVEINFO].itext[i].ITextFont = app->font;
app->appwin[WINDOW_DRIVEINFO].itext[i].NextText = i < 5 ? app->appwin[WINDOW_DRIVEINFO].itext + i + 1 : NULL;
}
/*** Gadgets ***/
if (app->appwin[WINDOW_DRIVEINFO].gadget = GetVecA(sizeof(struct Gadget *) * ANZ_GADGET_DRIVEINFO, MEMF_PUBLIC | MEMF_CLEAR))
{
newgad.ng_TopEdge = YOFFSET + 10 + 6 * app->font->ta_YSize + 10 + 2 * FAKEREQUESTSPACE;
newgad.ng_LeftEdge = XOFFSET;
newgad.ng_Width = app->appwin[WINDOW_DRIVEINFO].maxsize[WIDTH] - XOFFSET - 8;
newgad.ng_Height = BUTTONHEIGHT;
newgad.ng_GadgetText = ls[MSG_OK_GAD];
newgad.ng_GadgetID = GADGET_DRIVEINFO_OK;
app->appwin[WINDOW_DRIVEINFO].gadget[GADGET_DRIVEINFO_OK] = gad = CreateGadget(BUTTON_KIND, gad, &newgad, TAG_END);
/* Diese Attribute sind bei den folgenden Gadgets gleich */
newgad.ng_LeftEdge = 10 + widest + 24 + FAKEREQUESTSPACE;
newgad.ng_Width = app->appwin[WINDOW_DRIVEINFO].maxsize[WIDTH] - (XOFFSET + 10 + widest + 10 + 10 + INTERWIDTH + 2 * FAKEREQUESTSPACE);
newgad.ng_Height = app->font->ta_YSize;
newgad.ng_GadgetText = colon;
newgad.ng_Flags = NG_HIGHLABEL;
/* Laufwerk */
newgad.ng_TopEdge = YOFFSET + 10 + FAKEREQUESTSPACE;
newgad.ng_GadgetID = GADGET_DRIVEINFO_DEVICE;
app->appwin[WINDOW_DRIVEINFO].gadget[GADGET_DRIVEINFO_DEVICE] = gad = CreateGadget(TEXT_KIND, gad, &newgad, GTTX_Clipped, TRUE, TAG_END);
/* Unit */
newgad.ng_TopEdge += app->font->ta_YSize;
newgad.ng_GadgetID = GADGET_DRIVEINFO_UNIT;
app->appwin[WINDOW_DRIVEINFO].gadget[GADGET_DRIVEINFO_UNIT] = gad = CreateGadget(NUMBER_KIND, gad, &newgad, GTNM_Clipped, TRUE, TAG_END);
/* Hersteller */
newgad.ng_TopEdge += 2 * app->font->ta_YSize;
newgad.ng_GadgetID = GADGET_DRIVEINFO_VENDOR;
app->appwin[WINDOW_DRIVEINFO].gadget[GADGET_DRIVEINFO_VENDOR] = gad = CreateGadget(TEXT_KIND, gad, &newgad, GTTX_Clipped, TRUE, TAG_END);
/* Produkt */
newgad.ng_TopEdge += app->font->ta_YSize;
newgad.ng_GadgetID = GADGET_DRIVEINFO_PRODUCT;
app->appwin[WINDOW_DRIVEINFO].gadget[GADGET_DRIVEINFO_PRODUCT] = gad = CreateGadget(TEXT_KIND, gad, &newgad, GTTX_Clipped, TRUE, TAG_END);
/* Spezifisches */
newgad.ng_TopEdge += app->font->ta_YSize;
newgad.ng_GadgetID = GADGET_DRIVEINFO_SPECIFIC;
app->appwin[WINDOW_DRIVEINFO].gadget[GADGET_DRIVEINFO_SPECIFIC] = gad = CreateGadget(TEXT_KIND, gad, &newgad, GTTX_Clipped, TRUE, TAG_END);
success = TRUE;
}
}
break;
case WINDOW_PUBSCREEN:
/*** Gadgets ***/
if (app->appwin[WINDOW_PUBSCREEN].gadget = GetVecA(sizeof(struct Gadget *) * ANZ_GADGET_PUBSCREEN, MEMF_PUBLIC | MEMF_CLEAR))
{
widest = TextWidth(ls[MSG_PUBSCREEN_UPDATE], app->font) + BUTTONSPACE;
AdjustNewSize(app, WINDOW_PUBSCREEN, widest + XOFFSET + 8, YOFFSET + 4 + 4 * app->font->ta_YSize + BUTTONHEIGHT + INTERHEIGHT + 10);
newgad.ng_TopEdge = YOFFSET;
newgad.ng_LeftEdge = XOFFSET;
newgad.ng_Width = app->appwin[WINDOW_PUBSCREEN].maxsize[WIDTH] - XOFFSET - 8;
newgad.ng_Height = app->appwin[WINDOW_PUBSCREEN].maxsize[HEIGHT] - YOFFSET - INTERHEIGHT - 10 - BUTTONHEIGHT;
newgad.ng_GadgetID = GADGET_PUBSCREEN_LISTVIEW;
app->appwin[WINDOW_PUBSCREEN].gadget[GADGET_PUBSCREEN_LISTVIEW] = gad = CreateGadget(LISTVIEW_KIND, gad, &newgad, GTLV_Labels, NULL, TAG_END);
newgad.ng_TopEdge = newgad.ng_TopEdge + newgad.ng_Height;
newgad.ng_Height = BUTTONHEIGHT;
newgad.ng_GadgetText = ls[MSG_PUBSCREEN_UPDATE];
newgad.ng_GadgetID = GADGET_PUBSCREEN_UPDATE;
app->appwin[WINDOW_PUBSCREEN].gadget[GADGET_PUBSCREEN_UPDATE] = gad = CreateGadget(BUTTON_KIND, gad, &newgad, TAG_END);
success = TRUE;
}
break;
case WINDOW_TITLES:
/*** Gadgets ***/
if (app->appwin[WINDOW_TITLES].gadget = GetVecA(sizeof(struct Gadget *) * ANZ_GADGET_TITLES, MEMF_PUBLIC | MEMF_CLEAR))
{
AdjustNewSize(app, WINDOW_TITLES, MINWIDTH_LISTVIEWWIN, MINHEIGHT_LISTVIEWWIN);
newgad.ng_TopEdge = YOFFSET;
newgad.ng_LeftEdge = XOFFSET;
newgad.ng_Width = app->appwin[WINDOW_TITLES].maxsize[WIDTH] - XOFFSET - 8;
newgad.ng_Height = app->appwin[WINDOW_TITLES].maxsize[HEIGHT] - YOFFSET - INTERHEIGHT - 10;
newgad.ng_GadgetID = GADGET_TITLES_LISTVIEW;
app->appwin[WINDOW_TITLES].gadget[GADGET_TITLES_LISTVIEW] = gad = CreateGadget(LISTVIEW_KIND, gad, &newgad, GTLV_Labels, NULL, TAG_END);
success = TRUE;
}
break;
case WINDOW_EDIT:
/*** Gadgets ***/
if (app->appwin[WINDOW_EDIT].gadget = GetVecA(sizeof(struct Gadget *) * ANZ_GADGET_EDIT, MEMF_PUBLIC | MEMF_CLEAR))
{
int temp1, temp2;
char *text[] = { ls[MSG_EDIT_ARTIST],
ls[MSG_EDIT_CDTITLE],
NULL };
widest = (temp2 = FindWidest(text, app->font) + INTERWIDTH) + MINWIDTH_STRINGGAD;
temp1 = TextWidth(ls[MSG_EDIT_SAVE], app->font) + BUTTONSPACE;
if (temp1 > widest)
widest = temp1;
if (MINWIDTH_LISTVIEW > widest)
widest = MINWIDTH_LISTVIEW;
AdjustNewSize(app, WINDOW_EDIT, widest + XOFFSET + INTERWIDTH, MINHEIGHT_LISTVIEWWIN + 4 * BUTTONHEIGHT + 3 * INTERHEIGHT);
/* Titel-String */
newgad.ng_TopEdge = YOFFSET;
newgad.ng_LeftEdge = XOFFSET + temp2;
newgad.ng_Width = app->appwin[WINDOW_EDIT].maxsize[WIDTH] - XOFFSET - INTERWIDTH - temp2;
newgad.ng_Height = BUTTONHEIGHT;
newgad.ng_GadgetText = ls[MSG_EDIT_CDTITLE];
newgad.ng_GadgetID = GADGET_EDIT_TITLE;
app->appwin[WINDOW_EDIT].gadget[GADGET_EDIT_TITLE] = gad = CreateGadget(STRING_KIND, gad, &newgad, GA_Disabled, (app->cdstr->active == AUDIO_STAT_NO_DISK) ? TRUE : FALSE, GA_TabCycle, TRUE, GTST_MaxChars, MAXCDNAME, TAG_END);
/* Künstler-String */
newgad.ng_TopEdge += BUTTONHEIGHT + INTERHEIGHT;
newgad.ng_GadgetText = ls[MSG_EDIT_ARTIST];
newgad.ng_GadgetID = GADGET_EDIT_ARTIST;
app->appwin[WINDOW_EDIT].gadget[GADGET_EDIT_ARTIST] = gad = CreateGadget(STRING_KIND, gad, &newgad, GA_Disabled, (app->cdstr->active == AUDIO_STAT_NO_DISK) ? TRUE : FALSE, GA_TabCycle, TRUE, GTST_MaxChars, MAXARTISTNAME, TAG_END);
/* Save-Button */
newgad.ng_TopEdge = app->appwin[WINDOW_EDIT].maxsize[HEIGHT] - INTERHEIGHT - BUTTONHEIGHT - 10;
newgad.ng_LeftEdge = XOFFSET;
newgad.ng_Width = app->appwin[WINDOW_EDIT].maxsize[WIDTH] - XOFFSET - INTERWIDTH;
newgad.ng_GadgetText = ls[MSG_EDIT_SAVE];
newgad.ng_GadgetID = GADGET_EDIT_SAVE;
app->appwin[WINDOW_EDIT].gadget[GADGET_EDIT_SAVE] = gad = CreateGadget(BUTTON_KIND, gad, &newgad, GA_Disabled, (app->cdstr->active == AUDIO_STAT_NO_DISK) ? TRUE : FALSE, TAG_END);
/* Track-Titel-String, muß vor dem Listview kreiert werden */
newgad.ng_TopEdge -= BUTTONHEIGHT + INTERHEIGHT;
newgad.ng_GadgetText = NULL;
newgad.ng_GadgetID = GADGET_EDIT_TRACKTITLE;
app->appwin[WINDOW_EDIT].gadget[GADGET_EDIT_TRACKTITLE] = gad = CreateGadget(STRING_KIND, gad, &newgad, GA_Disabled, app->edit_pos >= 0 ? FALSE : TRUE, GA_TabCycle, TRUE, GTST_MaxChars, MAXTITLENAME, TAG_END);
/* Listview */
newgad.ng_TopEdge = YOFFSET + 2 * BUTTONHEIGHT + 2 * INTERHEIGHT;
newgad.ng_Height = app->appwin[WINDOW_EDIT].maxsize[HEIGHT] - newgad.ng_TopEdge - 2 * INTERHEIGHT - BUTTONHEIGHT - 10;
newgad.ng_GadgetText = NULL;
newgad.ng_GadgetID = GADGET_EDIT_LISTVIEW;
app->appwin[WINDOW_EDIT].gadget[GADGET_EDIT_LISTVIEW] = gad = CreateGadget(LISTVIEW_KIND, gad, &newgad, GTLV_Labels, NULL, GTLV_ShowSelected, app->appwin[WINDOW_EDIT].gadget[GADGET_EDIT_TRACKTITLE], TAG_END);
success = TRUE;
}
break;
case WINDOW_PROGRAM:
if (app->appwin[WINDOW_PROGRAM].gadget = GetVecA(sizeof(struct Gadget *) * ANZ_GADGET_PROGRAM, MEMF_PUBLIC | MEMF_CLEAR))
{
char *text[] = { ls[MSG_PROGRAM_COPYALL],
ls[MSG_PROGRAM_LOAD],
ls[MSG_PROGRAM_DEL],
ls[MSG_PROGRAM_SAVE],
NULL };
widest = (FindWidest(text, app->font) + BUTTONSPACE) * 2;
/* widest muß mindestens so lang sein: */
if (widest < 2 * MINWIDTH_LISTVIEW + INTERWIDTH)
widest = 2 * MINWIDTH_LISTVIEW + INTERWIDTH;
AdjustNewSize(app, WINDOW_PROGRAM, widest + XOFFSET + INTERWIDTH, MINHEIGHT_LISTVIEWWIN + app->font->ta_YSize + INTERHEIGHT + 2 * BUTTONHEIGHT);
/* CD-Listview */
newgad.ng_TopEdge = YOFFSET + app->font->ta_YSize + INTERHEIGHT;
newgad.ng_LeftEdge = XOFFSET;
newgad.ng_Width = (app->appwin[WINDOW_PROGRAM].maxsize[WIDTH] - XOFFSET - 2 * INTERWIDTH) / 2;
newgad.ng_Height = app->appwin[WINDOW_PROGRAM].maxsize[HEIGHT] - YOFFSET - app->font->ta_YSize - 2 * INTERHEIGHT - 2 * BUTTONHEIGHT - 10;
newgad.ng_GadgetText = ls[MSG_PROGRAM_CD];
newgad.ng_GadgetID = GADGET_PROGRAM_LVCD;
newgad.ng_Flags = NG_HIGHLABEL;
app->appwin[WINDOW_PROGRAM].gadget[GADGET_PROGRAM_LVCD] = gad = CreateGadget(LISTVIEW_KIND, gad, &newgad, GTLV_Labels, NULL, TAG_END);
/* Programm-Listview */
newgad.ng_LeftEdge += newgad.ng_Width + INTERWIDTH;
newgad.ng_Width = app->appwin[WINDOW_PROGRAM].maxsize[WIDTH] - XOFFSET - 2 * INTERWIDTH - newgad.ng_Width;
newgad.ng_GadgetText = ls[MSG_PROGRAM_PRG];
newgad.ng_GadgetID = GADGET_PROGRAM_LVPRG;
app->appwin[WINDOW_PROGRAM].gadget[GADGET_PROGRAM_LVPRG] = gad = CreateGadget(LISTVIEW_KIND, gad, &newgad, GTLV_Labels, NULL, TAG_END);
/* Button: Alles kopieren */
newgad.ng_TopEdge += newgad.ng_Height;
newgad.ng_LeftEdge = XOFFSET;
newgad.ng_Width = (app->appwin[WINDOW_PROGRAM].maxsize[WIDTH] - XOFFSET - INTERWIDTH) / 2;
newgad.ng_Height = BUTTONHEIGHT;
newgad.ng_GadgetText = ls[MSG_PROGRAM_COPYALL];
newgad.ng_GadgetID = GADGET_PROGRAM_COPYALL;
newgad.ng_Flags = 0;
app->appwin[WINDOW_PROGRAM].gadget[GADGET_PROGRAM_COPYALL] = gad = CreateGadget(BUTTON_KIND, gad, &newgad, GA_Disabled, (app->cdstr->active == AUDIO_STAT_NO_DISK) ? TRUE : FALSE, TAG_END);
/* Button: Laden */
newgad.ng_TopEdge += BUTTONHEIGHT;
newgad.ng_GadgetText = ls[MSG_PROGRAM_LOAD];
newgad.ng_GadgetID = GADGET_PROGRAM_LOAD;
app->appwin[WINDOW_PROGRAM].gadget[GADGET_PROGRAM_LOAD] = gad = CreateGadget(BUTTON_KIND, gad, &newgad, GA_Disabled, (app->cdstr->active == AUDIO_STAT_NO_DISK) ? TRUE : FALSE, TAG_END);
/* Button: Prog löschen */
newgad.ng_LeftEdge += newgad.ng_Width;
newgad.ng_Width = app->appwin[WINDOW_PROGRAM].maxsize[WIDTH] - XOFFSET - INTERWIDTH - newgad.ng_Width;
newgad.ng_TopEdge -= BUTTONHEIGHT;
newgad.ng_GadgetText = ls[MSG_PROGRAM_DEL];
newgad.ng_GadgetID = GADGET_PROGRAM_DEL;
app->appwin[WINDOW_PROGRAM].gadget[GADGET_PROGRAM_DEL] = gad = CreateGadget(BUTTON_KIND, gad, &newgad, GA_Disabled, (app->cdstr->active == AUDIO_STAT_NO_DISK) ? TRUE : FALSE, TAG_END);
/* Button: Speichern */
newgad.ng_TopEdge += BUTTONHEIGHT;
newgad.ng_GadgetText = ls[MSG_PROGRAM_SAVE];
newgad.ng_GadgetID = GADGET_PROGRAM_SAVE;
app->appwin[WINDOW_PROGRAM].gadget[GADGET_PROGRAM_SAVE] = gad = CreateGadget(BUTTON_KIND, gad, &newgad, GA_Disabled, (app->cdstr->active == AUDIO_STAT_NO_DISK) ? TRUE : FALSE, TAG_END);
success = TRUE;
}
break;
case WINDOW_VOLUME:
if (app->appwin[WINDOW_VOLUME].gadget = GetVecA(sizeof(struct Gadget *) * ANZ_GADGET_VOLUME, MEMF_PUBLIC | MEMF_CLEAR))
{
struct CDxRequest *cdx = app->cdstr->cdx;
int temp1;
int temp2;
char *text[] = { ls[MSG_VOLUME_LEFT],
ls[MSG_VOLUME_MASTER],
ls[MSG_VOLUME_RIGHT],
NULL };
widest = FindWidest(text, app->font);
temp1 = 3 * TextWidth("8", app->font) + 2;
if (temp1 > widest) widest = temp1;
temp2 = widest;
widest *= 3;
widest += 2 * INTERWIDTH;
AdjustNewSize(app, WINDOW_VOLUME, XOFFSET + widest + INTERWIDTH, YOFFSET + 2 * app->font->ta_YSize + 3 * INTERHEIGHT + MINHEIGHT_VERTSLIDER + 10);
/* Volumewerte aktualisieren */
CDVolumeA(cdx, GET_VOLUME);
/* Linker Lautstärkeregler */
newgad.ng_Width = temp1;
temp1 = (app->appwin[WINDOW_VOLUME].maxsize[WIDTH] - XOFFSET - 3 * INTERWIDTH - 3 * temp2) / 2;
newgad.ng_LeftEdge = XOFFSET + (temp2 - newgad.ng_Width) / 2;
newgad.ng_TopEdge = YOFFSET + app->font->ta_YSize + INTERHEIGHT + 2;
newgad.ng_Height = app->appwin[WINDOW_VOLUME].maxsize[HEIGHT] - newgad.ng_TopEdge - 2 * INTERHEIGHT - app->font->ta_YSize - 10 - 2;
newgad.ng_GadgetText = text[0];
newgad.ng_GadgetID = GADGET_VOLUME_LEFT;
newgad.ng_Flags = PLACETEXT_ABOVE;
app->appwin[WINDOW_VOLUME].gadget[GADGET_VOLUME_LEFT] = gad = CreateGadget(SLIDER_KIND, gad, &newgad, GTSL_Max, 255, GTSL_Level, cdx->cdx_Volume[0], GTSL_LevelFormat, "%2ld", GTSL_MaxLevelLen, 3, GTSL_LevelPlace, PLACETEXT_BELOW, PGA_Freedom, LORIENT_VERT, GA_Disabled, cdx->cdx_Flags & SPECIALF_ATAPI, TAG_END);
/* Gesamtlautstärke */
newgad.ng_Width += 2;
newgad.ng_LeftEdge = XOFFSET + temp2 + INTERWIDTH + (temp2 - newgad.ng_Width) / 2 + temp1;
newgad.ng_TopEdge -= 2;
newgad.ng_Height += 4;
newgad.ng_GadgetText = text[1];
newgad.ng_GadgetID = GADGET_VOLUME_MASTER;
newgad.ng_Flags = PLACETEXT_ABOVE | NG_HIGHLABEL;
app->appwin[WINDOW_VOLUME].gadget[GADGET_VOLUME_MASTER] = gad = CreateGadget(SLIDER_KIND, gad, &newgad, GTSL_Max, 255, GTSL_Level, (cdx->cdx_Volume[0]+cdx->cdx_Volume[1])/2, GTSL_LevelFormat, "%2ld", GTSL_MaxLevelLen, 3, GTSL_LevelPlace, PLACETEXT_BELOW, PGA_Freedom, LORIENT_VERT, TAG_END);
/* Rechter Lautstärkeregler */
newgad.ng_Width -= 2;
newgad.ng_LeftEdge = app->appwin[WINDOW_VOLUME].maxsize[WIDTH] - INTERWIDTH - temp2 + (temp2 - newgad.ng_Width) / 2;
newgad.ng_TopEdge += 2;
newgad.ng_Height -= 4;
newgad.ng_GadgetText = text[2];
newgad.ng_GadgetID = GADGET_VOLUME_RIGHT;
newgad.ng_Flags = PLACETEXT_ABOVE;
app->appwin[WINDOW_VOLUME].gadget[GADGET_VOLUME_RIGHT] = gad = CreateGadget(SLIDER_KIND, gad, &newgad, GTSL_Max, 255, GTSL_Level, cdx->cdx_Volume[1], GTSL_LevelFormat, "%2ld", GTSL_MaxLevelLen, 3, GTSL_LevelPlace, PLACETEXT_BELOW, PGA_Freedom, LORIENT_VERT, GA_Disabled, cdx->cdx_Flags & SPECIALF_ATAPI, TAG_END);
success = TRUE;
}
break;
case WINDOW_AB:
if (app->appwin[WINDOW_AB].gadget = GetVecA(sizeof(struct Gadget *) * ANZ_GADGET_AB, MEMF_PUBLIC))
{
int temp1, temp2, temp3; /* später wichtig */
char *text[] = { "A", "B", NULL };
/* temp1 enthält die Länge des A- oder B-Buttons */
/* temp2 enthält die Länge des Track-Strings */
/* temp3 --------"-------- des Zeit-Strings */
/* -> Daraus wird die Größe in Prozent berechnet, */
/* um beim Sizing die Proportionen zu wahren.. */
temp1 = FindWidest(text, app->font) + BUTTONSPACE;
temp2 = TextWidth("99", app->font) + BUTTONSPACE;
temp3 = TextWidth("99:99.99", app->font) + BUTTONSPACE;
widest = temp1 + temp2 + temp3;
/* Maximalgrößen */
app->appwin[WINDOW_AB].maxheight = YOFFSET + 2 * BUTTONHEIGHT + app->font->ta_YSize + 2 * INTERHEIGHT + 10;
AdjustNewSize(app, WINDOW_AB, XOFFSET + widest + INTERWIDTH, app->appwin[WINDOW_AB].maxheight);
/* Der A-Button */
newgad.ng_LeftEdge = XOFFSET;
newgad.ng_TopEdge = YOFFSET + app->font->ta_YSize + INTERHEIGHT;
newgad.ng_Width = (WORD)((app->appwin[WINDOW_AB].maxsize[WIDTH] - XOFFSET - INTERWIDTH) / (DOUBLE)widest * temp1);
newgad.ng_Height = BUTTONHEIGHT;
newgad.ng_GadgetText = text[0];
newgad.ng_GadgetID = GADGET_AB_A;
app->appwin[WINDOW_AB].gadget[GADGET_AB_A] = gad = CreateGadget(BUTTON_KIND, gad, &newgad, GA_Disabled, app->cdstr->active == AUDIO_STAT_NO_DISK || app->cdstr->active == AUDIO_STAT_STOPPED ? TRUE : FALSE, TAG_END);
/* Der B-Button */
newgad.ng_TopEdge += BUTTONHEIGHT;
newgad.ng_GadgetText = text[1];
newgad.ng_GadgetID = GADGET_AB_B;
app->appwin[WINDOW_AB].gadget[GADGET_AB_B] = gad = CreateGadget(BUTTON_KIND, gad, &newgad, GA_Disabled, app->cdstr->active == AUDIO_STAT_NO_DISK || app->cdstr->active == AUDIO_STAT_STOPPED ? TRUE : FALSE, TAG_END);
/* Der A-Track-String */
newgad.ng_LeftEdge += newgad.ng_Width;
newgad.ng_TopEdge -= BUTTONHEIGHT;
newgad.ng_Width = (WORD)((app->appwin[WINDOW_AB].maxsize[WIDTH] - XOFFSET - INTERWIDTH) / (DOUBLE)widest * temp2);
newgad.ng_GadgetText = ls[MSG_AB_TRACK];
newgad.ng_GadgetID = GADGET_AB_A_TRACK;
newgad.ng_Flags = PLACETEXT_ABOVE | NG_HIGHLABEL;
app->appwin[WINDOW_AB].gadget[GADGET_AB_A_TRACK] = gad = CreateGadget(INTEGER_KIND, gad, &newgad, GA_Disabled, app->cdstr->active == AUDIO_STAT_NO_DISK ? TRUE : FALSE, GA_TabCycle, TRUE, GTIN_MaxChars, 2, TAG_END);
/* Der B-Track-String */
newgad.ng_TopEdge += BUTTONHEIGHT;
newgad.ng_GadgetText = NULL;
newgad.ng_GadgetID = GADGET_AB_B_TRACK;
app->appwin[WINDOW_AB].gadget[GADGET_AB_B_TRACK] = gad = CreateGadget(INTEGER_KIND, gad, &newgad, GA_Disabled, app->cdstr->active == AUDIO_STAT_NO_DISK ? TRUE : FALSE, GA_TabCycle, TRUE, GTIN_MaxChars, 2, TAG_END);
/* Der A-Zeit-String */
newgad.ng_LeftEdge += newgad.ng_Width;
newgad.ng_TopEdge -= BUTTONHEIGHT;
newgad.ng_Width = app->appwin[WINDOW_AB].maxsize[WIDTH] - newgad.ng_LeftEdge - INTERWIDTH;
newgad.ng_GadgetText = ls[MSG_AB_TIME];
newgad.ng_GadgetID = GADGET_AB_A_TIME;
app->appwin[WINDOW_AB].gadget[GADGET_AB_A_TIME] = gad = CreateGadget(STRING_KIND, gad, &newgad, GA_Disabled, app->cdstr->active == AUDIO_STAT_NO_DISK ? TRUE : FALSE, GA_TabCycle, TRUE, GTST_MaxChars, 8, TAG_END);
/* Der B-Zeit-String */
newgad.ng_TopEdge += BUTTONHEIGHT;
newgad.ng_GadgetText = NULL;
newgad.ng_GadgetID = GADGET_AB_B_TIME;
app->appwin[WINDOW_AB].gadget[GADGET_AB_B_TIME] = gad = CreateGadget(STRING_KIND, gad, &newgad, GA_Disabled, app->cdstr->active == AUDIO_STAT_NO_DISK ? TRUE : FALSE, GA_TabCycle, TRUE, GTST_MaxChars, 8, TAG_END);
success = TRUE;
}
break;
case WINDOW_SAVEAUDIO:
if (app->appwin[WINDOW_SAVEAUDIO].gadget = GetVecA(sizeof(struct Gadget *) * ANZ_GADGET_SAVEAUDIO, MEMF_PUBLIC))
{
int temp1, temp2, temp3, temp4;
static char *TEXT_SAVEAUDIO_FORMAT[2],
*TEXT_SAVEAUDIO_FREQ[5];
char *text[] = { ls[MSG_SAVEAUDIO_FORMAT],
"Frequency", /* ls[MSG_SAVEAUDIO_FREQ], */
ls[MSG_SAVEAUDIO_FILENAME],
ls[MSG_SAVEAUDIO_SIZE],
NULL };
temp1 = FindWidest(text, app->font);
TEXT_SAVEAUDIO_FORMAT[0] = "CDR";
TEXT_SAVEAUDIO_FORMAT[1] = NULL;
temp2 = FindWidest(TEXT_SAVEAUDIO_FORMAT, app->font) + 20; // 20 für Cycleimage
TEXT_SAVEAUDIO_FREQ[0] = "5512";
TEXT_SAVEAUDIO_FREQ[1] = "11025";
TEXT_SAVEAUDIO_FREQ[2] = "22050";
TEXT_SAVEAUDIO_FREQ[3] = "44100";
TEXT_SAVEAUDIO_FREQ[4] = NULL;
temp3 = FindWidest(TEXT_SAVEAUDIO_FREQ, app->font) + 20; // 20 Cycleimage
if (temp3 > temp2)
temp2 = temp3;
temp3 = TextWidth("000.000.000 Byte", app->font);
if (temp3 > temp2)
temp2 = temp3;
temp3 = TextWidth("G", app->font) + BUTTONSPACE;
if (temp3 > temp2)
temp2 = temp3;
temp2 += BUTTONSPACE;
temp4 = TextWidth(ls[MSG_SAVEAUDIO_SAVE], app->font) + BUTTONSPACE;
widest = temp1 + INTERWIDTH + temp2;
if (temp4 > widest)
widest = temp4;
/* Maximalgrößen */
app->appwin[WINDOW_SAVEAUDIO].maxheight = YOFFSET + 5 * BUTTONHEIGHT + 5 * INTERHEIGHT + 10;
AdjustNewSize(app, WINDOW_SAVEAUDIO, XOFFSET + widest + INTERWIDTH, app->appwin[WINDOW_SAVEAUDIO].maxheight);
/* Der Format-Button */
newgad.ng_LeftEdge = XOFFSET + temp1 + INTERWIDTH;
newgad.ng_TopEdge = YOFFSET;
newgad.ng_Width = app->appwin[WINDOW_SAVEAUDIO].maxsize[WIDTH] - XOFFSET - temp1 - 2 * INTERWIDTH;
newgad.ng_Height = BUTTONHEIGHT;
newgad.ng_GadgetText = ls[MSG_SAVEAUDIO_FORMAT];
newgad.ng_GadgetID = GADGET_SAVEAUDIO_FORMAT;
app->appwin[WINDOW_SAVEAUDIO].gadget[GADGET_SAVEAUDIO_FORMAT] = gad = CreateGadget(CYCLE_KIND, gad, &newgad, GA_Disabled, TRUE, GTCY_Labels, TEXT_SAVEAUDIO_FORMAT, GTCY_Active, app->cdstr->fileformat, TAG_END);
/* Der Freq-Slider */
newgad.ng_TopEdge += BUTTONHEIGHT + INTERHEIGHT;
newgad.ng_GadgetText = "Frequency"; /* ls[MSG_SAVEAUDIO_FREQ]; */
newgad.ng_GadgetID = GADGET_SAVEAUDIO_FREQ;
app->appwin[WINDOW_SAVEAUDIO].gadget[GADGET_SAVEAUDIO_FREQ] = gad = CreateGadget(CYCLE_KIND, gad, &newgad, GA_Disabled, app->cdstr->fileformat == FORMAT_CDR ? TRUE : FALSE, GTCY_Labels, TEXT_SAVEAUDIO_FREQ, GTCY_Active, app->cdstr->freq, TAG_END);
/* vorgezogen: Size-Textfeld */
newgad.ng_TopEdge += 2 * BUTTONHEIGHT + 2 * INTERHEIGHT;
newgad.ng_GadgetText = ls[MSG_SAVEAUDIO_SIZE];
newgad.ng_GadgetID = GADGET_SAVEAUDIO_SIZE;
app->appwin[WINDOW_SAVEAUDIO].gadget[GADGET_SAVEAUDIO_SIZE] = gad = CreateGadget(TEXT_KIND, gad, &newgad, GTTX_Border, TRUE, TAG_END);
/* Die Filename-Buttons */
newgad.ng_TopEdge -= BUTTONHEIGHT + INTERHEIGHT;
newgad.ng_Width -= temp3;
newgad.ng_GadgetText = ls[MSG_SAVEAUDIO_FILENAME];
newgad.ng_GadgetID = GADGET_SAVEAUDIO_FILENAME;
app->appwin[WINDOW_SAVEAUDIO].gadget[GADGET_SAVEAUDIO_FILENAME] = gad = CreateGadget(STRING_KIND, gad, &newgad, GTST_MaxChars, DISKPATHLENGTH, TAG_END);
newgad.ng_LeftEdge += newgad.ng_Width;
newgad.ng_Width = temp3;
newgad.ng_GadgetText = "G";
newgad.ng_GadgetID = GADGET_SAVEAUDIO_GETFILE;
app->appwin[WINDOW_SAVEAUDIO].gadget[GADGET_SAVEAUDIO_GETFILE] = gad = CreateGadget(BUTTON_KIND, gad, &newgad, TAG_END);
/* Der Save-Button */
newgad.ng_LeftEdge = XOFFSET;
newgad.ng_TopEdge += 2 * BUTTONHEIGHT + 2 * INTERHEIGHT;
newgad.ng_Width = app->appwin[WINDOW_SAVEAUDIO].maxsize[WIDTH] - XOFFSET - INTERWIDTH;
newgad.ng_GadgetText = ls[MSG_SAVEAUDIO_SAVE];
newgad.ng_GadgetID = GADGET_SAVEAUDIO_SAVE;
app->appwin[WINDOW_SAVEAUDIO].gadget[GADGET_SAVEAUDIO_SAVE] = gad = CreateGadget(BUTTON_KIND, gad, &newgad, TAG_END);
success = TRUE;
}
break;
case WINDOW_SAVING:
if (app->appwin[WINDOW_SAVING].gadget = GetVecA(sizeof(struct Gadget *) * ANZ_GADGET_SAVING, MEMF_PUBLIC))
{
int temp1, temp2;
temp1 = TextWidth("Transferred", /* ls[MSG_SAVING_TRANSFERRED], */app->font) + INTERWIDTH;
temp2 = temp1 + TextWidth("100 %", app->font);
widest = TextWidth(ls[MSG_SAVING_CANCEL], app->font);
if (temp2 > widest)
widest = temp2;
widest += BUTTONSPACE;
/* Maximalgrößen */
app->appwin[WINDOW_SAVING].maxsize[WIDTH] = XOFFSET + widest + INTERWIDTH;
app->appwin[WINDOW_SAVING].maxsize[HEIGHT] = YOFFSET + 2 * BUTTONHEIGHT + 2 * INTERHEIGHT + 2;
/* Der Prozent-Button */
newgad.ng_LeftEdge = XOFFSET + temp1;
newgad.ng_TopEdge = YOFFSET;
newgad.ng_Width = widest - temp1;
newgad.ng_Height = BUTTONHEIGHT;
newgad.ng_GadgetText = "Transferred"; /* ls[MSG_SAVING_TRANSFERRED]; */
newgad.ng_GadgetID = GADGET_SAVING_TRANSFERRED;
app->appwin[WINDOW_SAVING].gadget[GADGET_SAVING_TRANSFERRED] = gad = CreateGadget(TEXT_KIND, gad, &newgad, GTTX_Border, TRUE, TAG_END);
/* Der Cancel-Button */
newgad.ng_LeftEdge -= temp1;
newgad.ng_TopEdge += BUTTONHEIGHT + INTERHEIGHT;
newgad.ng_Width = widest;
newgad.ng_GadgetText = ls[MSG_SAVING_CANCEL];
newgad.ng_GadgetID = GADGET_SAVING_CANCEL;
app->appwin[WINDOW_SAVING].gadget[GADGET_SAVING_CANCEL] = gad = CreateGadget(BUTTON_KIND, gad, &newgad, TAG_END);
success = TRUE;
}
break;
}
return (success);
}
BOOL MakeMenus(Application *app)
{
BOOL success = FALSE;
struct NewMenu *nmenu = NULL;
WORD dircount = app->arexxdir ? ListLengthA(app->arexxdir) : 0;
if (nmenu = GetVecA((59 + dircount) * sizeof(struct NewMenu), MEMF_PUBLIC | MEMF_CLEAR))
{
char *numbers[8] = {"0", "1", "2", "3", "4", "5", "6", "7"};
int i;
nmenu[0].nm_Type = NM_TITLE;
nmenu[0].nm_Label = ls[MSG_PROJECT_MENU];
nmenu[1].nm_Type = NM_ITEM;
nmenu[1].nm_Label = ls[MSG_PROJECT_ABOUT];
nmenu[1].nm_CommKey = "?";
nmenu[2].nm_Type = NM_ITEM;
nmenu[2].nm_Label = NM_BARLABEL;
nmenu[3].nm_Type = NM_ITEM;
nmenu[3].nm_Label = ls[MSG_PROJECT_HIDE];
nmenu[3].nm_CommKey = "H";
nmenu[4].nm_Type = NM_ITEM;
nmenu[4].nm_Label = ls[MSG_PROJECT_QUIT];
nmenu[4].nm_CommKey = "Q";
nmenu[5].nm_Type = NM_TITLE;
nmenu[5].nm_Label = ls[MSG_CD_MENU];
nmenu[6].nm_Type = NM_ITEM;
nmenu[6].nm_Label = ls[MSG_CD_SELECTTITLE];
nmenu[6].nm_CommKey = "T";
nmenu[7].nm_Type = NM_ITEM;
nmenu[7].nm_Label = ls[MSG_CD_EDITPROGRAM];
nmenu[7].nm_CommKey = "P";
nmenu[8].nm_Type = NM_ITEM;
nmenu[8].nm_Label = ls[MSG_CD_EDITTITLES];
nmenu[8].nm_CommKey = "E";
nmenu[9].nm_Type = NM_ITEM;
nmenu[9].nm_Label = NM_BARLABEL;
nmenu[10].nm_Type = NM_ITEM;
nmenu[10].nm_Label = ls[MSG_CD_SETVOLUME];
nmenu[10].nm_CommKey = "V";
nmenu[11].nm_Type = NM_ITEM;
nmenu[11].nm_Label = ls[MSG_CD_SETAB];
nmenu[11].nm_CommKey = "A";
nmenu[12].nm_Type = NM_ITEM;
nmenu[12].nm_Label = ls[MSG_CD_SAVEAUDIO];
nmenu[13].nm_Type = NM_ITEM;
nmenu[13].nm_Label = NM_BARLABEL;
nmenu[14].nm_Type = NM_ITEM;
nmenu[14].nm_Label = ls[MSG_MENU_INFO];
nmenu[15].nm_Type = NM_TITLE;
nmenu[15].nm_Label = ls[MSG_DRIVE_MENU];
nmenu[16].nm_Type = NM_ITEM;
nmenu[16].nm_Label = ls[MSG_DRIVE_LUN];
nmenu[17].nm_Type = NM_SUB;
nmenu[17].nm_Label = nmenu[16].nm_CommKey = numbers[0];
nmenu[17].nm_Flags = CHECKIT;
nmenu[17].nm_MutualExclude = 254;
nmenu[18].nm_Type = NM_SUB;
nmenu[18].nm_Label = nmenu[17].nm_CommKey = numbers[1];
nmenu[18].nm_Flags = CHECKIT;
nmenu[18].nm_MutualExclude = 253;
nmenu[19].nm_Type = NM_SUB;
nmenu[19].nm_Label = nmenu[18].nm_CommKey = numbers[2];
nmenu[19].nm_Flags = CHECKIT;
nmenu[19].nm_MutualExclude = 251;
nmenu[20].nm_Type = NM_SUB;
nmenu[20].nm_Label = nmenu[19].nm_CommKey = numbers[3];
nmenu[20].nm_Flags = CHECKIT;
nmenu[20].nm_MutualExclude = 247;
nmenu[21].nm_Type = NM_SUB;
nmenu[21].nm_Label = nmenu[20].nm_CommKey = numbers[4];
nmenu[21].nm_Flags = CHECKIT;
nmenu[21].nm_MutualExclude = 239;
nmenu[22].nm_Type = NM_SUB;
nmenu[22].nm_Label = nmenu[21].nm_CommKey = numbers[5];
nmenu[22].nm_Flags = CHECKIT;
nmenu[22].nm_MutualExclude = 223;
nmenu[23].nm_Type = NM_SUB;
nmenu[23].nm_Label = nmenu[22].nm_CommKey = numbers[6];
nmenu[23].nm_Flags = CHECKIT;
nmenu[23].nm_MutualExclude = 191;
nmenu[24].nm_Type = NM_SUB;
nmenu[24].nm_Label = nmenu[23].nm_CommKey = numbers[7];
nmenu[24].nm_Flags = CHECKIT;
nmenu[24].nm_MutualExclude = 127;
nmenu[25].nm_Type = NM_ITEM;
nmenu[25].nm_Label = ls[MSG_DRIVE_UNIT];
nmenu[26].nm_Type = NM_SUB;
nmenu[26].nm_Label = numbers[0];
nmenu[26].nm_Flags = CHECKIT;
nmenu[26].nm_MutualExclude = 254;
nmenu[27].nm_Type = NM_SUB;
nmenu[27].nm_Label = numbers[1];
nmenu[27].nm_Flags = CHECKIT;
nmenu[27].nm_MutualExclude = 253;
nmenu[28].nm_Type = NM_SUB;
nmenu[28].nm_Label = numbers[2];
nmenu[28].nm_Flags = CHECKIT;
nmenu[28].nm_MutualExclude = 251;
nmenu[29].nm_Type = NM_SUB;
nmenu[29].nm_Label = numbers[3];
nmenu[29].nm_Flags = CHECKIT;
nmenu[29].nm_MutualExclude = 247;
nmenu[30].nm_Type = NM_SUB;
nmenu[30].nm_Label = numbers[4];
nmenu[30].nm_Flags = CHECKIT;
nmenu[30].nm_MutualExclude = 239;
nmenu[31].nm_Type = NM_SUB;
nmenu[31].nm_Label = numbers[5];
nmenu[31].nm_Flags = CHECKIT;
nmenu[31].nm_MutualExclude = 223;
nmenu[32].nm_Type = NM_SUB;
nmenu[32].nm_Label = numbers[6];
nmenu[32].nm_Flags = CHECKIT;
nmenu[32].nm_MutualExclude = 191;
nmenu[33].nm_Type = NM_SUB;
nmenu[33].nm_Label = numbers[7];
nmenu[33].nm_Flags = CHECKIT;
nmenu[33].nm_MutualExclude = 127;
nmenu[34].nm_Type = NM_ITEM;
nmenu[34].nm_Label = ls[MSG_DRIVE_DRIVELOCK];
nmenu[34].nm_CommKey = "L";
nmenu[34].nm_Flags = CHECKIT | MENUTOGGLE | (app->cdstr->cdx->cdx_Flags & SPECIALF_LOCKED ? CHECKED : 0);
nmenu[35].nm_Type = NM_ITEM;
nmenu[35].nm_Label = NM_BARLABEL;
nmenu[36].nm_Type = NM_ITEM;
nmenu[36].nm_Label = ls[MSG_DRIVE_OPEN];
nmenu[36].nm_CommKey = "<";
nmenu[37].nm_Type = NM_ITEM;
nmenu[37].nm_Label = ls[MSG_DRIVE_CLOSE];
nmenu[37].nm_CommKey = ">";
nmenu[38].nm_Type = NM_ITEM;
nmenu[38].nm_Label = ls[MSG_DRIVE_STOP];
nmenu[38].nm_CommKey = "!";
nmenu[39].nm_Type = NM_ITEM;
nmenu[39].nm_Label = NM_BARLABEL;
nmenu[40].nm_Type = NM_ITEM;
nmenu[40].nm_Label = ls[MSG_MENU_INFO];
nmenu[41].nm_Type = NM_TITLE;
nmenu[41].nm_Label = ls[MSG_FRONTEND_MENU];
nmenu[42].nm_Type = NM_ITEM;
nmenu[42].nm_Label = ls[MSG_FRONTEND_MWB];
nmenu[42].nm_CommKey = "M";
nmenu[42].nm_Flags = CHECKIT | MENUTOGGLE | (app->magicwbmode ? CHECKED : 0);
nmenu[43].nm_Type = NM_ITEM;
nmenu[43].nm_Label = ls[MSG_FRONTEND_GUIELEMENTS];
nmenu[44].nm_Type = NM_SUB;
nmenu[44].nm_Label = ls[MSG_FRONTEND_GUIELEMENTS_DIRECTCHOICE1];
nmenu[44].nm_Flags = CHECKIT | MENUTOGGLE | (app->flag_main & FLAG_MAIN_DIRECTCHOICE0 ? CHECKED : 0);
nmenu[45].nm_Type = NM_SUB;
nmenu[45].nm_Label = ls[MSG_FRONTEND_GUIELEMENTS_DIRECTCHOICE2];
nmenu[45].nm_Flags = CHECKIT | MENUTOGGLE | (app->flag_main & FLAG_MAIN_DIRECTCHOICE1 ? CHECKED : 0);
nmenu[46].nm_Type = NM_SUB;
nmenu[46].nm_Label = ls[MSG_FRONTEND_GUIELEMENTS_TITLE];
nmenu[46].nm_Flags = CHECKIT | MENUTOGGLE | (app->flag_main & FLAG_MAIN_TITLE ? CHECKED : 0);
nmenu[47].nm_Type = NM_SUB;
nmenu[47].nm_Label = ls[MSG_FRONTEND_GUIELEMENTS_TIT];
nmenu[47].nm_Flags = CHECKIT | MENUTOGGLE | (app->flag_main & FLAG_MAIN_TIME ? CHECKED : 0);
nmenu[48].nm_Type = NM_SUB;
nmenu[48].nm_Label = ls[MSG_FRONTEND_GUIELEMENTS_PMR];
nmenu[48].nm_Flags = CHECKIT | MENUTOGGLE | (app->flag_main & FLAG_MAIN_MODE ? CHECKED : 0);
nmenu[49].nm_Type = NM_SUB;
nmenu[49].nm_Label = ls[MSG_FRONTEND_GUIELEMENTS_PANEL];
nmenu[49].nm_Flags = CHECKIT | MENUTOGGLE | (app->flag_main & FLAG_MAIN_PANEL ? CHECKED : 0);
nmenu[50].nm_Type = NM_SUB;
nmenu[50].nm_Label = ls[MSG_FRONTEND_GUIELEMENTS_SLIDER];
nmenu[50].nm_Flags = CHECKIT | MENUTOGGLE | (app->flag_main & FLAG_MAIN_TRACKSLIDER ? CHECKED : 0);
nmenu[51].nm_Type = NM_ITEM;
nmenu[51].nm_Label = NM_BARLABEL;
nmenu[52].nm_Type = NM_ITEM;
nmenu[52].nm_Label = ls[MSG_FRONTEND_PUBSCREEN];
nmenu[52].nm_CommKey = "S";
nmenu[53].nm_Type = NM_ITEM;
nmenu[53].nm_Label = NM_BARLABEL;
nmenu[54].nm_Type = NM_ITEM;
nmenu[54].nm_Label = ls[MSG_FRONTEND_SNAPSHOTWINDOWS];
nmenu[54].nm_CommKey = "W";
nmenu[55].nm_Type = NM_TITLE;
nmenu[55].nm_Label = ls[MSG_AREXX_MENU];
nmenu[56].nm_Type = NM_ITEM;
nmenu[56].nm_Label = ls[MSG_AREXX_EXECUTESCRIPT];
nmenu[56].nm_CommKey = "X";
nmenu[57].nm_Type = NM_ITEM;
nmenu[57].nm_Label = NM_BARLABEL;
nmenu[17 + app->cdstr->lun].nm_Flags |= CHECKED;
nmenu[26 + app->cdstr->unit].nm_Flags |= CHECKED;
/* Dafür der ganze Aufwand... */
for (i = 0; i < dircount; i++)
{
nmenu[58 + i].nm_Type = NM_ITEM;
nmenu[58 + i].nm_Label = ((struct DirNode *)FindNode(app->arexxdir, i))->dn_Name;
}
nmenu[58 + dircount].nm_Type = NM_END;
if (app->menustrip = CreateMenus(nmenu, GTMN_FullMenu, TRUE, TAG_END))
{
LayoutMenus(app->menustrip, app->visualinfo, GTMN_NewLookMenus, TRUE, TAG_END);
success = TRUE;
}
FreeVec(nmenu);
}
return (success);
}
void RemoveMenus(Application *app)
{
WORD win;
for (win = ANZ_WINDOWS - 1; win >= 0; win--)
if (app->appwin[win].window) ClearMenuStrip(app->appwin[win].window);
}
void AttachMenus(Application *app)
{
WORD win;
for (win = ANZ_WINDOWS - 1; win >= 0; win--)
if (app->appwin[win].window) ResetMenuStrip(app->appwin[win].window, app->menustrip);
}