|
|
1.1 root 1: /*
2: Hatari - PrefsController.m
3:
1.1.1.10 root 4: This file is distributed under the GNU General Public License, version 2
5: or at your option any later version. Read the file gpl.txt for details.
1.1 root 6:
7: Preferences window controller implementation file
8:
9: Feb-Mar 2006, Sébastien Molines - Created
1.1.1.2 root 10: Jan 2006, Sébastien Molines - Updated for recent emulator updates
1.1.1.11! root 11: Miguel SARO, J. VERNET
1.1 root 12: */
1.1.1.11! root 13: // bOKDialog = Dialog_MainDlg(&bForceReset, &bLoadedSnapshot); // prise des préférences
1.1 root 14: // TODO: Set the default paths to MacOS-friendly values
15: // TODO: Move hardcoded string to localizable resources (e.g. string "Reset the emulator?")
16:
17:
18: #import "PrefsController.h"
19: #import "Shared.h"
20:
21: #include "main.h"
22: #include "configuration.h"
1.1.1.3 root 23: #include "change.h"
1.1 root 24: #include "dialog.h"
25: #include "file.h"
26: #include "floppy.h"
27: #include "screen.h"
28: #include "sdlgui.h"
1.1.1.11! root 29: #include "paths.h"
1.1 root 30:
1.1.1.10 root 31:
1.1 root 32: // Macros to transfer data between Cocoa controls and Hatari data structures
1.1.1.11! root 33:
! 34: // de l'affichage vers la structure (saveAllControls)
! 35: #define EXPORT_TEXTFIELD(mutablStrng, target) [mutablStrng getCString:target maxLength:sizeof((target))-1 encoding:NSASCIIStringEncoding]
1.1.1.6 root 36: #define EXPORT_NTEXTFIELD(nstextfield, target) target = [nstextfield intValue]
1.1 root 37: #define EXPORT_SWITCH(nsbutton, target) target = ([(nsbutton) state] == NSOnState)
38: #define EXPORT_RADIO(nsmatrix, target) target = [[(nsmatrix) selectedCell] tag]
39: #define EXPORT_DROPDOWN(nspopupbutton, target) target = [[(nspopupbutton) selectedItem] tag]
1.1.1.3 root 40: #define EXPORT_SLIDER(nsslider, target) target = [(nsslider) intValue]
41:
1.1.1.11! root 42: // la structure vers l'affichage (setAllControls)
! 43: #define IMPORT_TEXTFIELD(nstextfield, mutablStrng, source) [mutablStrng setString:[NSString stringWithCString:(source) encoding:NSASCIIStringEncoding]] ; [nstextfield setStringValue:[NSApp pathUser:mutablStrng]]
1.1.1.6 root 44: #define IMPORT_NTEXTFIELD(nstextfield, source) [(nstextfield) setIntValue:(source)]
1.1 root 45: #define IMPORT_SWITCH(nsbutton, source) [(nsbutton) setState:((source))? NSOnState : NSOffState]
46: #define IMPORT_RADIO(nsmatrix, source) [(nsmatrix) selectCellWithTag:(source)]
47: #define IMPORT_DROPDOWN(nspopupbutton, source) [(nspopupbutton) selectItemAtIndex:[(nspopupbutton) indexOfItemWithTag:(source)]]
1.1.1.3 root 48: #define IMPORT_SLIDER(nsslider,source) [(nsslider) setIntValue:source]
49:
1.1.1.11! root 50: #define INITIAL_DIR(dossier) [dossier length] < 2 ? @"~" : dossier
1.1.1.3 root 51:
52: // Back up of the current configuration parameters
1.1.1.11! root 53: //
1.1.1.3 root 54: CNF_PARAMS CurrentParams;
55:
1.1 root 56:
57: // Keys to be listed in the Joysticks dropdowns
58: SDLKey Preferences_KeysForJoysticks[] =
59: {
60: SDLK_BACKSPACE,
61: SDLK_TAB,
62: SDLK_CLEAR,
63: SDLK_RETURN,
64: SDLK_PAUSE,
65: SDLK_ESCAPE,
66: SDLK_SPACE,
67: SDLK_EXCLAIM,
68: SDLK_QUOTEDBL,
69: SDLK_HASH,
70: SDLK_DOLLAR,
71: SDLK_AMPERSAND,
72: SDLK_QUOTE,
73: SDLK_LEFTPAREN,
74: SDLK_RIGHTPAREN,
75: SDLK_ASTERISK,
76: SDLK_PLUS,
77: SDLK_COMMA,
78: SDLK_MINUS,
79: SDLK_PERIOD,
80: SDLK_SLASH,
81: SDLK_0,
82: SDLK_1,
83: SDLK_2,
84: SDLK_3,
85: SDLK_4,
86: SDLK_5,
87: SDLK_6,
88: SDLK_7,
89: SDLK_8,
90: SDLK_9,
91: SDLK_COLON,
92: SDLK_SEMICOLON,
93: SDLK_LESS,
94: SDLK_EQUALS,
95: SDLK_GREATER,
96: SDLK_QUESTION,
97: SDLK_AT,
98: SDLK_LEFTBRACKET,
99: SDLK_BACKSLASH,
100: SDLK_RIGHTBRACKET,
101: SDLK_CARET,
102: SDLK_UNDERSCORE,
103: SDLK_BACKQUOTE,
104: SDLK_a,
105: SDLK_b,
106: SDLK_c,
107: SDLK_d,
108: SDLK_e,
109: SDLK_f,
110: SDLK_g,
111: SDLK_h,
112: SDLK_i,
113: SDLK_j,
114: SDLK_k,
115: SDLK_l,
116: SDLK_m,
117: SDLK_n,
118: SDLK_o,
119: SDLK_p,
120: SDLK_q,
121: SDLK_r,
122: SDLK_s,
123: SDLK_t,
124: SDLK_u,
125: SDLK_v,
126: SDLK_w,
127: SDLK_x,
128: SDLK_y,
129: SDLK_z,
130: SDLK_DELETE,
131: SDLK_KP0,
132: SDLK_KP1,
133: SDLK_KP2,
134: SDLK_KP3,
135: SDLK_KP4,
136: SDLK_KP5,
137: SDLK_KP6,
138: SDLK_KP7,
139: SDLK_KP8,
140: SDLK_KP9,
141: SDLK_KP_PERIOD,
142: SDLK_KP_DIVIDE,
143: SDLK_KP_MULTIPLY,
144: SDLK_KP_MINUS,
145: SDLK_KP_PLUS,
146: SDLK_KP_ENTER,
147: SDLK_KP_EQUALS,
148: SDLK_UP,
149: SDLK_DOWN,
150: SDLK_RIGHT,
151: SDLK_LEFT,
152: SDLK_INSERT,
153: SDLK_HOME,
154: SDLK_END,
155: SDLK_PAGEUP,
156: SDLK_PAGEDOWN,
157: SDLK_F1,
158: SDLK_F2,
159: SDLK_F3,
160: SDLK_F4,
161: SDLK_F5,
162: SDLK_F6,
163: SDLK_F7,
164: SDLK_F8,
165: SDLK_F9,
166: SDLK_F10,
167: SDLK_F11,
168: SDLK_F12,
169: SDLK_F13,
170: SDLK_F14,
171: SDLK_F15,
172: SDLK_NUMLOCK,
173: SDLK_CAPSLOCK,
174: SDLK_SCROLLOCK,
175: SDLK_RSHIFT,
176: SDLK_LSHIFT,
177: SDLK_RCTRL,
178: SDLK_LCTRL,
179: SDLK_RALT,
180: SDLK_LALT,
181: SDLK_RMETA,
182: SDLK_LMETA,
183: SDLK_LSUPER,
184: SDLK_RSUPER,
185: SDLK_MODE,
186: SDLK_COMPOSE,
187: SDLK_HELP,
188: SDLK_PRINT,
189: SDLK_SYSREQ,
190: SDLK_BREAK,
191: SDLK_MENU,
192: SDLK_POWER,
193: SDLK_EURO,
194: SDLK_UNDO
195: };
196:
197: size_t Preferences_cKeysForJoysticks = sizeof(Preferences_KeysForJoysticks) / sizeof(Preferences_KeysForJoysticks[0]);
198:
1.1.1.6 root 199: #define DLGSOUND_11KHZ 0
200: #define DLGSOUND_12KHZ 1
201: #define DLGSOUND_16KHZ 2
202: #define DLGSOUND_22KHZ 3
203: #define DLGSOUND_25KHZ 4
204: #define DLGSOUND_32KHZ 5
205: #define DLGSOUND_44KHZ 6
206: #define DLGSOUND_48KHZ 7
207: #define DLGSOUND_50KHZ 8
208:
209: static const int nSoundFreqs[] =
210: {
211: 11025,
212: 12517,
213: 16000,
214: 22050,
215: 25033,
216: 32000,
217: 44100,
218: 48000,
219: 50066
220: };
1.1 root 221:
1.1.1.11! root 222:
1.1 root 223: @implementation PrefsController
224:
1.1.1.11! root 225: char szPath[FILENAME_MAX];
! 226:
! 227:
! 228: - (IBAction)finished:(id)sender
! 229: {
! 230: Main_RequestQuit(0) ;
! 231: }
1.1 root 232:
233: /*-----------------------------------------------------------------------*/
1.1.1.11! root 234: /* */
! 235: /* Helper method for Choose buttons */
! 236: /* Returns: TRUE is the user selected a path, FALSE if he/she aborted */
! 237: /*-----------------------------------------------------------------------*/
! 238: - (BOOL)choosePathForControl:(NSTextField*)textField chooseDirectories:(BOOL)chooseDirectories defaultInitialDir:(NSString*)defaultInitialDir
! 239: mutString:(NSMutableString *)mutString what:(NSArray *)what
1.1 root 240: {
1.1.1.11! root 241: NSString *directoryToOpen ;
! 242: NSString *fileToPreselect ;
! 243: NSString *newPath ;
! 244:
! 245: if ((mutString != nil) && ([mutString length] > 2))
! 246: { directoryToOpen = [mutString stringByDeletingLastPathComponent]; // There is existing path: we use it.
! 247: fileToPreselect = [mutString lastPathComponent]; }
1.1 root 248: else
1.1.1.11! root 249: { directoryToOpen = [defaultInitialDir stringByExpandingTildeInPath]; // no path: use user's directory
! 250: fileToPreselect = nil; } ;
! 251:
! 252: newPath = [NSApp hopenfile:chooseDirectories defoDir:directoryToOpen defoFile:fileToPreselect types:what];
! 253: if ([newPath length] != 0) // user canceled if empty
1.1 root 254: {
1.1.1.11! root 255: [mutString setString:[NSString stringWithString:newPath]] ; // save this path
! 256: [textField setStringValue:[NSApp pathUser:newPath]]; // show localized path
! 257: return YES;
! 258: } ;
! 259:
! 260: return NO; // Selection aborted
1.1 root 261: }
262:
263:
1.1.1.11! root 264: //-----------------------------------------------------------------------*/
! 265: //
! 266: // Helper method to insert a floppy image
! 267: // TODO: Add code to restrict to known file types
! 268: //
1.1 root 269: /*-----------------------------------------------------------------------*/
1.1.1.11! root 270:
! 271: - (void)insertFloppyImageIntoDrive:(int)drive forTextField:(NSTextField*)floppyTextField realPath:(NSMutableString *)realPath
1.1 root 272: {
1.1.1.11! root 273: if ([self choosePathForControl:floppyTextField chooseDirectories:NO defaultInitialDir:imgeDir
! 274: mutString:realPath what:[NSArray arrayWithObjects:allF,nil]])
1.1 root 275:
1.1.1.11! root 276: Floppy_SetDiskFileName(drive, [realPath cStringUsingEncoding:NSASCIIStringEncoding], NULL);
! 277: // Insert the floppy image at this path ????
1.1 root 278: }
279:
280:
1.1.1.11! root 281: //-----------------------------------------------------------------------------
! 282: - (NSString *)initial:(NSString *)route
! 283: {
! 284: BOOL flag1, flag2;
! 285:
! 286: if ((route==nil) || ([route length]==0)) return @"~" ;
! 287: flag1 = [[NSFileManager defaultManager] fileExistsAtPath:route isDirectory:&flag2] ;
! 288: if (flag1 && !flag2)
! 289: return route ;
! 290: return [route stringByDeletingLastPathComponent] ;
! 291: }
! 292:
! 293: //
! 294: // Methods for all the "Choose" buttons
! 295: //
1.1 root 296: - (IBAction)chooseCartridgeImage:(id)sender;
297: {
1.1.1.11! root 298: [self choosePathForControl: cartridgeImage chooseDirectories:NO defaultInitialDir:[self initial:cartridge] // cartridge
! 299: mutString:cartridge what:[NSArray arrayWithObjects:allC,nil]];
1.1 root 300: }
301:
1.1.1.11! root 302:
1.1 root 303: - (IBAction)chooseDefaultImagesLocation:(id)sender
304: {
1.1.1.11! root 305: [self choosePathForControl: defaultImagesLocation chooseDirectories:YES defaultInitialDir:[self initial:imgeDir] // images location
! 306: mutString:imgeDir what:nil];
1.1 root 307: }
308:
309: - (IBAction)chooseFloppyImageA:(id)sender
310: {
1.1.1.11! root 311: [self insertFloppyImageIntoDrive:0 forTextField:floppyImageA realPath:floppyA]; // floppy A
1.1 root 312: }
313:
314: - (IBAction)chooseFloppyImageB:(id)sender
315: {
1.1.1.11! root 316: [self insertFloppyImageIntoDrive:1 forTextField:floppyImageB realPath:floppyB]; // floppy B
1.1 root 317: }
318:
1.1.1.11! root 319: - (IBAction)chooseGemdosImage:(id)sender // directory for Gemdos
1.1 root 320: {
1.1.1.11! root 321: [self choosePathForControl: gemdosImage chooseDirectories:YES defaultInitialDir:INITIAL_DIR(gemdos) // gemdos
! 322: mutString:gemdos what:nil] ;
! 323: if ([gemdos length] >2 ) [gemdosImage setStringValue:[NSApp pathUser:gemdos]] ;
1.1 root 324: }
325:
326: - (IBAction)chooseHdImage:(id)sender
327: {
1.1.1.11! root 328: [self choosePathForControl: hdImage chooseDirectories:NO defaultInitialDir:[self initial:hrdDisk] // HD image ?
! 329: mutString:hrdDisk what:[NSArray arrayWithObjects:@"img",@"hdv",nil]] ;
1.1 root 330: }
331:
1.1.1.6 root 332: - (IBAction)chooseIdeMasterHdImage:(id)sender
333: {
1.1.1.11! root 334: [self choosePathForControl: ideMasterHdImage chooseDirectories:NO defaultInitialDir:[self initial:masterIDE] // IDE master
! 335: mutString:masterIDE what:[NSArray arrayWithObject:@"hdv"]];
1.1.1.6 root 336: }
337:
338: - (IBAction)chooseIdeSlaveHdImage:(id)sender
1.1.1.5 root 339: {
1.1.1.11! root 340: [self choosePathForControl: ideSlaveHdImage chooseDirectories:NO defaultInitialDir:[self initial:slaveIDE] // IDE slave
! 341: mutString:slaveIDE what:[NSArray arrayWithObject:@"hdv"]];
1.1.1.5 root 342: }
343:
1.1 root 344: - (IBAction)chooseKeyboardMappingFile:(id)sender
345: {
1.1.1.11! root 346: [self choosePathForControl: keyboardMappingFile chooseDirectories:NO defaultInitialDir:[self initial:keyboard] // keyboard mapping
! 347: mutString:keyboard what:[NSArray arrayWithObjects:@"txt",@"map",nil]];
1.1 root 348: }
349:
350: - (IBAction)chooseMidiOutputFile:(id)sender
351: {
1.1.1.11! root 352: [self choosePathForControl: writeMidiToFile chooseDirectories:NO defaultInitialDir:[self initial:midiOut] // midi output
! 353: mutString:midiOut what:[NSArray arrayWithObject:@"mid"]];
1.1 root 354: }
355:
356: - (IBAction)choosePrintToFile:(id)sender
357: {
1.1.1.11! root 358: [self choosePathForControl: printToFile chooseDirectories:NO defaultInitialDir:[self initial:printit] // print to file
! 359: mutString:printit what:[NSArray arrayWithObject:@"prn"]];
1.1 root 360: }
361:
362: - (IBAction)chooseRS232InputFile:(id)sender
363: {
1.1.1.11! root 364: [self choosePathForControl: readRS232FromFile chooseDirectories:NO defaultInitialDir:[self initial:rs232In] // RS232 input
! 365: mutString:rs232In what:nil];
1.1 root 366: }
367:
368: - (IBAction)chooseRS232OutputFile:(id)sender
369: {
1.1.1.11! root 370: [self choosePathForControl: writeRS232ToFile chooseDirectories:NO defaultInitialDir:[self initial:rs232Out] // RS232 output
! 371: mutString:rs232Out what:nil];
1.1 root 372: }
373:
374: - (IBAction)chooseTosImage:(id)sender;
375: {
1.1.1.11! root 376: [self choosePathForControl: tosImage chooseDirectories:NO defaultInitialDir:[self initial:TOS] // TOS image
! 377: mutString:TOS what:[NSArray arrayWithObjects:allT,nil]];
1.1 root 378: }
379:
380:
381: /*-----------------------------------------------------------------------*/
1.1.1.11! root 382: /* */
! 383: /* Methods for the "Eject" buttons */
! 384: /*-----------------------------------------------------------------------*/
1.1 root 385: - (IBAction)ejectFloppyA:(id)sender
386: {
1.1.1.3 root 387: Floppy_SetDiskFileNameNone(0);
1.1 root 388:
1.1.1.11! root 389: // Refresh control & mutablestring
1.1 root 390: [floppyImageA setStringValue:@""];
1.1.1.11! root 391: [floppyA setString:@""] ;
1.1 root 392: }
393:
394: - (IBAction)ejectFloppyB:(id)sender
395: {
1.1.1.3 root 396: Floppy_SetDiskFileNameNone(1);
1.1 root 397:
1.1.1.11! root 398: // Refresh control & mutablestring
1.1 root 399: [floppyImageB setStringValue:@""];
1.1.1.11! root 400: [floppyB setString:@""] ;
1.1 root 401: }
402:
403: - (IBAction)ejectGemdosImage:(id)sender
404: {
1.1.1.3 root 405: // Clear the control. Later. saveAllControls will set the ConfigureParams accordingly to signal this is ejected
1.1 root 406: [gemdosImage setStringValue:@""];
1.1.1.11! root 407: [gemdos setString:@""] ;
1.1 root 408: }
409:
410: - (IBAction)ejectHdImage:(id)sender
411: {
1.1.1.3 root 412: // Clear the control. Later. saveAllControls will set the ConfigureParams accordingly to signal this is ejected
1.1 root 413: [hdImage setStringValue:@""];
1.1.1.11! root 414: [hrdDisk setString:@""] ;
1.1 root 415: }
416:
1.1.1.6 root 417: - (IBAction)ejectIdeMasterHdImage:(id)sender
1.1.1.5 root 418: {
419: // Clear the control. Later. saveAllControls will set the ConfigureParams accordingly to signal this is ejected
1.1.1.6 root 420: [ideMasterHdImage setStringValue:@""];
1.1.1.11! root 421: [masterIDE setString:@""] ;
1.1.1.5 root 422: }
423:
1.1.1.6 root 424: - (IBAction)ejectIdeSlaveHdImage:(id)sender
425: {
426: // Clear the control. Later. saveAllControls will set the ConfigureParams accordingly to signal this is ejected
427: [ideSlaveHdImage setStringValue:@""];
1.1.1.11! root 428: [slaveIDE setString:@""] ;
1.1.1.6 root 429: }
1.1 root 430:
431: /*-----------------------------------------------------------------------*/
1.1.1.3 root 432: /**
433: * Methods for the "Load Config" button
434: */
435:
436: - (IBAction)loadConfigFrom:(id)sender
437: {
1.1.1.11! root 438: NSArray *lesURLs ;
! 439: NSString *ru ;
! 440: BOOL btOk ;
! 441:
! 442: ru = [NSString stringWithCString:(Paths_GetHatariHome()) encoding:NSASCIIStringEncoding] ;
! 443: [opnPanel setAllowedFileTypes:[NSArray arrayWithObject:@"cfg"]] ;
! 444: [opnPanel setCanChooseDirectories: NO];
! 445: [opnPanel setCanChooseFiles: YES];
! 446: [opnPanel setAccessoryView:partage] ;
! 447:
! 448: #if MAC_OS_X_VERSION_MAX_ALLOWED > 1058
! 449: [opnPanel setDirectoryURL:[NSURL URLWithString:ru]] ;
! 450: [opnPanel setNameFieldStringValue:@"hatari"] ;
! 451: btOk = [opnPanel runModal] == NSOKButton ; // Ok ?
! 452: #else // */
! 453: btOk = [opnPanel runModalForDirectory:ru file:@"hatari"] == NSOKButton ; // Ok ? sous 10.5
! 454: #endif
! 455:
! 456: if (!btOk) return ; // Cancel
! 457:
! 458: lesURLs = [opnPanel URLs] ;
! 459: if ((lesURLs == nil) || ([lesURLs count] == 0))
! 460: return ;
! 461:
! 462: [configNm setString:[[lesURLs objectAtIndex:0] path]] ;
1.1.1.3 root 463:
464: // Make a non-const C string out of it
1.1.1.11! root 465: [configNm getCString:sConfigFileName maxLength:FILENAME_MAX encoding:NSASCIIStringEncoding];
1.1.1.3 root 466:
467: // Load the config into ConfigureParams
1.1.1.11! root 468: Configuration_Load(sConfigFileName);
! 469:
1.1.1.3 root 470: // Refresh all the controls to match ConfigureParams
1.1.1.11! root 471: [self setAllControls];
1.1 root 472: }
473:
1.1.1.3 root 474: /**
1.1.1.11! root 475: * Methods for the "Save Config" button (bottom preference window)
1.1.1.3 root 476: */
477: - (IBAction)saveConfigAs:(id)sender
1.1 root 478: {
1.1.1.11! root 479: NSString *ru ;
! 480: BOOL btOk ;
1.1.1.3 root 481:
1.1.1.11! root 482: ru = [NSString stringWithCString:(Paths_GetHatariHome()) encoding:NSASCIIStringEncoding] ;
! 483: [savPanel setAllowedFileTypes:[NSArray arrayWithObject:@"cfg"]] ;
! 484: [savPanel setAccessoryView:hartage] ;
1.1 root 485:
1.1.1.11! root 486: #if MAC_OS_X_VERSION_MAX_ALLOWED > 1058
1.1.1.3 root 487:
1.1.1.11! root 488: [savPanel setDirectoryURL:[NSURL URLWithString:ru]] ; // A partir de 10.6
! 489: [savPanel setNameFieldStringValue:@"hatari"] ;
! 490: btOk = [savPanel runModal] == NSOKButton ; // Ok ?
1.1.1.3 root 491:
1.1.1.11! root 492: #else // */
! 493: btOk = [savPanel runModalForDirectory:ru file:@"hatari"] == NSOKButton ; // Ok ?
! 494: #endif
1.1.1.3 root 495:
1.1.1.11! root 496: if (!btOk)
! 497: return ; // Cancel
! 498:
! 499: [configNm setString:[[savPanel URL] path]];
! 500:
! 501: // Make a non-const C string out of it
! 502: [configNm getCString:sConfigFileName maxLength:FILENAME_MAX encoding:NSASCIIStringEncoding];
! 503: [self saveAllControls] ; // Save the config from ConfigureParams
! 504: Configuration_Save(); // [self configSave:configNm] ;
! 505: }
! 506:
! 507: - (IBAction)aller:(id)sender
! 508: {
! 509: NSString *defaultDirectory ;
! 510:
! 511: defaultDirectory = [NSString stringWithCString:(Paths_GetHatariHome()) encoding:NSASCIIStringEncoding] ;
! 512: #if MAC_OS_X_VERSION_MAX_ALLOWED > 1058
! 513: [opnPanel setDirectoryURL:[NSURL URLWithString:defaultDirectory]] ;
! 514: #else // */
! 515: [opnPanel setDirectory:defaultDirectory] ;
! 516: #endif
! 517: }
! 518:
! 519: - (IBAction)halle:(id)sender
! 520: {
! 521: NSString *defaultDirectory ;
! 522:
! 523: defaultDirectory = [NSString stringWithCString:(Paths_GetHatariHome()) encoding:NSASCIIStringEncoding] ;
! 524: #if MAC_OS_X_VERSION_MAX_ALLOWED > 1058
! 525: [savPanel setDirectoryURL:[NSURL URLWithString:defaultDirectory]] ;
! 526: #else // */
! 527: [savPanel setDirectory:defaultDirectory] ;
! 528: #endif
1.1 root 529: }
530:
531:
532: /*-----------------------------------------------------------------------*/
533: /*
1.1.1.11! root 534: Commits and closes Ok button in preferences window
1.1 root 535: */
536: - (IBAction)commitAndClose:(id)sender
537: {
538:
539: // The user clicked OK
540: [self saveAllControls];
541:
1.1.1.11! root 542: [window close] ;
! 543:
1.1 root 544:
545: }
546:
1.1.1.11! root 547: // Populate Joystick key dropdown
! 548:
1.1 root 549: - (void)initKeysDropDown:(NSPopUpButton*)dropDown
550: {
551: [dropDown removeAllItems];
1.1.1.7 root 552: unsigned int i;
1.1 root 553: for (i = 0; i < Preferences_cKeysForJoysticks; i++)
554: {
555: SDLKey key = Preferences_KeysForJoysticks[i];
556: const char* szKeyName = SDL_GetKeyName(key);
1.1.1.6 root 557: [dropDown addItemWithTitle:[[NSString stringWithCString:szKeyName encoding:NSASCIIStringEncoding] capitalizedString]];
1.1 root 558: [[dropDown lastItem] setTag:key];
559: }
560: }
561:
562:
563: /*-----------------------------------------------------------------------*/
564: /*
1.1.1.11! root 565: Displays the Preferences dialog Ouverture de la fenêtre des préférences
1.1 root 566: */
567: - (IBAction)loadPrefs:(id)sender
568: {
1.1.1.11! root 569: [configNm setString:[NSString stringWithCString:sConfigFileName encoding:NSASCIIStringEncoding]] ;
! 570:
1.1 root 571: if (!bInitialized)
572: {
573: // Note: These inits cannot be done in awakeFromNib as by this time SDL is not yet initialized.
574:
575: // Fill the keyboard dropdowns
576: [self initKeysDropDown:joystickUp];
577: [self initKeysDropDown:joystickRight];
578: [self initKeysDropDown:joystickDown];
579: [self initKeysDropDown:joystickLeft];
580: [self initKeysDropDown:joystickFire];
581:
582: // Get and store the number of real joysticks
583: cRealJoysticks = SDL_NumJoysticks();
584:
585: // Fill the real joysticks dropdown, if any are available
586: if (cRealJoysticks > 0)
587: {
588: [realJoystick removeAllItems];
589: int i;
590: for (i = 0; i < cRealJoysticks; i++)
591: {
592: const char* szJoystickName = SDL_JoystickName(i);
1.1.1.6 root 593: [realJoystick addItemWithTitle:[[NSString stringWithCString:szJoystickName encoding:NSASCIIStringEncoding] capitalizedString]];
1.1 root 594: [[realJoystick lastItem] setTag:i];
595: }
596: }
597: else // No real joysticks: Disable the controls
598: {
599: [[joystickMode cellWithTag:1] setEnabled:FALSE];
600: [realJoystick setEnabled:FALSE];
601: }
602:
1.1.1.5 root 603: bInitialized = true;
1.1 root 604: }
605:
606:
1.1.1.3 root 607: // Backup of configuration settings to CurrentParams (which we will only
608: // commit back to the configuration settings if choosing OK)
609: CurrentParams = ConfigureParams;
1.1.1.11! root 610: applyChanges=false;
1.1 root 611:
612: [self setAllControls];
613:
614: // Display the window
1.1.1.9 root 615: ModalWrapper *mw=[[ModalWrapper alloc] init];
616:
617: [mw runModal:window];
618:
1.1.1.11! root 619: [mw release]; // */
1.1.1.9 root 620:
1.1.1.11! root 621: // solve bug screen-reset: close and kill preference windows before
! 622: // M. Saro, 2013
1.1.1.9 root 623:
1.1.1.11! root 624: //if(Ok button in preferences Windows)
! 625: {
! 626: // Check if change need reset
! 627: if (Change_DoNeedReset(&CurrentParams, &ConfigureParams))
! 628: {
! 629: applyChanges = NSRunAlertPanel(localize(@"Reset the emulator"), localize(@"Must be reset"),
! 630: localize(@"Don't reset"), localize(@"Reset"), nil) == NSAlertAlternateReturn ;
! 631: if (applyChanges) Change_CopyChangedParamsToConfiguration(&CurrentParams, &ConfigureParams, true) ;
! 632: else
! 633: ConfigureParams = CurrentParams; //Restore backup params
! 634: }
! 635: else
! 636: Change_CopyChangedParamsToConfiguration(&CurrentParams, &ConfigureParams, false); //Apply config without reset
! 637: }
! 638: // else // not OK button
! 639: // {
! 640: // ConfigureParams = CurrentParams; //Restore backup params
! 641: // }
! 642:
1.1 root 643: }
644:
645: /*-----------------------------------------------------------------------*/
646: /*
647: Updates the controls following a change in the joystick selection
648: */
649: - (IBAction)changeViewedJoystick:(id)sender
650: {
651: // Save the pre-joystick controls, as we are about to change them
652: [self saveJoystickControls];
653:
654: // Refresh the per-joystick controls
655: [self setJoystickControls];
656:
657: // Update the controls' enabled states
658: [self updateEnabledStates:self];
659: }
660:
661:
662: /*-----------------------------------------------------------------------*/
663: /*
1.1.1.11! root 664: Initializes all controls, transfert des préférences dans la fenêtre
1.1 root 665: */
666: - (void)setAllControls
667: {
1.1.1.11! root 668:
1.1 root 669: // Import the floppy paths into their controls.
1.1.1.11! root 670: IMPORT_TEXTFIELD(floppyImageA, floppyA, ConfigureParams.DiskImage.szDiskFileName[0]); // le A
! 671: IMPORT_TEXTFIELD(floppyImageB, floppyB, ConfigureParams.DiskImage.szDiskFileName[1]); // le B
! 672:
1.1 root 673: // Import all the preferences into their controls
1.1.1.11! root 674: IMPORT_TEXTFIELD(cartridgeImage, cartridge, ConfigureParams.Rom.szCartridgeImageFileName);
! 675: IMPORT_TEXTFIELD(defaultImagesLocation, imgeDir, ConfigureParams.DiskImage.szDiskImageDirectory);
! 676: IMPORT_TEXTFIELD(keyboardMappingFile, keyboard, ConfigureParams.Keyboard.szMappingFileName);
! 677: IMPORT_TEXTFIELD(printToFile, printit, ConfigureParams.Printer.szPrintToFileName);
! 678: IMPORT_TEXTFIELD(tosImage, TOS, ConfigureParams.Rom.szTosImageFileName);
! 679: IMPORT_TEXTFIELD(configFile, configNm, sConfigFileName);
! 680: IMPORT_TEXTFIELD(readRS232FromFile, rs232In, ConfigureParams.RS232.szInFileName);
! 681: IMPORT_TEXTFIELD(writeRS232ToFile, rs232Out, ConfigureParams.RS232.szOutFileName);
! 682:
1.1.1.3 root 683: IMPORT_SWITCH(autoInsertB, ConfigureParams.DiskImage.bAutoInsertDiskB);
1.1.1.11! root 684: IMPORT_SWITCH(blitter, ConfigureParams.System.bBlitter);
! 685: IMPORT_SWITCH(bootFromHD, ConfigureParams.HardDisk.bBootFromHardDisk);
! 686: IMPORT_SWITCH(captureOnChange, ConfigureParams.Screen.bCrop);
! 687: IMPORT_RADIO(colorDepth, ConfigureParams.Screen.nVdiColors);
! 688: IMPORT_SWITCH(compatibleCpu, ConfigureParams.System.bCompatibleCpu);
! 689: IMPORT_RADIO(cpuClock, ConfigureParams.System.nCpuFreq);
! 690: IMPORT_RADIO(cpuType, ConfigureParams.System.nCpuLevel);
! 691: IMPORT_SWITCH(enableMidi, ConfigureParams.Midi.bEnableMidi);
! 692: IMPORT_SWITCH(enablePrinter, ConfigureParams.Printer.bEnablePrinting);
! 693: IMPORT_SWITCH(enableRS232, ConfigureParams.RS232.bEnableRS232);
! 694: IMPORT_SWITCH(enableSound, ConfigureParams.Sound.bEnableSound);
! 695: IMPORT_DROPDOWN(frameSkip, ConfigureParams.Screen.nFrameSkips);
! 696: IMPORT_RADIO(keyboardMapping, ConfigureParams.Keyboard.nKeymapType);
! 697: IMPORT_RADIO(machineType, ConfigureParams.System.nMachineType);
! 698: IMPORT_RADIO(monitor, ConfigureParams.Screen.nMonitorType);
! 699: IMPORT_SWITCH(patchTimerD, ConfigureParams.System.bPatchTimerD);
! 700: IMPORT_RADIO(ramSize, ConfigureParams.Memory.nMemorySize);
! 701: IMPORT_SWITCH(realTime, ConfigureParams.System.bRealTimeClock);
! 702: IMPORT_SWITCH(fastFDC, ConfigureParams.DiskImage.FastFloppy);
! 703: IMPORT_SWITCH(useBorders, ConfigureParams.Screen.bAllowOverscan);
! 704: IMPORT_SWITCH(useVDIResolution, ConfigureParams.Screen.bUseExtVdiResolutions);
1.1.1.9 root 705: IMPORT_RADIO(floppyWriteProtection, ConfigureParams.DiskImage.nWriteProtection);
706: IMPORT_RADIO(HDWriteProtection, ConfigureParams.HardDisk.nWriteProtection);
1.1.1.11! root 707: // IMPORT_SWITCH(zoomSTLowRes, ConfigureParams.Screen.bZoomLowRes);
1.1.1.3 root 708: IMPORT_SWITCH(showStatusBar, ConfigureParams.Screen.bShowStatusbar);
709: IMPORT_DROPDOWN(enableDSP,ConfigureParams.System.nDSPType);
1.1.1.2 root 710:
1.1.1.6 root 711: // 12/04/2010
712: IMPORT_SWITCH(falconTTRatio, ConfigureParams.Screen.bAspectCorrect);
713: IMPORT_SWITCH(fullScreen, ConfigureParams.Screen.bFullScreen);
714: IMPORT_SWITCH(ledDisks, ConfigureParams.Screen.bShowDriveLed);
1.1.1.9 root 715: IMPORT_SWITCH(keepDesktopResolution, ConfigureParams.Screen.bKeepResolution);
716:
717: //v1.6.1
718: IMPORT_SWITCH(FastBootPatch,ConfigureParams.System.bFastBoot);
719: IMPORT_RADIO(YMVoicesMixing,ConfigureParams.Sound.YmVolumeMixing);
1.1.1.6 root 720:
721: //deal with the Max Zoomed Stepper
722: IMPORT_NTEXTFIELD(maxZoomedWidth, ConfigureParams.Screen.nMaxWidth);
723: IMPORT_NTEXTFIELD(maxZoomedHeight, ConfigureParams.Screen.nMaxHeight);
724:
1.1.1.9 root 725: [widthStepper setDoubleValue:[maxZoomedWidth intValue]];
726: [heightStepper setDoubleValue:[maxZoomedHeight intValue]];
1.1.1.6 root 727:
728:
1.1.1.3 root 729: [(force8bpp) setState:((ConfigureParams.Screen.nForceBpp==8))? NSOnState : NSOffState];
1.1.1.2 root 730:
1.1.1.6 root 731:
732: int i;
733:
734: for (i = 0; i <= DLGSOUND_50KHZ-DLGSOUND_11KHZ; i++)
735: {
736: if (ConfigureParams.Sound.nPlaybackFreq > nSoundFreqs[i]-500
737: && ConfigureParams.Sound.nPlaybackFreq < nSoundFreqs[i]+500)
738: {
739: [playbackQuality selectCellWithTag:(i)];
740: break;
741: }
742: }
743:
744:
1.1.1.3 root 745: if (ConfigureParams.Screen.nVdiWidth >= 1024)
1.1.1.2 root 746: [resolution selectCellWithTag:(2)];
1.1.1.3 root 747: else if (ConfigureParams.Screen.nVdiWidth >= 768)
1.1.1.2 root 748: [resolution selectCellWithTag:(1)];
749: else
750: [resolution selectCellWithTag:(0)];
751:
1.1 root 752: // If the HD flag is set, load the HD path, otherwise make it blank
1.1.1.11! root 753: if (ConfigureParams.Acsi[0].bUseDevice)
1.1 root 754: {
1.1.1.11! root 755: IMPORT_TEXTFIELD(hdImage, hrdDisk, ConfigureParams.Acsi[0].sDeviceFile);
1.1 root 756: }
757: else
758: {
1.1.1.11! root 759: [hdImage setStringValue:@""]; [hrdDisk setString:@""] ;
1.1 root 760: }
761:
1.1.1.5 root 762: // If the IDE HD flag is set, load the IDE HD path, otherwise make it blank
1.1.1.6 root 763: //Master
764: if (ConfigureParams.HardDisk.bUseIdeMasterHardDiskImage)
1.1.1.5 root 765: {
1.1.1.11! root 766: IMPORT_TEXTFIELD(ideMasterHdImage, masterIDE, ConfigureParams.HardDisk.szIdeMasterHardDiskImage);
1.1.1.5 root 767: }
768: else
769: {
1.1.1.11! root 770: [ideMasterHdImage setStringValue:@""]; [masterIDE setString:@""] ;
1.1.1.6 root 771: }
772: //Slave
773: if (ConfigureParams.HardDisk.bUseIdeSlaveHardDiskImage)
774: {
1.1.1.11! root 775: IMPORT_TEXTFIELD(ideSlaveHdImage, slaveIDE, ConfigureParams.HardDisk.szIdeSlaveHardDiskImage);
1.1.1.6 root 776: }
777: else
778: {
1.1.1.11! root 779: [ideSlaveHdImage setStringValue:@""]; [slaveIDE setString:@""] ;
1.1.1.5 root 780: }
781:
1.1 root 782: // If the Gemdos flag is set, load the Gemdos path, otherwise make it blank
1.1.1.3 root 783: if (ConfigureParams.HardDisk.bUseHardDiskDirectories)
1.1 root 784: {
1.1.1.11! root 785: [gemdos setString:[NSString stringWithCString:(ConfigureParams.HardDisk.szHardDiskDirectories[0]) encoding:NSASCIIStringEncoding]] ;
! 786: // [gemdosImage setStringValue:[NSApp pathUser:[gemdos stringByDeletingLastPathComponent]]] ;
! 787: [gemdosImage setStringValue:[NSApp pathUser:gemdos]] ;
1.1 root 788: }
789: else
790: {
1.1.1.11! root 791: [gemdosImage setStringValue:@""]; [gemdos setString:@""];
1.1 root 792: }
793:
1.1.1.11! root 794: // Set the per-joystick controls
1.1 root 795: [self setJoystickControls];
796:
797: // Update the controls' enabled states
1.1.1.11! root 798: [self updateEnabledStates:self];
1.1 root 799: }
800:
801:
1.1.1.11! root 802: /*------------------------------------------------------------------------*/
! 803: /* Updates the enabled states of controls who depend on other controls */
! 804: /**************************************************************************/
! 805:
1.1 root 806: - (IBAction)updateEnabledStates:(id)sender
807: {
808: // Joystick key controls are only enabled if "Use keyboard" is selected
809: int nJoystickMode;
810: EXPORT_RADIO(joystickMode, nJoystickMode);
811: BOOL bUsingKeyboard = (nJoystickMode == JOYSTICK_KEYBOARD);
1.1.1.11! root 812: [joystickUp setEnabled:bUsingKeyboard];
! 813: [joystickRight setEnabled:bUsingKeyboard];
! 814: [joystickDown setEnabled:bUsingKeyboard];
! 815: [joystickLeft setEnabled:bUsingKeyboard];
! 816: [joystickFire setEnabled:bUsingKeyboard];
1.1 root 817:
818: // Resolution and colour depth depend on Extended GEM VDI resolution
819: BOOL bUsingVDI;
820: EXPORT_SWITCH(useVDIResolution, bUsingVDI);
1.1.1.11! root 821: [resolution setEnabled:bUsingVDI];
1.1 root 822: [colorDepth setEnabled:bUsingVDI];
823:
824: // Playback quality depends on enable sound
825: BOOL bSoundEnabled;
1.1.1.11! root 826: EXPORT_SWITCH(enableSound, bSoundEnabled);
1.1 root 827: [playbackQuality setEnabled:bSoundEnabled];
828: }
829:
830:
831: /*-----------------------------------------------------------------------*/
1.1.1.11! root 832: /* Updates the joystick controls to match the new joystick selection */
! 833: /*************************************************************************/
! 834:
1.1 root 835: - (void)setJoystickControls
836: {
837: // Get and persist the ID of the newly selected joystick
838: EXPORT_DROPDOWN(currentJoystick, nCurrentJoystick);
839:
840: // Data validation: If the JoyID is out of bounds, correct it and, if set to use real joystick, change to disabled
1.1.1.3 root 841: if ( (ConfigureParams.Joysticks.Joy[nCurrentJoystick].nJoyId < 0)
842: || (ConfigureParams.Joysticks.Joy[nCurrentJoystick].nJoyId >= cRealJoysticks) )
1.1 root 843: {
1.1.1.3 root 844: ConfigureParams.Joysticks.Joy[nCurrentJoystick].nJoyId = 0;
845: if (ConfigureParams.Joysticks.Joy[nCurrentJoystick].nJoystickMode == JOYSTICK_REALSTICK)
1.1 root 846: {
1.1.1.3 root 847: ConfigureParams.Joysticks.Joy[nCurrentJoystick].nJoystickMode = JOYSTICK_DISABLED;
1.1 root 848: }
849: }
850:
851: // Don't change the realJoystick dropdown if none is available (to keep "(None available)" selected)
852: if (cRealJoysticks > 0)
853: {
1.1.1.3 root 854: IMPORT_DROPDOWN(realJoystick, ConfigureParams.Joysticks.Joy[nCurrentJoystick].nJoyId);
1.1 root 855: }
856:
1.1.1.3 root 857: IMPORT_RADIO(joystickMode, ConfigureParams.Joysticks.Joy[nCurrentJoystick].nJoystickMode);
858: IMPORT_DROPDOWN(joystickUp, ConfigureParams.Joysticks.Joy[nCurrentJoystick].nKeyCodeUp);
859: IMPORT_DROPDOWN(joystickRight, ConfigureParams.Joysticks.Joy[nCurrentJoystick].nKeyCodeRight);
860: IMPORT_DROPDOWN(joystickDown, ConfigureParams.Joysticks.Joy[nCurrentJoystick].nKeyCodeDown);
861: IMPORT_DROPDOWN(joystickLeft, ConfigureParams.Joysticks.Joy[nCurrentJoystick].nKeyCodeLeft);
862: IMPORT_DROPDOWN(joystickFire, ConfigureParams.Joysticks.Joy[nCurrentJoystick].nKeyCodeFire);
863: IMPORT_SWITCH(enableAutoFire, ConfigureParams.Joysticks.Joy[nCurrentJoystick].bEnableAutoFire);
1.1 root 864: }
865:
866:
867: /*-----------------------------------------------------------------------*/
1.1.1.11! root 868: /* Saves the setting for the joystick currently being viewed */
1.1 root 869: - (void)saveJoystickControls
870: {
1.1.1.3 root 871: EXPORT_RADIO(joystickMode, ConfigureParams.Joysticks.Joy[nCurrentJoystick].nJoystickMode);
872: EXPORT_DROPDOWN(realJoystick, ConfigureParams.Joysticks.Joy[nCurrentJoystick].nJoyId);
873: EXPORT_DROPDOWN(joystickUp, ConfigureParams.Joysticks.Joy[nCurrentJoystick].nKeyCodeUp);
874: EXPORT_DROPDOWN(joystickRight, ConfigureParams.Joysticks.Joy[nCurrentJoystick].nKeyCodeRight);
875: EXPORT_DROPDOWN(joystickDown, ConfigureParams.Joysticks.Joy[nCurrentJoystick].nKeyCodeDown);
876: EXPORT_DROPDOWN(joystickLeft, ConfigureParams.Joysticks.Joy[nCurrentJoystick].nKeyCodeLeft);
877: EXPORT_DROPDOWN(joystickFire, ConfigureParams.Joysticks.Joy[nCurrentJoystick].nKeyCodeFire);
878: EXPORT_SWITCH(enableAutoFire, ConfigureParams.Joysticks.Joy[nCurrentJoystick].bEnableAutoFire);
1.1 root 879: }
880:
881:
882: /*-----------------------------------------------------------------------*/
1.1.1.11! root 883: /* Saves the settings for all controls */
1.1 root 884: - (void)saveAllControls
885: {
886: // Export the preference controls into their vars
1.1.1.11! root 887:
! 888: EXPORT_TEXTFIELD(cartridge, ConfigureParams.Rom.szCartridgeImageFileName);
! 889: EXPORT_TEXTFIELD(imgeDir, ConfigureParams.DiskImage.szDiskImageDirectory);
! 890: EXPORT_TEXTFIELD(keyboard, ConfigureParams.Keyboard.szMappingFileName);
! 891: EXPORT_TEXTFIELD(printit, ConfigureParams.Printer.szPrintToFileName);
! 892: EXPORT_TEXTFIELD(rs232In, ConfigureParams.RS232.szInFileName);
! 893: EXPORT_TEXTFIELD(TOS, ConfigureParams.Rom.szTosImageFileName);
! 894: EXPORT_TEXTFIELD(midiOut, ConfigureParams.Midi.sMidiOutFileName);
! 895: EXPORT_TEXTFIELD(rs232Out, ConfigureParams.RS232.szOutFileName);
! 896:
! 897: //EXPORT_TEXTFIELD(cartridgeImage, ConfigureParams.Rom.szCartridgeImageFileName);
! 898:
1.1.1.3 root 899: EXPORT_SWITCH(autoInsertB, ConfigureParams.DiskImage.bAutoInsertDiskB);
1.1.1.11! root 900: EXPORT_SWITCH(blitter, ConfigureParams.System.bBlitter);
1.1.1.3 root 901: EXPORT_SWITCH(bootFromHD, ConfigureParams.HardDisk.bBootFromHardDisk);
1.1.1.11! root 902: EXPORT_SWITCH(captureOnChange, ConfigureParams.Screen.bCrop);
! 903: EXPORT_RADIO(colorDepth, ConfigureParams.Screen.nVdiColors);
! 904: EXPORT_SWITCH(compatibleCpu, ConfigureParams.System.bCompatibleCpu);
! 905: EXPORT_RADIO(cpuClock, ConfigureParams.System.nCpuFreq);
! 906: EXPORT_RADIO(cpuType, ConfigureParams.System.nCpuLevel);
! 907: EXPORT_SWITCH(enableMidi, ConfigureParams.Midi.bEnableMidi);
! 908: EXPORT_SWITCH(enablePrinter, ConfigureParams.Printer.bEnablePrinting);
! 909: EXPORT_SWITCH(enableRS232, ConfigureParams.RS232.bEnableRS232);
! 910: EXPORT_SWITCH(enableSound, ConfigureParams.Sound.bEnableSound);
! 911: EXPORT_DROPDOWN(frameSkip, ConfigureParams.Screen.nFrameSkips);
! 912: EXPORT_RADIO(keyboardMapping, ConfigureParams.Keyboard.nKeymapType);
! 913: EXPORT_RADIO(machineType, ConfigureParams.System.nMachineType);
! 914: EXPORT_RADIO(monitor, ConfigureParams.Screen.nMonitorType);
! 915: EXPORT_SWITCH(patchTimerD, ConfigureParams.System.bPatchTimerD);
! 916: EXPORT_RADIO(ramSize, ConfigureParams.Memory.nMemorySize);
! 917: EXPORT_SWITCH(realTime, ConfigureParams.System.bRealTimeClock);
! 918: EXPORT_SWITCH(fastFDC, ConfigureParams.DiskImage.FastFloppy);
! 919: EXPORT_SWITCH(useBorders, ConfigureParams.Screen.bAllowOverscan);
! 920: EXPORT_SWITCH(useVDIResolution, ConfigureParams.Screen.bUseExtVdiResolutions);
1.1.1.9 root 921: EXPORT_RADIO(floppyWriteProtection, ConfigureParams.DiskImage.nWriteProtection);
1.1.1.11! root 922: EXPORT_RADIO(HDWriteProtection, ConfigureParams.HardDisk.nWriteProtection);
! 923: // EXPORT_SWITCH(zoomSTLowRes, ConfigureParams.Screen.bZoomLowRes);
1.1.1.3 root 924: EXPORT_SWITCH(showStatusBar,ConfigureParams.Screen.bShowStatusbar);
925: EXPORT_DROPDOWN(enableDSP,ConfigureParams.System.nDSPType);
1.1.1.6 root 926:
927: EXPORT_SWITCH(falconTTRatio, ConfigureParams.Screen.bAspectCorrect);
928: EXPORT_SWITCH(fullScreen, ConfigureParams.Screen.bFullScreen);
1.1.1.9 root 929: EXPORT_SWITCH(ledDisks, ConfigureParams.Screen.bShowDriveLed);
930: EXPORT_SWITCH(keepDesktopResolution, ConfigureParams.Screen.bKeepResolution);
931:
932: //v1.6.1
933: EXPORT_SWITCH(FastBootPatch,ConfigureParams.System.bFastBoot);
934: EXPORT_RADIO(YMVoicesMixing,ConfigureParams.Sound.YmVolumeMixing);
1.1.1.6 root 935:
936: EXPORT_NTEXTFIELD(maxZoomedWidth, ConfigureParams.Screen.nMaxWidth);
937: EXPORT_NTEXTFIELD(maxZoomedHeight, ConfigureParams.Screen.nMaxHeight);
1.1.1.2 root 938:
1.1.1.6 root 939: ConfigureParams.Screen.nForceBpp = ([force8bpp state] == NSOnState) ? 8 : 0;
1.1.1.5 root 940:
1.1.1.6 root 941: ConfigureParams.Sound.nPlaybackFreq = nSoundFreqs[[[playbackQuality selectedCell] tag]];
942:
1.1.1.2 root 943: switch ([[resolution selectedCell] tag])
944: {
945: case 0:
1.1.1.3 root 946: ConfigureParams.Screen.nVdiWidth = 640;
947: ConfigureParams.Screen.nVdiHeight = 480;
1.1.1.2 root 948: break;
949: case 1:
1.1.1.3 root 950: ConfigureParams.Screen.nVdiWidth = 800;
951: ConfigureParams.Screen.nVdiHeight = 600;
1.1.1.2 root 952: break;
953: case 2:
1.1.1.3 root 954: ConfigureParams.Screen.nVdiWidth = 1024;
955: ConfigureParams.Screen.nVdiHeight = 768;
1.1.1.2 root 956: break;
957: }
1.1 root 958:
959: // Define the HD flag, and export the HD path if one is selected
1.1.1.11! root 960: if ([hrdDisk length] > 0)
1.1 root 961: {
1.1.1.11! root 962: EXPORT_TEXTFIELD(hrdDisk, ConfigureParams.Acsi[0].sDeviceFile);
! 963: ConfigureParams.Acsi[0].bUseDevice = true;
1.1.1.5 root 964: }
965: else
966: {
1.1.1.11! root 967: ConfigureParams.Acsi[0].bUseDevice = false;
1.1.1.5 root 968: }
1.1.1.11! root 969:
1.1.1.5 root 970: // Define the IDE HD flag, and export the IDE HD path if one is selected
1.1.1.11! root 971: if ([masterIDE length] > 0)
1.1.1.6 root 972: {
1.1.1.11! root 973: EXPORT_TEXTFIELD(masterIDE, ConfigureParams.HardDisk.szIdeMasterHardDiskImage);
! 974: ConfigureParams.HardDisk.bUseIdeMasterHardDiskImage = YES;
1.1.1.6 root 975: }
976: else
1.1.1.5 root 977: {
1.1.1.11! root 978: ConfigureParams.HardDisk.bUseIdeMasterHardDiskImage = NO;
1.1.1.6 root 979: }
980:
981: // IDE Slave
1.1.1.11! root 982: if ([slaveIDE length] > 0)
1.1.1.6 root 983: {
1.1.1.11! root 984: EXPORT_TEXTFIELD(slaveIDE, ConfigureParams.HardDisk.szIdeSlaveHardDiskImage);
! 985: ConfigureParams.HardDisk.bUseIdeSlaveHardDiskImage = YES;
1.1 root 986: }
987: else
988: {
1.1.1.11! root 989: ConfigureParams.HardDisk.bUseIdeSlaveHardDiskImage = NO;
1.1 root 990: }
991:
992: // Define the Gemdos flag, and export the Gemdos path if one is selected
1.1.1.11! root 993: if ([gemdos length] > 0)
1.1 root 994: {
1.1.1.11! root 995: EXPORT_TEXTFIELD(gemdos, ConfigureParams.HardDisk.szHardDiskDirectories[0]);
! 996: ConfigureParams.HardDisk.bUseHardDiskDirectories = YES;
1.1 root 997: }
998: else
999: {
1.1.1.11! root 1000: ConfigureParams.HardDisk.bUseHardDiskDirectories = NO;
1.1 root 1001: }
1.1.1.11! root 1002:
! 1003: // Save the per-joystick controls
! 1004: [self saveJoystickControls];
1.1 root 1005: }
1006:
1.1.1.6 root 1007: // Max Zoomed Adjust
1008:
1009: - (IBAction) setWidth:(id)sender;
1010: {
1.1.1.11! root 1011: NSLog(@"Change Max Zoom width: %d", [sender intValue]);
1.1.1.6 root 1012: [maxZoomedWidth setIntValue: [sender intValue]];
1013: }
1014:
1015: - (IBAction) setHeight:(id)sender;
1016: {
1.1.1.11! root 1017: NSLog(@"Change Max Zoom height: %d", [sender intValue]);
1.1.1.6 root 1018: [maxZoomedHeight setIntValue: [sender intValue]];
1019: }
1020:
1.1.1.11! root 1021: +(PrefsController *)prefs
1.1.1.9 root 1022: {
1.1.1.11! root 1023: static PrefsController *prefs = nil;
1.1.1.9 root 1024: if (!prefs)
1025: prefs = [[PrefsController alloc] init];
1026:
1027: return prefs;
1.1.1.11! root 1028: } // */
1.1.1.9 root 1029:
1.1.1.11! root 1030: - (void)awakeFromNib
! 1031: {
! 1032: cartridge = [NSMutableString stringWithCapacity:50] ; [cartridge setString:@""] ; [cartridge retain] ;
! 1033: imgeDir = [NSMutableString stringWithCapacity:50] ; [imgeDir setString:@""] ; [imgeDir retain] ;
! 1034: floppyA = [NSMutableString stringWithCapacity:50] ; [floppyA setString:@""] ; [floppyA retain] ;
! 1035: floppyB = [NSMutableString stringWithCapacity:50] ; [floppyB setString:@""] ; [floppyB retain] ;
! 1036: gemdos = [NSMutableString stringWithCapacity:50] ; [gemdos setString:@""] ; [gemdos retain] ;
! 1037: hrdDisk = [NSMutableString stringWithCapacity:50] ; [hrdDisk setString:@""] ; [hrdDisk retain] ;
! 1038: masterIDE = [NSMutableString stringWithCapacity:50] ; [masterIDE setString:@""] ; [masterIDE retain] ;
! 1039: slaveIDE = [NSMutableString stringWithCapacity:50] ; [slaveIDE setString:@""] ; [slaveIDE retain] ;
! 1040: keyboard = [NSMutableString stringWithCapacity:50] ; [keyboard setString:@""] ; [keyboard retain] ;
! 1041: midiOut = [NSMutableString stringWithCapacity:50] ; [midiOut setString:@""] ; [midiOut retain] ;
! 1042: printit = [NSMutableString stringWithCapacity:50] ; [printit setString:@""] ; [printit retain] ;
! 1043: rs232In = [NSMutableString stringWithCapacity:50] ; [rs232In setString:@""] ; [rs232In retain] ;
! 1044: rs232Out = [NSMutableString stringWithCapacity:50] ; [rs232Out setString:@""] ; [rs232Out retain] ;
! 1045: TOS = [NSMutableString stringWithCapacity:50] ; [TOS setString:@""] ; [TOS retain] ;
! 1046: configNm = [NSMutableString stringWithCapacity:50] ; [configNm setString:@""] ; [configNm retain] ;
! 1047: opnPanel = [NSOpenPanel openPanel]; [opnPanel retain] ;
! 1048: savPanel = [NSSavePanel savePanel]; [savPanel retain] ;
! 1049: }
1.1.1.6 root 1050:
1.1 root 1051: @end
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.