1 |
/* |
2 |
* dlgOptions.cpp - SDL GUI dialog for C64 emulator options |
3 |
* |
4 |
* (C) 2006 Bernd Lachner |
5 |
* |
6 |
* This program is free software; you can redistribute it and/or modify |
7 |
* it under the terms of the GNU General Public License as published by |
8 |
* the Free Software Foundation; either version 2 of the License, or |
9 |
* (at your option) any later version. |
10 |
* |
11 |
* This program is distributed in the hope that it will be useful, |
12 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
13 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
14 |
* GNU General Public License for more details. |
15 |
* |
16 |
* You should have received a copy of the GNU General Public License |
17 |
* along with this program; if not, write to the Free Software |
18 |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
19 |
*/ |
20 |
|
21 |
#include "sysdeps.h" |
22 |
#include "sdlgui.h" |
23 |
|
24 |
#include "Prefs.h" |
25 |
|
26 |
enum OPTIONSDDLG { |
27 |
box_main, |
28 |
box_speedcontrol, |
29 |
text_speedcontrol, |
30 |
text_draweverynthframe, |
31 |
DRAW_EVERYNTH_FRAME, |
32 |
DRAW_EVERYNTH_FRAME_UP, |
33 |
DRAW_EVERYNTH_FRAME_DOWN, |
34 |
LIMIT_SPEED_TO100PERCENT, |
35 |
FAST_RESET, |
36 |
box_memoryexpansion, |
37 |
text_memoryexpansion, |
38 |
text_reu_size, |
39 |
RADIO_REU_NONE, |
40 |
RADIO_REU_128K, |
41 |
RADIO_REU_256K, |
42 |
RADIO_REU_512K, |
43 |
OK, |
44 |
CANCEL |
45 |
}; |
46 |
|
47 |
/* The keyboard dialog: */ |
48 |
/* Spalte, Zeile, Länge, Höhe*/ |
49 |
static SGOBJ optionsdlg[] = |
50 |
{ |
51 |
{ SGBOX, SG_BACKGROUND, 0, 0,0, 35,20, NULL }, |
52 |
{ SGBOX, 0, 0, 1,2, 33,9, NULL }, |
53 |
{ SGTEXT, 0, 0, 2, 1, 15, 1, " Speed Control"}, |
54 |
|
55 |
{ SGTEXT, 0, 0, 2, 3, 16, 1, "Draw every n-th frame:"}, |
56 |
{ SGEDITFIELD, 0, 0, 26, 3, 3, 1, " "}, |
57 |
{SGBUTTON, SG_SELECTABLE | SG_TOUCHEXIT, 0, 30, 3, 1, 1, "\x01"}, |
58 |
/* Arrow up */ |
59 |
{SGBUTTON, SG_SELECTABLE | SG_TOUCHEXIT, 0, 32, 3, 1, 1, "\x02"}, |
60 |
/* Arrow down */ |
61 |
{ SGCHECKBOX, SG_SELECTABLE, 0, 2, 5, 30, 1, "Limit Speed to 100%"}, |
62 |
{ SGCHECKBOX, SG_SELECTABLE, 0, 2, 7, 30, 1, "Fast Reset"}, |
63 |
|
64 |
{ SGBOX, 0, 0, 1,13, 33,3, NULL }, |
65 |
{ SGTEXT, 0, 0, 2, 12, 18, 1, " Memory Expansion"}, |
66 |
{ SGTEXT, 0, 0, 2, 14, 30, 1, "REU Size:"}, |
67 |
{ SGCHECKBOX, SG_SELECTABLE|SG_RADIO, 0, 2, 15, 4, 1, "None" }, |
68 |
{ SGCHECKBOX, SG_SELECTABLE|SG_RADIO, 0, 10, 15, 20,1, "128K" }, |
69 |
{ SGCHECKBOX, SG_SELECTABLE|SG_RADIO, 0, 18, 15, 20,1, "256K" }, |
70 |
{ SGCHECKBOX, SG_SELECTABLE|SG_RADIO, 0, 26, 15, 20,1, "512K" }, |
71 |
|
72 |
{SGBUTTON, SG_SELECTABLE|SG_EXIT|SG_DEFAULT, 0, 1, 18, 6, 1, "OK"}, |
73 |
{SGBUTTON, SG_SELECTABLE|SG_EXIT, 0, 9, 18, 6, 1, "Cancel"}, |
74 |
|
75 |
{ -1, 0, 0, 0,0, 0,0, NULL } |
76 |
}; |
77 |
|
78 |
void Dialog_Options(Prefs &prefs) |
79 |
{ |
80 |
// Set values from prefs |
81 |
// TODO optionsdlg[DRAW_EVERYNTH_FRAME].txt = prefs.SkipFrames; |
82 |
optionsdlg[LIMIT_SPEED_TO100PERCENT].state |= prefs.LimitSpeed == true ? SG_SELECTED : 0; |
83 |
optionsdlg[FAST_RESET].state |= prefs.FastReset == true ? SG_SELECTED : 0; |
84 |
switch (prefs.REUSize) |
85 |
{ |
86 |
case REU_NONE: |
87 |
optionsdlg[RADIO_REU_NONE].state |= SG_SELECTED; |
88 |
break; |
89 |
case REU_128K: |
90 |
optionsdlg[RADIO_REU_128K].state |= SG_SELECTED; |
91 |
break; |
92 |
case REU_256K: |
93 |
optionsdlg[RADIO_REU_256K].state |= SG_SELECTED; |
94 |
break; |
95 |
case REU_512K: |
96 |
optionsdlg[RADIO_REU_512K].state |= SG_SELECTED; |
97 |
break; |
98 |
} |
99 |
switch (SDLGui_DoDialog(optionsdlg)) |
100 |
{ |
101 |
case OK: |
102 |
// Set values to prefs |
103 |
prefs.LimitSpeed = optionsdlg[LIMIT_SPEED_TO100PERCENT].state &= SG_SELECTED ? true : false; |
104 |
prefs.FastReset = optionsdlg[FAST_RESET].state &= SG_SELECTED ? true : false; |
105 |
for (int i = RADIO_REU_NONE; i <= RADIO_REU_512K; i++) |
106 |
{ |
107 |
if (optionsdlg[i].state &= SG_SELECTED) |
108 |
{ |
109 |
prefs.REUSize = i - RADIO_REU_NONE; |
110 |
break; |
111 |
} |
112 |
} |
113 |
break; |
114 |
} |
115 |
} |
116 |
|