Annotation of hatari/src/gui-osx/PrefsController.m, revision 1.1.1.11

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.