--- hatari/src/gui-osx/PrefsController.m 2019/04/01 07:14:42 1.1.1.3 +++ hatari/src/gui-osx/PrefsController.m 2019/04/09 08:49:22 1.1.1.7 @@ -28,12 +28,14 @@ // Macros to transfer data between Cocoa controls and Hatari data structures #define EXPORT_TEXTFIELD(nstextfield, target) GuiOsx_ExportPathString([nstextfield stringValue], target, sizeof((target))) +#define EXPORT_NTEXTFIELD(nstextfield, target) target = [nstextfield intValue] #define EXPORT_SWITCH(nsbutton, target) target = ([(nsbutton) state] == NSOnState) #define EXPORT_RADIO(nsmatrix, target) target = [[(nsmatrix) selectedCell] tag] #define EXPORT_DROPDOWN(nspopupbutton, target) target = [[(nspopupbutton) selectedItem] tag] #define EXPORT_SLIDER(nsslider, target) target = [(nsslider) intValue] -#define IMPORT_TEXTFIELD(nstextfield, source) [(nstextfield) setStringValue:[[NSString stringWithCString:(source)] stringByAbbreviatingWithTildeInPath]] +#define IMPORT_TEXTFIELD(nstextfield, source) [(nstextfield) setStringValue:[[NSString stringWithCString:(source) encoding:NSASCIIStringEncoding] stringByAbbreviatingWithTildeInPath]] +#define IMPORT_NTEXTFIELD(nstextfield, source) [(nstextfield) setIntValue:(source)] #define IMPORT_SWITCH(nsbutton, source) [(nsbutton) setState:((source))? NSOnState : NSOffState] #define IMPORT_RADIO(nsmatrix, source) [(nsmatrix) selectCellWithTag:(source)] #define IMPORT_DROPDOWN(nspopupbutton, source) [(nspopupbutton) selectItemAtIndex:[(nspopupbutton) indexOfItemWithTag:(source)]] @@ -186,6 +188,28 @@ SDLKey Preferences_KeysForJoysticks[] = size_t Preferences_cKeysForJoysticks = sizeof(Preferences_KeysForJoysticks) / sizeof(Preferences_KeysForJoysticks[0]); +#define DLGSOUND_11KHZ 0 +#define DLGSOUND_12KHZ 1 +#define DLGSOUND_16KHZ 2 +#define DLGSOUND_22KHZ 3 +#define DLGSOUND_25KHZ 4 +#define DLGSOUND_32KHZ 5 +#define DLGSOUND_44KHZ 6 +#define DLGSOUND_48KHZ 7 +#define DLGSOUND_50KHZ 8 + +static const int nSoundFreqs[] = +{ + 11025, + 12517, + 16000, + 22050, + 25033, + 32000, + 44100, + 48000, + 50066 +}; @implementation PrefsController @@ -229,7 +253,7 @@ size_t Preferences_cKeysForJoysticks = s [textField setStringValue:[path stringByAbbreviatingWithTildeInPath]]; // Signal completion - return TRUE; + return true; } // Signal that the selection was aborted @@ -250,7 +274,7 @@ size_t Preferences_cKeysForJoysticks = s NSString *path = [[floppyTextField stringValue] stringByExpandingTildeInPath]; // Make a non-const C string out of it - const char* constSzPath = [path cString]; + const char* constSzPath = [path cStringUsingEncoding:NSASCIIStringEncoding]; size_t cbPath = strlen(constSzPath) + 1; char szPath[cbPath]; strncpy(szPath, constSzPath, cbPath); @@ -295,6 +319,16 @@ size_t Preferences_cKeysForJoysticks = s [self choosePathForControl: hdImage chooseDirectories:FALSE defaultInitialDir:@"~"]; } +- (IBAction)chooseIdeMasterHdImage:(id)sender +{ + [self choosePathForControl: ideMasterHdImage chooseDirectories:FALSE defaultInitialDir:@"~"]; +} + +- (IBAction)chooseIdeSlaveHdImage:(id)sender +{ + [self choosePathForControl: ideSlaveHdImage chooseDirectories:FALSE defaultInitialDir:@"~"]; +} + - (IBAction)chooseKeyboardMappingFile:(id)sender { [self choosePathForControl: keyboardMappingFile chooseDirectories:FALSE defaultInitialDir:@"~"]; @@ -358,6 +392,17 @@ size_t Preferences_cKeysForJoysticks = s [hdImage setStringValue:@""]; } +- (IBAction)ejectIdeMasterHdImage:(id)sender +{ + // Clear the control. Later. saveAllControls will set the ConfigureParams accordingly to signal this is ejected + [ideMasterHdImage setStringValue:@""]; +} + +- (IBAction)ejectIdeSlaveHdImage:(id)sender +{ + // Clear the control. Later. saveAllControls will set the ConfigureParams accordingly to signal this is ejected + [ideSlaveHdImage setStringValue:@""]; +} /*-----------------------------------------------------------------------*/ /** @@ -366,7 +411,7 @@ size_t Preferences_cKeysForJoysticks = s - (IBAction)loadConfigFrom:(id)sender { - NSString *ConfigFile = [NSString stringWithCString:(sConfigFileName)]; + NSString *ConfigFile = [NSString stringWithCString:(sConfigFileName) encoding:NSASCIIStringEncoding]; NSOpenPanel *openPanel = [ NSOpenPanel openPanel ]; if ( [ openPanel runModalForDirectory:nil file:ConfigFile types:nil ] ) @@ -381,7 +426,7 @@ size_t Preferences_cKeysForJoysticks = s if (ConfigFile != nil) { // Make a non-const C string out of it - const char* constSzPath = [ConfigFile cString]; + const char* constSzPath = [ConfigFile cStringUsingEncoding:NSASCIIStringEncoding]; size_t cbPath = strlen(constSzPath) + 1; char szPath[cbPath]; strncpy(szPath, constSzPath, cbPath); @@ -408,8 +453,8 @@ size_t Preferences_cKeysForJoysticks = s NSSavePanel *savePanel = [ NSSavePanel savePanel ]; - NSString* defaultDir = [NSString stringWithCString:splitpath]; - NSString *ConfigFile = [NSString stringWithCString:splitname]; + NSString* defaultDir = [NSString stringWithCString:splitpath encoding:NSASCIIStringEncoding]; + NSString *ConfigFile = [NSString stringWithCString:splitname encoding:NSASCIIStringEncoding]; if ( ![ savePanel runModalForDirectory:defaultDir file:ConfigFile ] ) { @@ -421,7 +466,7 @@ size_t Preferences_cKeysForJoysticks = s if (ConfigFile != nil) { // Make a non-const C string out of it - const char* constSzPath = [ConfigFile cString]; + const char* constSzPath = [ConfigFile cStringUsingEncoding:NSASCIIStringEncoding]; size_t cbPath = strlen(constSzPath) + 1; char szPath[cbPath]; strncpy(szPath, constSzPath, cbPath); @@ -439,7 +484,7 @@ size_t Preferences_cKeysForJoysticks = s */ - (IBAction)commitAndClose:(id)sender { - BOOL applyChanges = TRUE; + BOOL applyChanges = true; // The user clicked OK [self saveAllControls]; @@ -447,15 +492,17 @@ size_t Preferences_cKeysForJoysticks = s // If a reset is required, ask the user first if (Change_DoNeedReset(&CurrentParams, &ConfigureParams)) { - applyChanges = ( 0 == NSRunAlertPanel (@"Reset the emulator?", - @"The emulator must be reset in order to apply your changes.\nAll current work will be lost.", - @"Don't reset", @"Reset", nil) ); + applyChanges = ( 0 == NSRunAlertPanel ( + NSLocalizedStringFromTable(@"Reset the emulator",@"Localizable",@"comment"), + NSLocalizedStringFromTable(@"Must be reset",@"Localizable",@"comment"), + NSLocalizedStringFromTable(@"Don't reset",@"Localizable",@"comment"), + NSLocalizedStringFromTable(@"Reset",@"Localizable",@"comment"), nil) ); } // Commit the new configuration if (applyChanges) { - Change_CopyChangedParamsToConfiguration(&CurrentParams, &ConfigureParams, FALSE); + Change_CopyChangedParamsToConfiguration(&CurrentParams, &ConfigureParams, false); } else { @@ -469,12 +516,12 @@ size_t Preferences_cKeysForJoysticks = s - (void)initKeysDropDown:(NSPopUpButton*)dropDown { [dropDown removeAllItems]; - int i; + unsigned int i; for (i = 0; i < Preferences_cKeysForJoysticks; i++) { SDLKey key = Preferences_KeysForJoysticks[i]; const char* szKeyName = SDL_GetKeyName(key); - [dropDown addItemWithTitle:[[NSString stringWithCString:szKeyName] capitalizedString]]; + [dropDown addItemWithTitle:[[NSString stringWithCString:szKeyName encoding:NSASCIIStringEncoding] capitalizedString]]; [[dropDown lastItem] setTag:key]; } } @@ -508,7 +555,7 @@ size_t Preferences_cKeysForJoysticks = s for (i = 0; i < cRealJoysticks; i++) { const char* szJoystickName = SDL_JoystickName(i); - [realJoystick addItemWithTitle:[[NSString stringWithCString:szJoystickName] capitalizedString]]; + [realJoystick addItemWithTitle:[[NSString stringWithCString:szJoystickName encoding:NSASCIIStringEncoding] capitalizedString]]; [[realJoystick lastItem] setTag:i]; } } @@ -518,7 +565,7 @@ size_t Preferences_cKeysForJoysticks = s [realJoystick setEnabled:FALSE]; } - bInitialized = TRUE; + bInitialized = true; } @@ -564,7 +611,7 @@ size_t Preferences_cKeysForJoysticks = s IMPORT_SWITCH(autoInsertB, ConfigureParams.DiskImage.bAutoInsertDiskB); IMPORT_SWITCH(blitter, ConfigureParams.System.bBlitter); IMPORT_SWITCH(bootFromHD, ConfigureParams.HardDisk.bBootFromHardDisk); - IMPORT_SWITCH(captureOnChange, ConfigureParams.Screen.bCaptureChange); + IMPORT_SWITCH(captureOnChange, ConfigureParams.Screen.bCrop); IMPORT_TEXTFIELD(cartridgeImage, ConfigureParams.Rom.szCartridgeImageFileName); IMPORT_RADIO(colorDepth, ConfigureParams.Screen.nVdiColors); IMPORT_SWITCH(compatibleCpu, ConfigureParams.System.bCompatibleCpu); @@ -581,25 +628,53 @@ size_t Preferences_cKeysForJoysticks = s IMPORT_RADIO(machineType, ConfigureParams.System.nMachineType); IMPORT_RADIO(monitor, ConfigureParams.Screen.nMonitorType); IMPORT_SWITCH(patchTimerD, ConfigureParams.System.bPatchTimerD); - IMPORT_RADIO(playbackQuality, ConfigureParams.Sound.nPlaybackQuality); IMPORT_TEXTFIELD(printToFile, ConfigureParams.Printer.szPrintToFileName); IMPORT_RADIO(ramSize, ConfigureParams.Memory.nMemorySize); IMPORT_TEXTFIELD(readRS232FromFile, ConfigureParams.RS232.szInFileName); IMPORT_SWITCH(realTime, ConfigureParams.System.bRealTimeClock); - IMPORT_SWITCH(slowFDC, ConfigureParams.System.bSlowFDC); + IMPORT_SWITCH(slowFDC, ConfigureParams.DiskImage.bSlowFloppy); IMPORT_TEXTFIELD(tosImage, ConfigureParams.Rom.szTosImageFileName); IMPORT_SWITCH(useBorders, ConfigureParams.Screen.bAllowOverscan); IMPORT_SWITCH(useVDIResolution, ConfigureParams.Screen.bUseExtVdiResolutions); - IMPORT_TEXTFIELD(writeMidiToFile, ConfigureParams.Midi.szMidiOutFileName); + IMPORT_TEXTFIELD(writeMidiToFile, ConfigureParams.Midi.sMidiOutFileName); IMPORT_RADIO(writeProtection, ConfigureParams.DiskImage.nWriteProtection); IMPORT_TEXTFIELD(writeRS232ToFile, ConfigureParams.RS232.szOutFileName); - IMPORT_SWITCH(zoomSTLowRes, ConfigureParams.Screen.bZoomLowRes); + // IMPORT_SWITCH(zoomSTLowRes, ConfigureParams.Screen.bZoomLowRes); IMPORT_SWITCH(showStatusBar, ConfigureParams.Screen.bShowStatusbar); IMPORT_DROPDOWN(enableDSP,ConfigureParams.System.nDSPType); IMPORT_TEXTFIELD(configFile, sConfigFileName); + // 12/04/2010 + IMPORT_SWITCH(falconTTRatio, ConfigureParams.Screen.bAspectCorrect); + IMPORT_SWITCH(fullScreen, ConfigureParams.Screen.bFullScreen); + IMPORT_SWITCH(ledDisks, ConfigureParams.Screen.bShowDriveLed); + + //deal with the Max Zoomed Stepper + IMPORT_NTEXTFIELD(maxZoomedWidth, ConfigureParams.Screen.nMaxWidth); + IMPORT_NTEXTFIELD(maxZoomedHeight, ConfigureParams.Screen.nMaxHeight); + + [widthStepper setIntValue:[maxZoomedWidth intValue]]; + [heightStepper setIntValue:[maxZoomedHeight intValue]]; + + + + [(force8bpp) setState:((ConfigureParams.Screen.nForceBpp==8))? NSOnState : NSOffState]; + + int i; + + for (i = 0; i <= DLGSOUND_50KHZ-DLGSOUND_11KHZ; i++) + { + if (ConfigureParams.Sound.nPlaybackFreq > nSoundFreqs[i]-500 + && ConfigureParams.Sound.nPlaybackFreq < nSoundFreqs[i]+500) + { + [playbackQuality selectCellWithTag:(i)]; + break; + } + } + + if (ConfigureParams.Screen.nVdiWidth >= 1024) [resolution selectCellWithTag:(2)]; else if (ConfigureParams.Screen.nVdiWidth >= 768) @@ -617,6 +692,26 @@ size_t Preferences_cKeysForJoysticks = s [hdImage setStringValue:@""]; } + // If the IDE HD flag is set, load the IDE HD path, otherwise make it blank + //Master + if (ConfigureParams.HardDisk.bUseIdeMasterHardDiskImage) + { + IMPORT_TEXTFIELD(ideMasterHdImage, ConfigureParams.HardDisk.szIdeMasterHardDiskImage); + } + else + { + [ideMasterHdImage setStringValue:@""]; + } + //Slave + if (ConfigureParams.HardDisk.bUseIdeSlaveHardDiskImage) + { + IMPORT_TEXTFIELD(ideSlaveHdImage, ConfigureParams.HardDisk.szIdeSlaveHardDiskImage); + } + else + { + [ideSlaveHdImage setStringValue:@""]; + } + // If the Gemdos flag is set, load the Gemdos path, otherwise make it blank if (ConfigureParams.HardDisk.bUseHardDiskDirectories) { @@ -727,7 +822,7 @@ size_t Preferences_cKeysForJoysticks = s EXPORT_SWITCH(autoInsertB, ConfigureParams.DiskImage.bAutoInsertDiskB); EXPORT_SWITCH(blitter, ConfigureParams.System.bBlitter); EXPORT_SWITCH(bootFromHD, ConfigureParams.HardDisk.bBootFromHardDisk); - EXPORT_SWITCH(captureOnChange, ConfigureParams.Screen.bCaptureChange); + EXPORT_SWITCH(captureOnChange, ConfigureParams.Screen.bCrop); EXPORT_TEXTFIELD(cartridgeImage, ConfigureParams.Rom.szCartridgeImageFileName); EXPORT_RADIO(colorDepth, ConfigureParams.Screen.nVdiColors); EXPORT_SWITCH(compatibleCpu, ConfigureParams.System.bCompatibleCpu); @@ -744,24 +839,32 @@ size_t Preferences_cKeysForJoysticks = s EXPORT_RADIO(machineType, ConfigureParams.System.nMachineType); EXPORT_RADIO(monitor, ConfigureParams.Screen.nMonitorType); EXPORT_SWITCH(patchTimerD, ConfigureParams.System.bPatchTimerD); - EXPORT_RADIO(playbackQuality, ConfigureParams.Sound.nPlaybackQuality); EXPORT_TEXTFIELD(printToFile, ConfigureParams.Printer.szPrintToFileName); EXPORT_RADIO(ramSize, ConfigureParams.Memory.nMemorySize); EXPORT_TEXTFIELD(readRS232FromFile, ConfigureParams.RS232.szInFileName); EXPORT_SWITCH(realTime, ConfigureParams.System.bRealTimeClock); - EXPORT_SWITCH(slowFDC, ConfigureParams.System.bSlowFDC); + EXPORT_SWITCH(slowFDC, ConfigureParams.DiskImage.bSlowFloppy); EXPORT_TEXTFIELD(tosImage, ConfigureParams.Rom.szTosImageFileName); EXPORT_SWITCH(useBorders, ConfigureParams.Screen.bAllowOverscan); EXPORT_SWITCH(useVDIResolution, ConfigureParams.Screen.bUseExtVdiResolutions); - EXPORT_TEXTFIELD(writeMidiToFile, ConfigureParams.Midi.szMidiOutFileName); + EXPORT_TEXTFIELD(writeMidiToFile, ConfigureParams.Midi.sMidiOutFileName); EXPORT_RADIO(writeProtection, ConfigureParams.DiskImage.nWriteProtection); EXPORT_TEXTFIELD(writeRS232ToFile, ConfigureParams.RS232.szOutFileName); - EXPORT_SWITCH(zoomSTLowRes, ConfigureParams.Screen.bZoomLowRes); + // EXPORT_SWITCH(zoomSTLowRes, ConfigureParams.Screen.bZoomLowRes); EXPORT_SWITCH(showStatusBar,ConfigureParams.Screen.bShowStatusbar); EXPORT_DROPDOWN(enableDSP,ConfigureParams.System.nDSPType); + + EXPORT_SWITCH(falconTTRatio, ConfigureParams.Screen.bAspectCorrect); + EXPORT_SWITCH(fullScreen, ConfigureParams.Screen.bFullScreen); + IMPORT_SWITCH(ledDisks, ConfigureParams.Screen.bShowDriveLed); + + EXPORT_NTEXTFIELD(maxZoomedWidth, ConfigureParams.Screen.nMaxWidth); + EXPORT_NTEXTFIELD(maxZoomedHeight, ConfigureParams.Screen.nMaxHeight); - ConfigureParams.Screen.nForceBpp = ([force8bpp state] == NSOnState) ? 8 : 16; + ConfigureParams.Screen.nForceBpp = ([force8bpp state] == NSOnState) ? 8 : 0; + ConfigureParams.Sound.nPlaybackFreq = nSoundFreqs[[[playbackQuality selectedCell] tag]]; + switch ([[resolution selectedCell] tag]) { case 0: @@ -782,26 +885,63 @@ size_t Preferences_cKeysForJoysticks = s if ([[hdImage stringValue] length] > 0) { EXPORT_TEXTFIELD(hdImage, ConfigureParams.HardDisk.szHardDiskImage); - ConfigureParams.HardDisk.bUseHardDiskImage = TRUE; + ConfigureParams.HardDisk.bUseHardDiskImage = true; } else { - ConfigureParams.HardDisk.bUseHardDiskImage = FALSE; + ConfigureParams.HardDisk.bUseHardDiskImage = false; + } + + // Define the IDE HD flag, and export the IDE HD path if one is selected + if ([[ideMasterHdImage stringValue] length] > 0) + { + EXPORT_TEXTFIELD(ideMasterHdImage, ConfigureParams.HardDisk.szIdeMasterHardDiskImage); + ConfigureParams.HardDisk.bUseIdeMasterHardDiskImage = true; + } + else + { + ConfigureParams.HardDisk.bUseIdeMasterHardDiskImage = false; + } + + // IDE Slave + if ([[ideSlaveHdImage stringValue] length] > 0) + { + EXPORT_TEXTFIELD(ideSlaveHdImage, ConfigureParams.HardDisk.szIdeSlaveHardDiskImage); + ConfigureParams.HardDisk.bUseIdeSlaveHardDiskImage = true; + } + else + { + ConfigureParams.HardDisk.bUseIdeSlaveHardDiskImage = false; } // Define the Gemdos flag, and export the Gemdos path if one is selected if ([[gemdosImage stringValue] length] > 0) { EXPORT_TEXTFIELD(gemdosImage, ConfigureParams.HardDisk.szHardDiskDirectories[0]); - ConfigureParams.HardDisk.bUseHardDiskDirectories = TRUE; + ConfigureParams.HardDisk.bUseHardDiskDirectories = true; } else { - ConfigureParams.HardDisk.bUseHardDiskDirectories = FALSE; + ConfigureParams.HardDisk.bUseHardDiskDirectories = false; } // Save the per-joystick controls [self saveJoystickControls]; } +// Max Zoomed Adjust + +- (IBAction) setWidth:(id)sender; +{ + NSLog(@"Change Max Zoom width: %ld", [sender intValue]); + [maxZoomedWidth setIntValue: [sender intValue]]; +} + +- (IBAction) setHeight:(id)sender; +{ + NSLog(@"Change Max Zoom height: %ld", [sender intValue]); + [maxZoomedHeight setIntValue: [sender intValue]]; +} + + @end