HatariWii/src/gui-sdl/dlgKeyboard.c
2018-05-25 20:45:09 +02:00

115 lines
3.4 KiB
C

/*
Hatari - dlgKeyboard.c
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.
*/
const char DlgKeyboard_fileid[] = "Hatari dlgKeyboard.c : " __DATE__ " " __TIME__;
#include <unistd.h>
#include "main.h"
#include "configuration.h"
#include "dialog.h"
#include "sdlgui.h"
#include "file.h"
#include "screen.h"
#define DLGKEY_SYMBOLIC 3
#define DLGKEY_SCANCODE 4
#define DLGKEY_FROMFILE 5
#define DLGKEY_MAPNAME 7
#define DLGKEY_MAPBROWSE 8
#define DLGKEY_DISREPEAT 9
#define DLGKEY_EXIT 10
#ifdef GEKKO
#define DLGKEY_BACK 11
#endif
/* The keyboard dialog: */
static SGOBJ keyboarddlg[] =
{
{ SGBOX, 0, 0, 0,0, 46,14, NULL },
{ SGTEXT, 0, 0, 16,1, 14,1, "Keyboard setup" },
{ SGTEXT, 0, 0, 2,3, 17,1, "Keyboard mapping:" },
{ SGRADIOBUT, 0, 0, 4,5, 10,1, "_Symbolic" },
{ SGRADIOBUT, 0, 0, 17,5, 10,1, "S_cancode" },
{ SGRADIOBUT, 0, 0, 30,5, 11,1, "_From file" },
{ SGTEXT, 0, 0, 2,7, 13,1, "Mapping file:" },
{ SGTEXT, 0, 0, 2,8, 42,1, NULL },
{ SGBUTTON, 0, 0, 36, 7, 8,1, "_Browse" },
{ SGCHECKBOX, 0, 0, 2,10, 41,1, "_Disable key repeat in fast forward mode" },
#ifdef GEKKO
{ SGBUTTON, SG_DEFAULT, 0, 13,12, 20,1, "Back to settings" },
{ SGTEXT, SG_CANCEL, 0, 800,23, 2,1, "B" }, // hidden, back with B button
#else
{ SGBUTTON, SG_DEFAULT, 0, 13,12, 20,1, "Back to main menu" },
#endif
{ -1, 0, 0, 0,0, 0,0, NULL }
};
/*-----------------------------------------------------------------------*/
/**
* Show and process the "Keyboard" dialog.
*/
void Dialog_KeyboardDlg(void)
{
int i, but;
char dlgmapfile[44];
SDLGui_CenterDlg(keyboarddlg);
#ifdef GEKKO
/* Clear the screen */
SDL_FillRect(sdlscrn, NULL, SDL_MapRGB(sdlscrn->format, 0, 0, 0));
#endif
/* Set up dialog from actual values: */
for (i = DLGKEY_SYMBOLIC; i <= DLGKEY_FROMFILE; i++)
{
keyboarddlg[i].state &= ~SG_SELECTED;
}
keyboarddlg[DLGKEY_SYMBOLIC+ConfigureParams.Keyboard.nKeymapType].state |= SG_SELECTED;
File_ShrinkName(dlgmapfile, ConfigureParams.Keyboard.szMappingFileName,
keyboarddlg[DLGKEY_MAPNAME].w);
keyboarddlg[DLGKEY_MAPNAME].txt = dlgmapfile;
if (ConfigureParams.Keyboard.bDisableKeyRepeat)
keyboarddlg[DLGKEY_DISREPEAT].state |= SG_SELECTED;
else
keyboarddlg[DLGKEY_DISREPEAT].state &= ~SG_SELECTED;
/* Show the dialog: */
do
{
but = SDLGui_DoDialog(keyboarddlg, NULL, false);
if (but == DLGKEY_MAPBROWSE)
{
SDLGui_FileConfSelect("Keyboard mapping file:", dlgmapfile,
ConfigureParams.Keyboard.szMappingFileName,
keyboarddlg[DLGKEY_MAPNAME].w, false);
}
}
#ifdef GEKKO
while (but != DLGKEY_EXIT && but != DLGKEY_BACK && but != SDLGUI_QUIT
&& but != SDLGUI_ERROR && !bQuitProgram);
/* Clear the screen */
SDL_FillRect(sdlscrn, NULL, SDL_MapRGB(sdlscrn->format, 0, 0, 0));
#else
while (but != DLGKEY_EXIT && but != SDLGUI_QUIT
&& but != SDLGUI_ERROR && !bQuitProgram);
#endif
/* Read values from dialog: */
if (keyboarddlg[DLGKEY_SYMBOLIC].state & SG_SELECTED)
ConfigureParams.Keyboard.nKeymapType = KEYMAP_SYMBOLIC;
else if (keyboarddlg[DLGKEY_SCANCODE].state & SG_SELECTED)
ConfigureParams.Keyboard.nKeymapType = KEYMAP_SCANCODE;
else
ConfigureParams.Keyboard.nKeymapType = KEYMAP_LOADED;
ConfigureParams.Keyboard.bDisableKeyRepeat = (keyboarddlg[DLGKEY_DISREPEAT].state & SG_SELECTED);
}