|
|
1.1 root 1: /*
1.1.1.4 root 2: Hatari - dialog.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.
1.1 root 6:
1.1.1.9 root 7: This is normal 'C' code to handle our options dialog. We keep all our
8: configuration details in a structure called 'ConfigureParams'. When we
9: open our dialog we make a backup of this structure. When the user finally
10: clicks on 'OK', we can compare and makes the necessary changes.
1.1 root 11: */
1.1.1.10! root 12: const char Dialog_rcsid[] = "Hatari $Id: dialog.c,v 1.51 2006/07/03 20:36:28 clafou Exp $";
1.1.1.3 root 13:
1.1 root 14: #include "main.h"
15: #include "configuration.h"
16: #include "audio.h"
17: #include "dialog.h"
18: #include "floppy.h"
1.1.1.2 root 19: #include "gemdos.h"
20: #include "hdc.h"
1.1.1.8 root 21: #include "ioMem.h"
1.1 root 22: #include "joy.h"
23: #include "keymap.h"
24: #include "m68000.h"
25: #include "memorySnapShot.h"
26: #include "printer.h"
1.1.1.3 root 27: #include "reset.h"
1.1 root 28: #include "rs232.h"
29: #include "screen.h"
1.1.1.3 root 30: #include "screenSnapShot.h"
1.1 root 31: #include "sound.h"
32: #include "tos.h"
33: #include "vdi.h"
34: #include "video.h"
1.1.1.2 root 35: #include "sdlgui.h"
1.1.1.3 root 36: #include "uae-cpu/hatari-glue.h"
37:
1.1 root 38:
1.1.1.5 root 39: CNF_PARAMS DialogParams; /* List of configuration for dialogs (so the user can also choose 'Cancel') */
1.1.1.2 root 40:
41:
42: /*-----------------------------------------------------------------------*/
1.1 root 43: /*
1.1.1.9 root 44: Check if need to warn user that changes will take place after reset.
45: Return TRUE if wants to reset.
1.1 root 46: */
1.1.1.10! root 47: BOOL Dialog_DoNeedReset(void)
1.1 root 48: {
1.1.1.9 root 49: /* Did we change colour/mono monitor? If so, must reset */
50: if (ConfigureParams.Screen.bUseHighRes!=DialogParams.Screen.bUseHighRes)
51: return TRUE;
52:
53: /* Did change to GEM VDI display? */
54: if (ConfigureParams.Screen.bUseExtVdiResolutions != DialogParams.Screen.bUseExtVdiResolutions)
55: return TRUE;
56:
57: /* Did change GEM resolution or colour depth? */
58: if (DialogParams.Screen.bUseExtVdiResolutions &&
59: (ConfigureParams.Screen.nVdiResolution != DialogParams.Screen.nVdiResolution
60: || ConfigureParams.Screen.nVdiColors != DialogParams.Screen.nVdiColors))
61: return TRUE;
62:
63: /* Did change TOS ROM image? */
64: if (strcmp(DialogParams.Rom.szTosImageFileName, ConfigureParams.Rom.szTosImageFileName))
65: return TRUE;
66:
67: /* Did change HD image? */
68: if (DialogParams.HardDisk.bUseHardDiskImage != ConfigureParams.HardDisk.bUseHardDiskImage
69: || (strcmp(DialogParams.HardDisk.szHardDiskImage, ConfigureParams.HardDisk.szHardDiskImage)
70: && DialogParams.HardDisk.bUseHardDiskImage))
71: return TRUE;
72:
73: /* Did change GEMDOS drive? */
74: if (DialogParams.HardDisk.bUseHardDiskDirectories != ConfigureParams.HardDisk.bUseHardDiskDirectories
75: || (strcmp(DialogParams.HardDisk.szHardDiskDirectories[0], ConfigureParams.HardDisk.szHardDiskDirectories[0])
76: && DialogParams.HardDisk.bUseHardDiskDirectories))
77: return TRUE;
1.1 root 78:
1.1.1.9 root 79: return FALSE;
1.1 root 80: }
81:
1.1.1.2 root 82:
83: /*-----------------------------------------------------------------------*/
1.1 root 84: /*
1.1.1.9 root 85: Copy details back to configuration and perform reset.
1.1 root 86: */
1.1.1.10! root 87: void Dialog_CopyDialogParamsToConfiguration(BOOL bForceReset)
1.1 root 88: {
1.1.1.9 root 89: BOOL NeedReset;
90: BOOL bReInitGemdosDrive = FALSE, bReInitAcsiEmu = FALSE;
91: BOOL bReInitIoMem = FALSE;
92:
93: /* Do we need to warn user of that changes will only take effect after reset? */
94: if (bForceReset)
95: NeedReset = bForceReset;
96: else
97: NeedReset = Dialog_DoNeedReset();
98:
99: /* Do need to change resolution? Need if change display/overscan settings */
100: /*(if switch between Colour/Mono cause reset later) */
101: if (DialogParams.Screen.ChosenDisplayMode != ConfigureParams.Screen.ChosenDisplayMode
102: || DialogParams.Screen.bAllowOverscan != ConfigureParams.Screen.bAllowOverscan)
103: {
104: ConfigureParams.Screen.ChosenDisplayMode = DialogParams.Screen.ChosenDisplayMode;
105: ConfigureParams.Screen.bAllowOverscan = DialogParams.Screen.bAllowOverscan;
106: PrevSTRes = -1;
107: Screen_DidResolutionChange();
108: }
109:
110: /* Did set new printer parameters? */
111: if (DialogParams.Printer.bEnablePrinting != ConfigureParams.Printer.bEnablePrinting
112: || DialogParams.Printer.bPrintToFile != ConfigureParams.Printer.bPrintToFile
113: || strcmp(DialogParams.Printer.szPrintToFileName,ConfigureParams.Printer.szPrintToFileName))
114: {
115: Printer_CloseAllConnections();
116: }
117:
118: /* Did set new RS232 parameters? */
119: if (DialogParams.RS232.bEnableRS232 != ConfigureParams.RS232.bEnableRS232
120: || strcmp(DialogParams.RS232.szOutFileName, ConfigureParams.RS232.szOutFileName)
121: || strcmp(DialogParams.RS232.szInFileName, ConfigureParams.RS232.szInFileName))
122: {
123: RS232_UnInit();
124: }
125:
126: /* Did stop sound? Or change playback Hz. If so, also stop sound recording */
127: if (!DialogParams.Sound.bEnableSound || DialogParams.Sound.nPlaybackQuality != ConfigureParams.Sound.nPlaybackQuality)
128: {
129: if (Sound_AreWeRecording())
130: Sound_EndRecording();
131: Audio_UnInit();
132: }
133:
134: /* Did change GEMDOS drive? */
135: if (DialogParams.HardDisk.bUseHardDiskDirectories != ConfigureParams.HardDisk.bUseHardDiskDirectories
136: || (strcmp(DialogParams.HardDisk.szHardDiskDirectories[0], ConfigureParams.HardDisk.szHardDiskDirectories[0])
137: && DialogParams.HardDisk.bUseHardDiskDirectories))
138: {
139: GemDOS_UnInitDrives();
140: bReInitGemdosDrive = TRUE;
141: }
142:
143: /* Did change HD image? */
144: if (DialogParams.HardDisk.bUseHardDiskImage != ConfigureParams.HardDisk.bUseHardDiskImage
145: || (strcmp(DialogParams.HardDisk.szHardDiskImage, ConfigureParams.HardDisk.szHardDiskImage)
146: && DialogParams.HardDisk.bUseHardDiskImage))
147: {
148: HDC_UnInit();
149: bReInitAcsiEmu = TRUE;
150: }
151:
152: /* Did change blitter, rtc or system type? */
153: if (DialogParams.System.bBlitter != ConfigureParams.System.bBlitter
154: || DialogParams.System.bRealTimeClock != ConfigureParams.System.bRealTimeClock
155: || DialogParams.System.nMachineType != ConfigureParams.System.nMachineType)
156: {
157: IoMem_UnInit();
158: bReInitIoMem = TRUE;
159: }
160:
161: /* Copy details to configuration, so can be saved out or set on reset */
162: ConfigureParams = DialogParams;
163:
164: /* Copy details to global, if we reset copy them all */
165: Configuration_WorkOnDetails(NeedReset);
166:
167: /* Set keyboard remap file */
168: if (ConfigureParams.Keyboard.nKeymapType == KEYMAP_LOADED)
169: Keymap_LoadRemapFile(ConfigureParams.Keyboard.szMappingFileName);
170:
171: /* Did the user changed the CPU mode? */
172: check_prefs_changed_cpu(DialogParams.System.nCpuLevel, DialogParams.System.bCompatibleCpu);
173:
174: /* Mount a new HD image: */
175: if (bReInitAcsiEmu && ConfigureParams.HardDisk.bUseHardDiskImage)
176: {
177: HDC_Init(ConfigureParams.HardDisk.szHardDiskImage);
178: }
179:
180: /* Mount a new GEMDOS drive? */
181: if (bReInitGemdosDrive && ConfigureParams.HardDisk.bUseHardDiskDirectories)
182: {
183: GemDOS_InitDrives();
184: }
185:
186: /* Restart audio sub system if necessary: */
187: if (ConfigureParams.Sound.bEnableSound && !bSoundWorking)
188: {
189: Audio_Init();
190: }
191:
192: /* Re-initialize the RS232 emulation: */
193: if (ConfigureParams.RS232.bEnableRS232 && !bConnectedRS232)
194: {
195: RS232_Init();
196: }
197:
198: /* Re-init IO memory map? */
199: if (bReInitIoMem)
200: {
201: IoMem_Init();
202: }
203:
204: /* Do we need to perform reset? */
205: if (NeedReset)
206: {
207: Reset_Cold();
208: }
209:
210: /* Go into/return from full screen if flagged */
211: if (!bInFullScreen && DialogParams.Screen.bFullScreen)
212: Screen_EnterFullScreen();
213: else if (bInFullScreen && !DialogParams.Screen.bFullScreen)
214: Screen_ReturnFromFullScreen();
1.1 root 215: }
216:
217:
1.1.1.2 root 218: /*-----------------------------------------------------------------------*/
1.1 root 219: /*
1.1.1.9 root 220: Open Property sheet Options dialog.
1.1.1.2 root 221: Return TRUE if user choses OK, or FALSE if cancel!
1.1 root 222: */
1.1.1.2 root 223: BOOL Dialog_DoProperty(void)
1.1 root 224: {
1.1.1.9 root 225: BOOL bOKDialog; /* Did user 'OK' dialog? */
226: BOOL bForceReset;
1.1 root 227:
1.1.1.9 root 228: Main_PauseEmulation();
1.1 root 229:
1.1.1.9 root 230: /* Copy details to DialogParams (this is so can restore if 'Cancel' dialog) */
231: ConfigureParams.Screen.bFullScreen = bInFullScreen;
232: DialogParams = ConfigureParams;
1.1 root 233:
1.1.1.9 root 234: bForceReset = FALSE;
1.1 root 235:
1.1.1.9 root 236: bOKDialog = Dialog_MainDlg(&bForceReset);
1.1 root 237:
1.1.1.9 root 238: /* Copy details to configuration, and ask user if wishes to reset */
239: if (bOKDialog)
240: Dialog_CopyDialogParamsToConfiguration(bForceReset);
1.1.1.2 root 241:
1.1.1.9 root 242: Main_UnPauseEmulation();
1.1.1.2 root 243:
1.1.1.9 root 244: if (bQuitProgram)
245: set_special(SPCFLAG_BRK); /* Assure that CPU core shuts down */
1.1.1.6 root 246:
1.1.1.9 root 247: return bOKDialog;
1.1 root 248: }
1.1.1.10! root 249:
! 250:
! 251: /*-----------------------------------------------------------------------*/
! 252: /*
! 253: Loads params from the configuration file into DialogParams
! 254: */
! 255: void Dialog_LoadParams(void)
! 256: {
! 257: CNF_PARAMS tmpParams;
! 258: /* Configuration_Load uses the variables from ConfigureParams.
! 259: * That's why we have to temporarily back it up here */
! 260: tmpParams = ConfigureParams;
! 261: Configuration_Load(NULL);
! 262: DialogParams = ConfigureParams;
! 263: ConfigureParams = tmpParams;
! 264: }
! 265:
! 266:
! 267: /*-----------------------------------------------------------------------*/
! 268: /*
! 269: Saves params in DialogParams to the configuration file
! 270: */
! 271: void Dialog_SaveParams(void)
! 272: {
! 273: CNF_PARAMS tmpParams;
! 274: /* Configuration_Save uses the variables from ConfigureParams.
! 275: * That's why we have to temporarily back it up here */
! 276: tmpParams = ConfigureParams;
! 277: ConfigureParams = DialogParams;
! 278: Configuration_Save();
! 279: ConfigureParams = tmpParams;
! 280: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.