|
|
1.1 root 1: /*
2: Hatari - dlgKeyboard.c
3:
4: This file is distributed under the GNU Public License, version 2 or at
5: your option any later version. Read the file gpl.txt for details.
6: */
7: char DlgKeyboard_rcsid[] = "Hatari $Id: dlgKeyboard.c,v 1.4 2004/06/11 12:48:49 thothy Exp $";
8:
9: #include <unistd.h>
10:
11: #include "main.h"
12: #include "memAlloc.h"
13: #include "configuration.h"
14: #include "dialog.h"
15: #include "sdlgui.h"
16: #include "file.h"
17: #include "screen.h"
18:
19:
20: #define DLGKEY_SYMBOLIC 3
21: #define DLGKEY_SCANCODE 4
22: #define DLGKEY_FROMFILE 5
23: #define DLGKEY_MAPNAME 7
24: #define DLGKEY_MAPBROWSE 8
25: #define DLGKEY_EXIT 9
26:
27:
28: /* The keyboard dialog: */
29: static SGOBJ keyboarddlg[] =
30: {
31: { SGBOX, 0, 0, 0,0, 40,12, NULL },
32: { SGTEXT, 0, 0, 13,1, 14,1, "Keyboard setup" },
33: { SGTEXT, 0, 0, 2,3, 17,1, "Keyboard mapping:" },
34: { SGRADIOBUT, 0, 0, 3,5, 10,1, "Symbolic" },
35: { SGRADIOBUT, 0, 0, 15,5, 10,1, "Scancode" },
36: { SGRADIOBUT, 0, 0, 27,5, 11,1, "From file" },
37: { SGTEXT, 0, 0, 2,7, 13,1, "Mapping file:" },
38: { SGTEXT, 0, 0, 2,8, 36,1, NULL },
39: { SGBUTTON, 0, 0, 32,7, 6,1, "Browse" },
40: { SGBUTTON, 0, 0, 10,10, 20,1, "Back to main menu" },
41: { -1, 0, 0, 0,0, 0,0, NULL }
42: };
43:
44:
45: /*-----------------------------------------------------------------------*/
46: /*
47: Show and process the "Keyboard" dialog.
48: */
49: void Dialog_KeyboardDlg(void)
50: {
51: int i, but;
52: char dlgmapfile[40];
53: char *tmpname;
54:
55: tmpname = Memory_Alloc(FILENAME_MAX);
56:
57: SDLGui_CenterDlg(keyboarddlg);
58:
59: /* Set up dialog from actual values: */
60: for(i = DLGKEY_SYMBOLIC; i <= DLGKEY_FROMFILE; i++)
61: {
62: keyboarddlg[i].state &= ~SG_SELECTED;
63: }
64: keyboarddlg[DLGKEY_SYMBOLIC+DialogParams.Keyboard.nKeymapType].state |= SG_SELECTED;
65:
66: File_ShrinkName(dlgmapfile, DialogParams.Keyboard.szMappingFileName, keyboarddlg[DLGKEY_MAPNAME].w);
67: keyboarddlg[DLGKEY_MAPNAME].txt = dlgmapfile;
68:
69: /* Show the dialog: */
70: do
71: {
72: but = SDLGui_DoDialog(keyboarddlg);
73:
74: if(but == DLGKEY_MAPBROWSE)
75: {
76: strcpy(tmpname, DialogParams.Keyboard.szMappingFileName);
77: if(!tmpname[0])
78: {
79: getcwd(tmpname, FILENAME_MAX);
80: File_AddSlashToEndFileName(tmpname);
81: }
82: if( SDLGui_FileSelect(tmpname, NULL, FALSE) )
83: {
84: strcpy(DialogParams.Keyboard.szMappingFileName, tmpname);
85: if( !File_DoesFileNameEndWithSlash(tmpname) && File_Exists(tmpname) )
86: File_ShrinkName(dlgmapfile, tmpname, keyboarddlg[DLGKEY_MAPNAME].w);
87: else
88: dlgmapfile[0] = 0;
89: }
90: }
91:
92: }
93: while(but != DLGKEY_EXIT && !bQuitProgram);
94:
95: /* Read values from dialog: */
96: if(keyboarddlg[DLGKEY_SYMBOLIC].state & SG_SELECTED)
97: DialogParams.Keyboard.nKeymapType = KEYMAP_SYMBOLIC;
98: else if(keyboarddlg[DLGKEY_SCANCODE].state & SG_SELECTED)
99: DialogParams.Keyboard.nKeymapType = KEYMAP_SCANCODE;
100: else
101: DialogParams.Keyboard.nKeymapType = KEYMAP_LOADED;
102:
103: Memory_Free(tmpname);
104: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.