--- hatari/src/gui-sdl/dlgDevice.c 2019/04/01 07:15:00 1.1.1.5 +++ hatari/src/gui-sdl/dlgDevice.c 2019/04/09 08:58:22 1.1.1.12 @@ -1,13 +1,14 @@ /* Hatari - dlgDevice.c - This file is distributed under the GNU Public License, version 2 or at - your option any later version. Read the file gpl.txt for details. + This file is distributed under the GNU General Public License, version 2 + or at your option any later version. Read the file gpl.txt for details. Device (Printer etc.) setup dialog */ -const char DlgDevice_rcsid[] = "Hatari $Id: dlgDevice.c,v 1.1.1.5 2019/04/01 07:15:00 root Exp $"; +const char DlgDevice_fileid[] = "Hatari dlgDevice.c : " __DATE__ " " __TIME__; +#include #include "main.h" #include "configuration.h" #include "dialog.h" @@ -25,56 +26,105 @@ const char DlgDevice_rcsid[] = "Hatari $ #define DEVDLG_RS232INBROWSE 13 #define DEVDLG_RS232INNAME 14 #define DEVDLG_MIDIENABLE 16 -#define DEVDLG_MIDIBROWSE 18 -#define DEVDLG_MIDIOUTNAME 19 -#define DEVDLG_EXIT 20 +#ifndef HAVE_PORTMIDI +#define DEVDLG_MIDIINBROWSE 18 +#define DEVDLG_MIDIINNAME 19 +#define DEVDLG_MIDIOUTBROWSE 21 +#define DEVDLG_MIDIOUTNAME 22 +#define DEVDLG_EXIT 23 +#else +#define DEVDLG_PREVIN 18 +#define DEVDLG_NEXTIN 19 +#define DEVDLG_MIDIINNAME 21 +#define DEVDLG_PREVOUT 23 +#define DEVDLG_NEXTOUT 24 +#define DEVDLG_MIDIOUTNAME 26 +#define DEVDLG_EXIT 27 +#endif #define MAX_DLG_FILENAME 46+1 static char dlgPrinterName[MAX_DLG_FILENAME]; static char dlgRs232OutName[MAX_DLG_FILENAME]; static char dlgRs232InName[MAX_DLG_FILENAME]; +static char dlgMidiInName[MAX_DLG_FILENAME]; static char dlgMidiOutName[MAX_DLG_FILENAME]; /* The devices dialog: */ static SGOBJ devicedlg[] = { - { SGBOX, 0, 0, 0,0, 52,22, NULL }, + { SGBOX, 0, 0, 0,0, 52,24, NULL }, { SGTEXT, 0, 0, 20,1, 13,1, "Devices setup" }, { SGBOX, 0, 0, 1,3, 50,4, NULL }, - { SGCHECKBOX, 0, 0, 2,3, 28,1, "Enable printer emulation" }, + { SGCHECKBOX, 0, 0, 2,3, 26,1, "Enable _printer emulation" }, { SGTEXT, 0, 0, 2,5, 10,1, "Print to file:" }, - { SGBUTTON, 0, 0, 42,5, 8,1, "Browse" }, + { SGBUTTON, 0, 0, 42,5, 8,1, "_Browse" }, { SGTEXT, 0, 0, 3,6, 46,1, dlgPrinterName }, { SGBOX, 0, 0, 1,8, 50,6, NULL }, - { SGCHECKBOX, 0, 0, 2,8, 28,1, "Enable RS232 emulation" }, + { SGCHECKBOX, 0, 0, 2,8, 24,1, "Enable _RS232 emulation" }, { SGTEXT, 0, 0, 2,10, 10,1, "Write RS232 output to file:" }, - { SGBUTTON, 0, 0, 42,10, 8,1, "Browse" }, + { SGBUTTON, 0, 0, 42,10, 8,1, "Br_owse" }, { SGTEXT, 0, 0, 3,11, 46,1, dlgRs232OutName }, { SGTEXT, 0, 0, 2,12, 10,1, "Read RS232 input from file:" }, - { SGBUTTON, 0, 0, 42,12, 8,1, "Browse" }, + { SGBUTTON, 0, 0, 42,12, 8,1, "Bro_wse" }, { SGTEXT, 0, 0, 3,13, 46,1, dlgRs232InName }, - { SGBOX, 0, 0, 1,15, 50,4, NULL }, - { SGCHECKBOX, 0, 0, 2,15, 28,1, "Enable MIDI emulation" }, - { SGTEXT, 0, 0, 2,17, 10,1, "Write MIDI output to file:" }, - { SGBUTTON, 0, 0, 42,17, 8,1, "Browse" }, - { SGTEXT, 0, 0, 3,18, 46,1, dlgMidiOutName }, - - { SGBUTTON, SG_DEFAULT, 0, 16,20, 20,1, "Back to main menu" }, - { -1, 0, 0, 0,0, 0,0, NULL } + { SGBOX, 0, 0, 1,15, 50,6, NULL }, + { SGCHECKBOX, 0, 0, 2,15, 23,1, "Enable _MIDI emulation" }, +#ifndef HAVE_PORTMIDI + { SGTEXT, 0, 0, 2,17, 26,1, "Read MIDI input from file:" }, + { SGBUTTON, 0, 0, 42,17, 8,1, "Brow_se" }, + { SGTEXT, 0, 0, 3,18, 46,1, dlgMidiInName }, + { SGTEXT, 0, 0, 2,19, 26,1, "Write MIDI output to file:" }, + { SGBUTTON, 0, 0, 42,19, 8,1, "Brows_e" }, + { SGTEXT, 0, 0, 3,20, 46,1, dlgMidiOutName }, +#else + { SGTEXT, 0, 0, 5,17, 7,1, "input:" }, + { SGBUTTON, 0, 0, 12,17, 3,1, "\x04", SG_SHORTCUT_LEFT }, + { SGBUTTON, 0, 0, 15,17, 3,1, "\x03", SG_SHORTCUT_RIGHT }, + { SGBOX, 0, 0, 18,17, 32,1, NULL }, + { SGTEXT, 0, 0, 19,17, 30,1, dlgMidiInName }, + { SGTEXT, 0, 0, 4,19, 7,1, "output:" }, + { SGBUTTON, 0, 0, 12,19, 3,1, "\x04", SG_SHORTCUT_LEFT }, + { SGBUTTON, 0, 0, 15,19, 3,1, "\x03", SG_SHORTCUT_RIGHT }, + { SGBOX, 0, 0, 18,19, 32,1, NULL }, + { SGTEXT, 0, 0, 19,19, 30,1, dlgMidiOutName }, +#endif + { SGBUTTON, SG_DEFAULT, 0, 16,22, 20,1, "Back to main menu" }, + { SGSTOP, 0, 0, 0,0, 0,0, NULL } }; +#ifdef HAVE_PORTMIDI +#include "midi.h" +static int midiInput = -1; +static int midiOutput = -1; + +static void setupMidiControls(void) +{ + const char *inportName,*outportName; + midiInput = Midi_Host_GetPortIndex(ConfigureParams.Midi.sMidiInPortName, true); + midiOutput = Midi_Host_GetPortIndex(ConfigureParams.Midi.sMidiOutPortName, false); + inportName = (midiInput < 0) ? "Off" : ConfigureParams.Midi.sMidiInPortName; + outportName = (midiOutput < 0) ? "Off" : ConfigureParams.Midi.sMidiOutPortName; + File_ShrinkName(dlgMidiInName, inportName, devicedlg[DEVDLG_MIDIINNAME].w); + File_ShrinkName(dlgMidiOutName, outportName, devicedlg[DEVDLG_MIDIOUTNAME].w); +} +#endif + + /*-----------------------------------------------------------------------*/ -/* - Show and process the "Device" dialog. -*/ +/** + * Show and process the "Device" dialog. + */ void Dialog_DeviceDlg(void) { int but; +#ifdef HAVE_PORTMIDI + const char* portName; +#endif SDLGui_CenterDlg(devicedlg); @@ -97,39 +147,87 @@ void Dialog_DeviceDlg(void) devicedlg[DEVDLG_MIDIENABLE].state |= SG_SELECTED; else devicedlg[DEVDLG_MIDIENABLE].state &= ~SG_SELECTED; - File_ShrinkName(dlgMidiOutName, ConfigureParams.Midi.szMidiOutFileName, devicedlg[DEVDLG_MIDIOUTNAME].w); +#ifndef HAVE_PORTMIDI + File_ShrinkName(dlgMidiInName, ConfigureParams.Midi.sMidiInFileName, devicedlg[DEVDLG_MIDIINNAME].w); + File_ShrinkName(dlgMidiOutName, ConfigureParams.Midi.sMidiOutFileName, devicedlg[DEVDLG_MIDIOUTNAME].w); +#else + setupMidiControls(); +#endif /* The devices dialog main loop */ do { - but = SDLGui_DoDialog(devicedlg, NULL); + but = SDLGui_DoDialog(devicedlg, NULL, false); switch(but) { case DEVDLG_PRNBROWSE: /* Choose a new printer file */ - SDLGui_FileConfSelect(dlgPrinterName, + SDLGui_FileConfSelect("Printer output:", dlgPrinterName, ConfigureParams.Printer.szPrintToFileName, devicedlg[DEVDLG_PRNFILENAME].w, - TRUE); + true); break; case DEVDLG_RS232OUTBROWSE: /* Choose a new RS232 output file */ - SDLGui_FileConfSelect(dlgRs232OutName, + SDLGui_FileConfSelect("RS232 output:", dlgRs232OutName, ConfigureParams.RS232.szOutFileName, devicedlg[DEVDLG_RS232OUTNAME].w, - TRUE); + true); break; case DEVDLG_RS232INBROWSE: /* Choose a new RS232 input file */ - SDLGui_FileConfSelect(dlgRs232InName, + SDLGui_FileConfSelect("RS232 input:", dlgRs232InName, ConfigureParams.RS232.szInFileName, devicedlg[DEVDLG_RS232INNAME].w, - TRUE); + true); + break; +#ifndef HAVE_PORTMIDI + case DEVDLG_MIDIINBROWSE: /* Choose a new MIDI file */ + SDLGui_FileConfSelect("MIDI input:", dlgMidiInName, + ConfigureParams.Midi.sMidiInFileName, + devicedlg[DEVDLG_MIDIINNAME].w, + true); break; - case DEVDLG_MIDIBROWSE: /* Choose a new MIDI file */ - SDLGui_FileConfSelect(dlgMidiOutName, - ConfigureParams.Midi.szMidiOutFileName, + case DEVDLG_MIDIOUTBROWSE: /* Choose a new MIDI file */ + SDLGui_FileConfSelect("MIDI output:", dlgMidiOutName, + ConfigureParams.Midi.sMidiOutFileName, devicedlg[DEVDLG_MIDIOUTNAME].w, - TRUE); + true); + break; +#else + case DEVDLG_PREVIN: + if (midiInput >= 0) + { + midiInput--; + portName = (midiInput == -1) ? "Off" : Midi_Host_GetPortName(midiInput, true); + if (portName) + File_ShrinkName(dlgMidiInName, portName, devicedlg[DEVDLG_MIDIINNAME].w); + } + break; + case DEVDLG_NEXTIN: + portName = Midi_Host_GetPortName(midiInput + 1, true); + if (portName) + { + midiInput++; + File_ShrinkName(dlgMidiInName, portName, devicedlg[DEVDLG_MIDIINNAME].w); + } + break; + case DEVDLG_PREVOUT: + if (midiOutput >= 0) + { + midiOutput--; + portName = (midiOutput == -1) ? "Off" : Midi_Host_GetPortName(midiOutput, false); + if (portName) + File_ShrinkName(dlgMidiOutName, portName, devicedlg[DEVDLG_MIDIOUTNAME].w); + } + break; + case DEVDLG_NEXTOUT: + portName = Midi_Host_GetPortName(midiOutput + 1, false); + if (portName) + { + midiOutput++; + File_ShrinkName(dlgMidiOutName, portName, devicedlg[DEVDLG_MIDIOUTNAME].w); + } break; +#endif } } while (but != DEVDLG_EXIT && but != SDLGUI_QUIT @@ -139,4 +237,10 @@ void Dialog_DeviceDlg(void) ConfigureParams.Printer.bEnablePrinting = (devicedlg[DEVDLG_PRNENABLE].state & SG_SELECTED); ConfigureParams.RS232.bEnableRS232 = (devicedlg[DEVDLG_RS232ENABLE].state & SG_SELECTED); ConfigureParams.Midi.bEnableMidi = (devicedlg[DEVDLG_MIDIENABLE].state & SG_SELECTED); +#ifdef HAVE_PORTMIDI + assert(sizeof(dlgMidiInName) <= sizeof(ConfigureParams.Midi.sMidiInPortName)); + strcpy(ConfigureParams.Midi.sMidiInPortName, dlgMidiInName); + assert(sizeof(dlgMidiOutName) <= sizeof(ConfigureParams.Midi.sMidiOutPortName)); + strcpy(ConfigureParams.Midi.sMidiOutPortName, dlgMidiOutName); +#endif }