From 02acfa3fe32009e05f6f7b5fa58658dd0143a20a Mon Sep 17 00:00:00 2001 From: rogerman Date: Wed, 11 Jan 2012 19:59:17 +0000 Subject: [PATCH] Cocoa Port: - Although the Cocoa port looks very similar to the last update, there have been a lot of changes under the hood! Lots of code has moved around, lots of refactoring has been done, and lots of new code was copied from the upcoming Cocoa code base. Due to this, there have been a few collateral improvements as a result. - Convert main.mm back to a plain Obj-C file, and remove all code from it. It has now been reverted back to its original empty form. - Move all app related stuff to appDelegate_legacy.mm/h. - Move all emulation window related stuff to emuWindowDelegate_legacy.mm/h. - Because we're now using xibs, translations have been reworked. The English xib is the base xib, and translations now use .strings files to make modified copies of the English xib at compile time. - Add user interface icons. - Make the Custom Speed Limit Window panel more functional and look nicer. - Add new Tools > Show Support Folder in Finder menu option, which opens DeSmuME's Application Support folder. This exists as a convenience for Lion users. - Remove the View > Constrain Proportions menu option. Now, DeSmuME behaves as if this option is always enabled. - Combine Emulation > Execute and Emulation > Pause into a single menu item. - Status text now gives more user feedback. - Add a sound volume slider to the emulation window. - Remove the Sound menu. - In the main emulation window, you can now click close to unload ROMs and quit the application. - Add ability to save screenshots in JPEG 2000 format. - Add ability to copy a screenshot to the clipboard using Edit > Copy. - BUG #3394244: Fix bug where touch coordinates did not map correctly on rotated screens. --- .../cocoa/DeSmuME.xcodeproj/project.pbxproj | 707 +++++---- desmume/src/cocoa/cocoa_file.h | 1 + desmume/src/cocoa/cocoa_file.mm | 47 + desmume/src/cocoa/cocoa_globals.h | 25 + desmume/src/cocoa/cocoa_util.h | 2 +- .../src/cocoa/images/Icon_Execute_420x420.png | Bin 0 -> 24810 bytes .../src/cocoa/images/Icon_Pause_420x420.png | Bin 0 -> 26208 bytes .../src/cocoa/images/Icon_Speed1x_420x420.png | Bin 0 -> 98726 bytes .../src/cocoa/images/Icon_Speed2x_420x420.png | Bin 0 -> 118654 bytes .../cocoa/images/Icon_VolumeFull_16x16.png | Bin 0 -> 3003 bytes .../cocoa/images/Icon_VolumeMute_16x16.png | Bin 0 -> 2975 bytes .../images/Icon_VolumeOneThird_16x16.png | Bin 0 -> 2877 bytes .../images/Icon_VolumeTwoThird_16x16.png | Bin 0 -> 2937 bytes desmume/src/cocoa/input.h | 32 +- desmume/src/cocoa/input.mm | 161 +- desmume/src/cocoa/main.m | 25 + desmume/src/cocoa/main.mm | 560 ------- desmume/src/cocoa/nds_control.h | 62 +- desmume/src/cocoa/nds_control.mm | 345 +++-- desmume/src/cocoa/preferences.mm | 16 +- .../Chinese.lproj/Localizable.strings | Bin 8418 -> 2886 bytes .../Chinese.lproj/MainMenu (Legacy).strings | Bin 0 -> 26942 bytes .../English.lproj/Localizable.strings | Bin 8320 -> 3446 bytes .../English.lproj/MainMenu (Legacy).strings | Bin 0 -> 27662 bytes .../French.lproj/Localizable.strings | 102 +- .../French.lproj/MainMenu (Legacy).strings | Bin 0 -> 28098 bytes .../Italian.lproj/Localizable.strings | Bin 8750 -> 3562 bytes .../Italian.lproj/MainMenu (Legacy).strings | Bin 0 -> 27966 bytes .../Japanese.lproj/Localizable.strings | Bin 7464 -> 3096 bytes .../Japanese.lproj/MainMenu (Legacy).strings | Bin 0 -> 27292 bytes .../Norwegian.lproj/Localizable.strings | Bin 8980 -> 3602 bytes .../Norwegian.lproj/MainMenu (Legacy).strings | Bin 0 -> 27936 bytes .../Romanian.lproj/Localizable.strings | Bin 9118 -> 3682 bytes .../Romanian.lproj/MainMenu (Legacy).strings | Bin 0 -> 28146 bytes .../cocoa/userinterface/appDelegate_legacy.h | 75 + .../cocoa/userinterface/appDelegate_legacy.mm | 259 ++++ .../userinterface/emuWindowDelegate_legacy.h | 123 ++ .../userinterface/emuWindowDelegate_legacy.mm | 1329 +++++++++++++++++ desmume/src/cocoa/video_output_view.h | 42 + desmume/src/cocoa/video_output_view.mm | 450 +++++- 40 files changed, 3166 insertions(+), 1197 deletions(-) create mode 100644 desmume/src/cocoa/images/Icon_Execute_420x420.png create mode 100644 desmume/src/cocoa/images/Icon_Pause_420x420.png create mode 100644 desmume/src/cocoa/images/Icon_Speed1x_420x420.png create mode 100644 desmume/src/cocoa/images/Icon_Speed2x_420x420.png create mode 100644 desmume/src/cocoa/images/Icon_VolumeFull_16x16.png create mode 100644 desmume/src/cocoa/images/Icon_VolumeMute_16x16.png create mode 100644 desmume/src/cocoa/images/Icon_VolumeOneThird_16x16.png create mode 100644 desmume/src/cocoa/images/Icon_VolumeTwoThird_16x16.png create mode 100644 desmume/src/cocoa/main.m delete mode 100644 desmume/src/cocoa/main.mm create mode 100644 desmume/src/cocoa/translations/Chinese.lproj/MainMenu (Legacy).strings create mode 100644 desmume/src/cocoa/translations/English.lproj/MainMenu (Legacy).strings create mode 100644 desmume/src/cocoa/translations/French.lproj/MainMenu (Legacy).strings create mode 100644 desmume/src/cocoa/translations/Italian.lproj/MainMenu (Legacy).strings create mode 100644 desmume/src/cocoa/translations/Japanese.lproj/MainMenu (Legacy).strings create mode 100644 desmume/src/cocoa/translations/Norwegian.lproj/MainMenu (Legacy).strings create mode 100644 desmume/src/cocoa/translations/Romanian.lproj/MainMenu (Legacy).strings create mode 100644 desmume/src/cocoa/userinterface/appDelegate_legacy.h create mode 100644 desmume/src/cocoa/userinterface/appDelegate_legacy.mm create mode 100644 desmume/src/cocoa/userinterface/emuWindowDelegate_legacy.h create mode 100644 desmume/src/cocoa/userinterface/emuWindowDelegate_legacy.mm diff --git a/desmume/src/cocoa/DeSmuME.xcodeproj/project.pbxproj b/desmume/src/cocoa/DeSmuME.xcodeproj/project.pbxproj index 8db87849a..4ad7293d0 100644 --- a/desmume/src/cocoa/DeSmuME.xcodeproj/project.pbxproj +++ b/desmume/src/cocoa/DeSmuME.xcodeproj/project.pbxproj @@ -24,25 +24,21 @@ 7FA912271426523900E2ABDD /* tinyxmlparser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7FA9121F1426523900E2ABDD /* tinyxmlparser.cpp */; }; 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; 956B96C313DF4CF900FCDCD0 /* slot1_retail_nand.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 956B96C213DF4CF900FCDCD0 /* slot1_retail_nand.cpp */; }; - AB06CB57135B8A4D00E977B3 /* about.m in Sources */ = {isa = PBXBuildFile; fileRef = AB06CB4B135B8A4D00E977B3 /* about.m */; }; + AB0191D314BD72EC004CB612 /* MainMenu (Legacy).xib in Resources */ = {isa = PBXBuildFile; fileRef = AB0191D214BD72EC004CB612 /* MainMenu (Legacy).xib */; }; + AB0191D414BD72EC004CB612 /* MainMenu (Legacy).xib in Resources */ = {isa = PBXBuildFile; fileRef = AB0191D214BD72EC004CB612 /* MainMenu (Legacy).xib */; }; + AB0191D514BD72EC004CB612 /* MainMenu (Legacy).xib in Resources */ = {isa = PBXBuildFile; fileRef = AB0191D214BD72EC004CB612 /* MainMenu (Legacy).xib */; }; + AB0191D614BD72EC004CB612 /* MainMenu (Legacy).xib in Resources */ = {isa = PBXBuildFile; fileRef = AB0191D214BD72EC004CB612 /* MainMenu (Legacy).xib */; }; AB06CB59135B8A4D00E977B3 /* screen_state.m in Sources */ = {isa = PBXBuildFile; fileRef = AB06CB4D135B8A4D00E977B3 /* screen_state.m */; }; AB06CB5A135B8A4D00E977B3 /* cocoa_input.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB06CB4E135B8A4D00E977B3 /* cocoa_input.mm */; }; AB06CB5B135B8A4D00E977B3 /* input.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB06CB4F135B8A4D00E977B3 /* input.mm */; }; - AB06CB5C135B8A4D00E977B3 /* main_window.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB06CB50135B8A4D00E977B3 /* main_window.mm */; }; - AB06CB5D135B8A4D00E977B3 /* main.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB06CB51135B8A4D00E977B3 /* main.mm */; }; AB06CB5E135B8A4D00E977B3 /* nds_control.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB06CB52135B8A4D00E977B3 /* nds_control.mm */; }; AB06CB5F135B8A4D00E977B3 /* preferences.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB06CB53135B8A4D00E977B3 /* preferences.mm */; }; - AB06CB60135B8A4D00E977B3 /* screenshot.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB06CB54135B8A4D00E977B3 /* screenshot.mm */; }; AB06CB62135B8A4D00E977B3 /* video_output_view.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB06CB56135B8A4D00E977B3 /* video_output_view.mm */; }; - AB06CB63135B8A4D00E977B3 /* about.m in Sources */ = {isa = PBXBuildFile; fileRef = AB06CB4B135B8A4D00E977B3 /* about.m */; }; AB06CB65135B8A4D00E977B3 /* screen_state.m in Sources */ = {isa = PBXBuildFile; fileRef = AB06CB4D135B8A4D00E977B3 /* screen_state.m */; }; AB06CB66135B8A4D00E977B3 /* cocoa_input.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB06CB4E135B8A4D00E977B3 /* cocoa_input.mm */; }; AB06CB67135B8A4D00E977B3 /* input.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB06CB4F135B8A4D00E977B3 /* input.mm */; }; - AB06CB68135B8A4D00E977B3 /* main_window.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB06CB50135B8A4D00E977B3 /* main_window.mm */; }; - AB06CB69135B8A4D00E977B3 /* main.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB06CB51135B8A4D00E977B3 /* main.mm */; }; AB06CB6A135B8A4D00E977B3 /* nds_control.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB06CB52135B8A4D00E977B3 /* nds_control.mm */; }; AB06CB6B135B8A4D00E977B3 /* preferences.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB06CB53135B8A4D00E977B3 /* preferences.mm */; }; - AB06CB6C135B8A4D00E977B3 /* screenshot.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB06CB54135B8A4D00E977B3 /* screenshot.mm */; }; AB06CB6E135B8A4D00E977B3 /* video_output_view.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB06CB56135B8A4D00E977B3 /* video_output_view.mm */; }; AB06CCD6135B8AA200E977B3 /* AppKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 29B97324FDCFA39411CA2CEA /* AppKit.framework */; }; AB06CCD7135B8AA300E977B3 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 29B97325FDCFA39411CA2CEA /* Foundation.framework */; }; @@ -223,21 +219,13 @@ AB06CE94135B8AEE00E977B3 /* task.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB06CE0C135B8AED00E977B3 /* task.cpp */; }; AB06CE95135B8AEE00E977B3 /* vfat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB06CE0F135B8AED00E977B3 /* vfat.cpp */; }; AB06CE96135B8AEE00E977B3 /* xstring.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB06CE11135B8AED00E977B3 /* xstring.cpp */; }; - AB06CEC9135B8E0B00E977B3 /* rom_info.m in Sources */ = {isa = PBXBuildFile; fileRef = AB06CEC6135B8E0B00E977B3 /* rom_info.m */; }; - AB06CECA135B8E0B00E977B3 /* speed_limit_selection_window.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB06CEC8135B8E0B00E977B3 /* speed_limit_selection_window.mm */; }; - AB06CECB135B8E0B00E977B3 /* rom_info.m in Sources */ = {isa = PBXBuildFile; fileRef = AB06CEC6135B8E0B00E977B3 /* rom_info.m */; }; - AB06CECC135B8E0B00E977B3 /* speed_limit_selection_window.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB06CEC8135B8E0B00E977B3 /* speed_limit_selection_window.mm */; }; AB0A0D1E14AACACC00E83E91 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AB0A0D1D14AACACC00E83E91 /* libz.dylib */; }; AB0A0D3714AACE9500E83E91 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 1F4B55090F53924500C8B514 /* Localizable.strings */; }; - AB0A0D3A14AACE9500E83E91 /* about.m in Sources */ = {isa = PBXBuildFile; fileRef = AB06CB4B135B8A4D00E977B3 /* about.m */; }; AB0A0D3C14AACE9500E83E91 /* screen_state.m in Sources */ = {isa = PBXBuildFile; fileRef = AB06CB4D135B8A4D00E977B3 /* screen_state.m */; }; AB0A0D3D14AACE9500E83E91 /* cocoa_input.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB06CB4E135B8A4D00E977B3 /* cocoa_input.mm */; }; AB0A0D3E14AACE9500E83E91 /* input.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB06CB4F135B8A4D00E977B3 /* input.mm */; }; - AB0A0D3F14AACE9500E83E91 /* main_window.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB06CB50135B8A4D00E977B3 /* main_window.mm */; }; - AB0A0D4014AACE9500E83E91 /* main.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB06CB51135B8A4D00E977B3 /* main.mm */; }; AB0A0D4114AACE9500E83E91 /* nds_control.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB06CB52135B8A4D00E977B3 /* nds_control.mm */; }; AB0A0D4214AACE9500E83E91 /* preferences.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB06CB53135B8A4D00E977B3 /* preferences.mm */; }; - AB0A0D4314AACE9500E83E91 /* screenshot.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB06CB54135B8A4D00E977B3 /* screenshot.mm */; }; AB0A0D4514AACE9500E83E91 /* video_output_view.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB06CB56135B8A4D00E977B3 /* video_output_view.mm */; }; AB0A0D4614AACE9500E83E91 /* addons.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB06CD0E135B8ACE00E977B3 /* addons.cpp */; }; AB0A0D4714AACE9500E83E91 /* arm_instructions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB06CD10135B8ACE00E977B3 /* arm_instructions.cpp */; }; @@ -322,8 +310,6 @@ AB0A0D9614AACE9500E83E91 /* task.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB06CE0C135B8AED00E977B3 /* task.cpp */; }; AB0A0D9714AACE9500E83E91 /* vfat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB06CE0F135B8AED00E977B3 /* vfat.cpp */; }; AB0A0D9814AACE9500E83E91 /* xstring.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB06CE11135B8AED00E977B3 /* xstring.cpp */; }; - AB0A0D9914AACE9500E83E91 /* rom_info.m in Sources */ = {isa = PBXBuildFile; fileRef = AB06CEC6135B8E0B00E977B3 /* rom_info.m */; }; - AB0A0D9A14AACE9500E83E91 /* speed_limit_selection_window.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB06CEC8135B8E0B00E977B3 /* speed_limit_selection_window.mm */; }; AB0A0D9C14AACE9500E83E91 /* slot1_retail_nand.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 956B96C213DF4CF900FCDCD0 /* slot1_retail_nand.cpp */; }; AB0A0D9D14AACE9500E83E91 /* tinystr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7FA9121A1426523900E2ABDD /* tinystr.cpp */; }; AB0A0D9E14AACE9500E83E91 /* tinyxml.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7FA9121C1426523900E2ABDD /* tinyxml.cpp */; }; @@ -375,19 +361,59 @@ AB46781714ABD4890002FF94 /* AppIcon_NintendoDS_ROM.icns in Resources */ = {isa = PBXBuildFile; fileRef = AB46780714ABD4890002FF94 /* AppIcon_NintendoDS_ROM.icns */; }; AB46781814ABD4890002FF94 /* AppIcon_ROMSave.icns in Resources */ = {isa = PBXBuildFile; fileRef = AB46780814ABD4890002FF94 /* AppIcon_ROMSave.icns */; }; AB46781914ABD4890002FF94 /* AppIcon_SaveState.icns in Resources */ = {isa = PBXBuildFile; fileRef = AB46780914ABD4890002FF94 /* AppIcon_SaveState.icns */; }; + AB73B12B14BDA01C00F49C92 /* appDelegate_legacy.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB73B12914BDA01C00F49C92 /* appDelegate_legacy.mm */; }; + AB73B12C14BDA01C00F49C92 /* emuWindowDelegate_legacy.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB73B12A14BDA01C00F49C92 /* emuWindowDelegate_legacy.mm */; }; + AB73B12D14BDA01C00F49C92 /* appDelegate_legacy.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB73B12914BDA01C00F49C92 /* appDelegate_legacy.mm */; }; + AB73B12E14BDA01C00F49C92 /* emuWindowDelegate_legacy.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB73B12A14BDA01C00F49C92 /* emuWindowDelegate_legacy.mm */; }; + AB73B12F14BDA01C00F49C92 /* appDelegate_legacy.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB73B12914BDA01C00F49C92 /* appDelegate_legacy.mm */; }; + AB73B13014BDA01C00F49C92 /* emuWindowDelegate_legacy.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB73B12A14BDA01C00F49C92 /* emuWindowDelegate_legacy.mm */; }; + AB73B13114BDA01C00F49C92 /* appDelegate_legacy.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB73B12914BDA01C00F49C92 /* appDelegate_legacy.mm */; }; + AB73B13214BDA01C00F49C92 /* emuWindowDelegate_legacy.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB73B12A14BDA01C00F49C92 /* emuWindowDelegate_legacy.mm */; }; + AB73B1C514BDA94800F49C92 /* Icon_Execute_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB73B1C114BDA94800F49C92 /* Icon_Execute_420x420.png */; }; + AB73B1C614BDA94800F49C92 /* Icon_Pause_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB73B1C214BDA94800F49C92 /* Icon_Pause_420x420.png */; }; + AB73B1C714BDA94800F49C92 /* Icon_Speed1x_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB73B1C314BDA94800F49C92 /* Icon_Speed1x_420x420.png */; }; + AB73B1C814BDA94800F49C92 /* Icon_Speed2x_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB73B1C414BDA94800F49C92 /* Icon_Speed2x_420x420.png */; }; + AB73B1C914BDA94800F49C92 /* Icon_Execute_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB73B1C114BDA94800F49C92 /* Icon_Execute_420x420.png */; }; + AB73B1CA14BDA94800F49C92 /* Icon_Pause_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB73B1C214BDA94800F49C92 /* Icon_Pause_420x420.png */; }; + AB73B1CB14BDA94800F49C92 /* Icon_Speed1x_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB73B1C314BDA94800F49C92 /* Icon_Speed1x_420x420.png */; }; + AB73B1CC14BDA94800F49C92 /* Icon_Speed2x_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB73B1C414BDA94800F49C92 /* Icon_Speed2x_420x420.png */; }; + AB73B1CD14BDA94800F49C92 /* Icon_Execute_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB73B1C114BDA94800F49C92 /* Icon_Execute_420x420.png */; }; + AB73B1CE14BDA94800F49C92 /* Icon_Pause_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB73B1C214BDA94800F49C92 /* Icon_Pause_420x420.png */; }; + AB73B1CF14BDA94800F49C92 /* Icon_Speed1x_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB73B1C314BDA94800F49C92 /* Icon_Speed1x_420x420.png */; }; + AB73B1D014BDA94800F49C92 /* Icon_Speed2x_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB73B1C414BDA94800F49C92 /* Icon_Speed2x_420x420.png */; }; + AB73B1D114BDA94800F49C92 /* Icon_Execute_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB73B1C114BDA94800F49C92 /* Icon_Execute_420x420.png */; }; + AB73B1D214BDA94800F49C92 /* Icon_Pause_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB73B1C214BDA94800F49C92 /* Icon_Pause_420x420.png */; }; + AB73B1D314BDA94800F49C92 /* Icon_Speed1x_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB73B1C314BDA94800F49C92 /* Icon_Speed1x_420x420.png */; }; + AB73B1D414BDA94800F49C92 /* Icon_Speed2x_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB73B1C414BDA94800F49C92 /* Icon_Speed2x_420x420.png */; }; AB8FE37614B652EC009E20B1 /* cocoa_util.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB8FE37514B652EC009E20B1 /* cocoa_util.mm */; }; AB8FE37714B652EC009E20B1 /* cocoa_util.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB8FE37514B652EC009E20B1 /* cocoa_util.mm */; }; AB8FE37814B652EC009E20B1 /* cocoa_util.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB8FE37514B652EC009E20B1 /* cocoa_util.mm */; }; AB8FE37914B652EC009E20B1 /* cocoa_util.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB8FE37514B652EC009E20B1 /* cocoa_util.mm */; }; AB8FE48C14B6657D009E20B1 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AB0A0D1D14AACACC00E83E91 /* libz.dylib */; }; - ABBF04BD14B519A500E505A0 /* MainMenu (Legacy).xib in Resources */ = {isa = PBXBuildFile; fileRef = ABBF04BC14B519A500E505A0 /* MainMenu (Legacy).xib */; }; - ABBF04BE14B519A500E505A0 /* MainMenu (Legacy).xib in Resources */ = {isa = PBXBuildFile; fileRef = ABBF04BC14B519A500E505A0 /* MainMenu (Legacy).xib */; }; - ABBF04BF14B519A500E505A0 /* MainMenu (Legacy).xib in Resources */ = {isa = PBXBuildFile; fileRef = ABBF04BC14B519A500E505A0 /* MainMenu (Legacy).xib */; }; - ABBF04C014B519A500E505A0 /* MainMenu (Legacy).xib in Resources */ = {isa = PBXBuildFile; fileRef = ABBF04BC14B519A500E505A0 /* MainMenu (Legacy).xib */; }; + ABAC890914B7943E001B299F /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = ABAC890814B7943E001B299F /* main.m */; }; + ABAC890A14B7943E001B299F /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = ABAC890814B7943E001B299F /* main.m */; }; + ABAC890B14B7943E001B299F /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = ABAC890814B7943E001B299F /* main.m */; }; + ABAC890C14B7943E001B299F /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = ABAC890814B7943E001B299F /* main.m */; }; ABBF053014B5436E00E505A0 /* cocoa_file.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABBF052F14B5436E00E505A0 /* cocoa_file.mm */; }; ABBF053114B5436E00E505A0 /* cocoa_file.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABBF052F14B5436E00E505A0 /* cocoa_file.mm */; }; ABBF053214B5436E00E505A0 /* cocoa_file.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABBF052F14B5436E00E505A0 /* cocoa_file.mm */; }; ABBF053314B5436E00E505A0 /* cocoa_file.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABBF052F14B5436E00E505A0 /* cocoa_file.mm */; }; + ABEFD81D14BB9E65004DB9DC /* Icon_VolumeFull_16x16.png in Resources */ = {isa = PBXBuildFile; fileRef = ABEFD81914BB9E65004DB9DC /* Icon_VolumeFull_16x16.png */; }; + ABEFD81E14BB9E65004DB9DC /* Icon_VolumeMute_16x16.png in Resources */ = {isa = PBXBuildFile; fileRef = ABEFD81A14BB9E65004DB9DC /* Icon_VolumeMute_16x16.png */; }; + ABEFD81F14BB9E65004DB9DC /* Icon_VolumeOneThird_16x16.png in Resources */ = {isa = PBXBuildFile; fileRef = ABEFD81B14BB9E65004DB9DC /* Icon_VolumeOneThird_16x16.png */; }; + ABEFD82014BB9E65004DB9DC /* Icon_VolumeTwoThird_16x16.png in Resources */ = {isa = PBXBuildFile; fileRef = ABEFD81C14BB9E65004DB9DC /* Icon_VolumeTwoThird_16x16.png */; }; + ABEFD82114BB9E65004DB9DC /* Icon_VolumeFull_16x16.png in Resources */ = {isa = PBXBuildFile; fileRef = ABEFD81914BB9E65004DB9DC /* Icon_VolumeFull_16x16.png */; }; + ABEFD82214BB9E65004DB9DC /* Icon_VolumeMute_16x16.png in Resources */ = {isa = PBXBuildFile; fileRef = ABEFD81A14BB9E65004DB9DC /* Icon_VolumeMute_16x16.png */; }; + ABEFD82314BB9E65004DB9DC /* Icon_VolumeOneThird_16x16.png in Resources */ = {isa = PBXBuildFile; fileRef = ABEFD81B14BB9E65004DB9DC /* Icon_VolumeOneThird_16x16.png */; }; + ABEFD82414BB9E65004DB9DC /* Icon_VolumeTwoThird_16x16.png in Resources */ = {isa = PBXBuildFile; fileRef = ABEFD81C14BB9E65004DB9DC /* Icon_VolumeTwoThird_16x16.png */; }; + ABEFD82514BB9E65004DB9DC /* Icon_VolumeFull_16x16.png in Resources */ = {isa = PBXBuildFile; fileRef = ABEFD81914BB9E65004DB9DC /* Icon_VolumeFull_16x16.png */; }; + ABEFD82614BB9E65004DB9DC /* Icon_VolumeMute_16x16.png in Resources */ = {isa = PBXBuildFile; fileRef = ABEFD81A14BB9E65004DB9DC /* Icon_VolumeMute_16x16.png */; }; + ABEFD82714BB9E65004DB9DC /* Icon_VolumeOneThird_16x16.png in Resources */ = {isa = PBXBuildFile; fileRef = ABEFD81B14BB9E65004DB9DC /* Icon_VolumeOneThird_16x16.png */; }; + ABEFD82814BB9E65004DB9DC /* Icon_VolumeTwoThird_16x16.png in Resources */ = {isa = PBXBuildFile; fileRef = ABEFD81C14BB9E65004DB9DC /* Icon_VolumeTwoThird_16x16.png */; }; + ABEFD82914BB9E65004DB9DC /* Icon_VolumeFull_16x16.png in Resources */ = {isa = PBXBuildFile; fileRef = ABEFD81914BB9E65004DB9DC /* Icon_VolumeFull_16x16.png */; }; + ABEFD82A14BB9E65004DB9DC /* Icon_VolumeMute_16x16.png in Resources */ = {isa = PBXBuildFile; fileRef = ABEFD81A14BB9E65004DB9DC /* Icon_VolumeMute_16x16.png */; }; + ABEFD82B14BB9E65004DB9DC /* Icon_VolumeOneThird_16x16.png in Resources */ = {isa = PBXBuildFile; fileRef = ABEFD81B14BB9E65004DB9DC /* Icon_VolumeOneThird_16x16.png */; }; + ABEFD82C14BB9E65004DB9DC /* Icon_VolumeTwoThird_16x16.png in Resources */ = {isa = PBXBuildFile; fileRef = ABEFD81C14BB9E65004DB9DC /* Icon_VolumeTwoThird_16x16.png */; }; ABF4007714B4F19200578AE7 /* AppIcon_ROMCheats.icns in Resources */ = {isa = PBXBuildFile; fileRef = ABF4007614B4F19200578AE7 /* AppIcon_ROMCheats.icns */; }; ABF4007814B4F19200578AE7 /* AppIcon_ROMCheats.icns in Resources */ = {isa = PBXBuildFile; fileRef = ABF4007614B4F19200578AE7 /* AppIcon_ROMCheats.icns */; }; ABF4007914B4F19200578AE7 /* AppIcon_ROMCheats.icns in Resources */ = {isa = PBXBuildFile; fileRef = ABF4007614B4F19200578AE7 /* AppIcon_ROMCheats.icns */; }; @@ -397,15 +423,11 @@ ABF4008114B4F1C000578AE7 /* sndOSX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABF4007E14B4F1C000578AE7 /* sndOSX.cpp */; }; ABF4008214B4F1C000578AE7 /* sndOSX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABF4007E14B4F1C000578AE7 /* sndOSX.cpp */; }; ABFE4242143E32F0009A3CCE /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 1F4B55090F53924500C8B514 /* Localizable.strings */; }; - ABFE4245143E32F0009A3CCE /* about.m in Sources */ = {isa = PBXBuildFile; fileRef = AB06CB4B135B8A4D00E977B3 /* about.m */; }; ABFE4247143E32F0009A3CCE /* screen_state.m in Sources */ = {isa = PBXBuildFile; fileRef = AB06CB4D135B8A4D00E977B3 /* screen_state.m */; }; ABFE4248143E32F0009A3CCE /* cocoa_input.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB06CB4E135B8A4D00E977B3 /* cocoa_input.mm */; }; ABFE4249143E32F0009A3CCE /* input.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB06CB4F135B8A4D00E977B3 /* input.mm */; }; - ABFE424A143E32F0009A3CCE /* main_window.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB06CB50135B8A4D00E977B3 /* main_window.mm */; }; - ABFE424B143E32F0009A3CCE /* main.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB06CB51135B8A4D00E977B3 /* main.mm */; }; ABFE424C143E32F0009A3CCE /* nds_control.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB06CB52135B8A4D00E977B3 /* nds_control.mm */; }; ABFE424D143E32F0009A3CCE /* preferences.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB06CB53135B8A4D00E977B3 /* preferences.mm */; }; - ABFE424E143E32F0009A3CCE /* screenshot.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB06CB54135B8A4D00E977B3 /* screenshot.mm */; }; ABFE4250143E32F0009A3CCE /* video_output_view.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB06CB56135B8A4D00E977B3 /* video_output_view.mm */; }; ABFE4251143E32F0009A3CCE /* addons.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB06CD0E135B8ACE00E977B3 /* addons.cpp */; }; ABFE4252143E32F0009A3CCE /* arm_instructions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB06CD10135B8ACE00E977B3 /* arm_instructions.cpp */; }; @@ -490,8 +512,6 @@ ABFE42A1143E32F0009A3CCE /* task.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB06CE0C135B8AED00E977B3 /* task.cpp */; }; ABFE42A2143E32F0009A3CCE /* vfat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB06CE0F135B8AED00E977B3 /* vfat.cpp */; }; ABFE42A3143E32F0009A3CCE /* xstring.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB06CE11135B8AED00E977B3 /* xstring.cpp */; }; - ABFE42A4143E32F0009A3CCE /* rom_info.m in Sources */ = {isa = PBXBuildFile; fileRef = AB06CEC6135B8E0B00E977B3 /* rom_info.m */; }; - ABFE42A5143E32F0009A3CCE /* speed_limit_selection_window.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB06CEC8135B8E0B00E977B3 /* speed_limit_selection_window.mm */; }; ABFE42A7143E32F0009A3CCE /* slot1_retail_nand.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 956B96C213DF4CF900FCDCD0 /* slot1_retail_nand.cpp */; }; ABFE42A8143E32F0009A3CCE /* tinystr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7FA9121A1426523900E2ABDD /* tinystr.cpp */; }; ABFE42A9143E32F0009A3CCE /* tinyxml.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7FA9121C1426523900E2ABDD /* tinyxml.cpp */; }; @@ -523,24 +543,24 @@ 7FA9121E1426523900E2ABDD /* tinyxmlerror.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tinyxmlerror.cpp; sourceTree = ""; }; 7FA9121F1426523900E2ABDD /* tinyxmlparser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tinyxmlparser.cpp; sourceTree = ""; }; 956B96C213DF4CF900FCDCD0 /* slot1_retail_nand.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = slot1_retail_nand.cpp; path = ../addons/slot1_retail_nand.cpp; sourceTree = SOURCE_ROOT; }; + AB0191D714BD72FC004CB612 /* French */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = French; path = "translations/French.lproj/MainMenu (Legacy).xib"; sourceTree = ""; }; + AB0191D814BD72FF004CB612 /* Italian */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Italian; path = "translations/Italian.lproj/MainMenu (Legacy).xib"; sourceTree = ""; }; + AB0191E614BD741B004CB612 /* Japanese */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Japanese; path = "translations/Japanese.lproj/MainMenu (Legacy).xib"; sourceTree = ""; }; + AB0191E714BD741F004CB612 /* Chinese */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Chinese; path = "translations/Chinese.lproj/MainMenu (Legacy).xib"; sourceTree = ""; }; + AB0191E814BD7423004CB612 /* Norwegian */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Norwegian; path = "translations/Norwegian.lproj/MainMenu (Legacy).xib"; sourceTree = ""; }; + AB0191E914BD7425004CB612 /* Romanian */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Romanian; path = "translations/Romanian.lproj/MainMenu (Legacy).xib"; sourceTree = ""; }; AB06CB41135B8A4D00E977B3 /* cocoa_input.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cocoa_input.h; sourceTree = ""; }; AB06CB43135B8A4D00E977B3 /* input.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = input.h; sourceTree = ""; }; - AB06CB44135B8A4D00E977B3 /* main_window.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = main_window.h; sourceTree = ""; }; AB06CB45135B8A4D00E977B3 /* nds_control.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = nds_control.h; sourceTree = ""; }; AB06CB46135B8A4D00E977B3 /* preferences.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = preferences.h; sourceTree = ""; }; AB06CB47135B8A4D00E977B3 /* screen_state.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = screen_state.h; sourceTree = ""; }; - AB06CB48135B8A4D00E977B3 /* screenshot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = screenshot.h; sourceTree = ""; }; AB06CB49135B8A4D00E977B3 /* sndOSX.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sndOSX.h; sourceTree = ""; }; AB06CB4A135B8A4D00E977B3 /* video_output_view.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = video_output_view.h; sourceTree = ""; }; - AB06CB4B135B8A4D00E977B3 /* about.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = about.m; sourceTree = ""; }; AB06CB4D135B8A4D00E977B3 /* screen_state.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = screen_state.m; sourceTree = ""; }; AB06CB4E135B8A4D00E977B3 /* cocoa_input.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = cocoa_input.mm; sourceTree = ""; }; AB06CB4F135B8A4D00E977B3 /* input.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = input.mm; sourceTree = ""; }; - AB06CB50135B8A4D00E977B3 /* main_window.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = main_window.mm; sourceTree = ""; }; - AB06CB51135B8A4D00E977B3 /* main.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = main.mm; sourceTree = ""; }; AB06CB52135B8A4D00E977B3 /* nds_control.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = nds_control.mm; sourceTree = ""; }; AB06CB53135B8A4D00E977B3 /* preferences.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = preferences.mm; sourceTree = ""; }; - AB06CB54135B8A4D00E977B3 /* screenshot.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = screenshot.mm; sourceTree = ""; }; AB06CB56135B8A4D00E977B3 /* video_output_view.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = video_output_view.mm; sourceTree = ""; }; AB06CCD5135B8A9B00E977B3 /* DeSmuME_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DeSmuME_Prefix.pch; sourceTree = ""; }; AB06CCD8135B8ACE00E977B3 /* addons.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = addons.h; path = ../addons.h; sourceTree = SOURCE_ROOT; }; @@ -736,10 +756,6 @@ AB06CE10135B8AED00E977B3 /* vfat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vfat.h; sourceTree = ""; }; AB06CE11135B8AED00E977B3 /* xstring.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = xstring.cpp; sourceTree = ""; }; AB06CE12135B8AED00E977B3 /* xstring.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = xstring.h; sourceTree = ""; }; - AB06CEC5135B8E0B00E977B3 /* rom_info.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rom_info.h; sourceTree = ""; }; - AB06CEC6135B8E0B00E977B3 /* rom_info.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = rom_info.m; sourceTree = ""; }; - AB06CEC7135B8E0B00E977B3 /* speed_limit_selection_window.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = speed_limit_selection_window.h; sourceTree = ""; }; - AB06CEC8135B8E0B00E977B3 /* speed_limit_selection_window.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = speed_limit_selection_window.mm; sourceTree = ""; }; AB0A0D1D14AACACC00E83E91 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; }; AB0A0DAC14AACE9500E83E91 /* DeSmuME.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = DeSmuME.app; sourceTree = BUILT_PRODUCTS_DIR; }; AB0A0DDE14AAD26600E83E91 /* Info (Debug).plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "Info (Debug).plist"; sourceTree = ""; }; @@ -753,21 +769,28 @@ AB46780714ABD4890002FF94 /* AppIcon_NintendoDS_ROM.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = AppIcon_NintendoDS_ROM.icns; sourceTree = ""; }; AB46780814ABD4890002FF94 /* AppIcon_ROMSave.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = AppIcon_ROMSave.icns; sourceTree = ""; }; AB46780914ABD4890002FF94 /* AppIcon_SaveState.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = AppIcon_SaveState.icns; sourceTree = ""; }; + AB73B12714BDA01C00F49C92 /* appDelegate_legacy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = appDelegate_legacy.h; path = userinterface/appDelegate_legacy.h; sourceTree = ""; }; + AB73B12814BDA01C00F49C92 /* emuWindowDelegate_legacy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = emuWindowDelegate_legacy.h; path = userinterface/emuWindowDelegate_legacy.h; sourceTree = ""; }; + AB73B12914BDA01C00F49C92 /* appDelegate_legacy.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = appDelegate_legacy.mm; path = userinterface/appDelegate_legacy.mm; sourceTree = ""; }; + AB73B12A14BDA01C00F49C92 /* emuWindowDelegate_legacy.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = emuWindowDelegate_legacy.mm; path = userinterface/emuWindowDelegate_legacy.mm; sourceTree = ""; }; + AB73B1C114BDA94800F49C92 /* Icon_Execute_420x420.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_Execute_420x420.png; path = images/Icon_Execute_420x420.png; sourceTree = ""; }; + AB73B1C214BDA94800F49C92 /* Icon_Pause_420x420.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_Pause_420x420.png; path = images/Icon_Pause_420x420.png; sourceTree = ""; }; + AB73B1C314BDA94800F49C92 /* Icon_Speed1x_420x420.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_Speed1x_420x420.png; path = images/Icon_Speed1x_420x420.png; sourceTree = ""; }; + AB73B1C414BDA94800F49C92 /* Icon_Speed2x_420x420.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_Speed2x_420x420.png; path = images/Icon_Speed2x_420x420.png; sourceTree = ""; }; AB8FE30A14B647D6009E20B1 /* macosx_10_4_compat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = macosx_10_4_compat.h; sourceTree = ""; }; AB8FE37414B652EC009E20B1 /* cocoa_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cocoa_util.h; sourceTree = ""; }; AB8FE37514B652EC009E20B1 /* cocoa_util.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = cocoa_util.mm; sourceTree = ""; }; + ABAC890814B7943E001B299F /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; ABBF045E14B5144D00E505A0 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = "translations/English.lproj/MainMenu (Legacy).xib"; sourceTree = ""; }; - ABBF04C114B519CD00E505A0 /* French */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = French; path = "translations/French.lproj/MainMenu (Legacy).xib"; sourceTree = ""; }; - ABBF04C314B519DF00E505A0 /* Italian */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Italian; path = "translations/Italian.lproj/MainMenu (Legacy).xib"; sourceTree = ""; }; - ABBF04C414B519E400E505A0 /* Japanese */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Japanese; path = "translations/Japanese.lproj/MainMenu (Legacy).xib"; sourceTree = ""; }; - ABBF04C514B519EA00E505A0 /* Chinese */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Chinese; path = "translations/Chinese.lproj/MainMenu (Legacy).xib"; sourceTree = ""; }; - ABBF04C614B519F000E505A0 /* Norwegian */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Norwegian; path = "translations/Norwegian.lproj/MainMenu (Legacy).xib"; sourceTree = ""; }; - ABBF04C714B519F500E505A0 /* Romanian */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Romanian; path = "translations/Romanian.lproj/MainMenu (Legacy).xib"; sourceTree = ""; }; ABBF04CB14B51BBB00E505A0 /* Chinese */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Chinese; path = translations/Chinese.lproj/Localizable.strings; sourceTree = ""; }; ABBF04CC14B51BC300E505A0 /* Norwegian */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Norwegian; path = translations/Norwegian.lproj/Localizable.strings; sourceTree = ""; }; ABBF04CD14B51BC900E505A0 /* Romanian */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Romanian; path = translations/Romanian.lproj/Localizable.strings; sourceTree = ""; }; ABBF052F14B5436E00E505A0 /* cocoa_file.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = cocoa_file.mm; sourceTree = ""; }; ABBF053B14B543B600E505A0 /* cocoa_file.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cocoa_file.h; sourceTree = ""; }; + ABEFD81914BB9E65004DB9DC /* Icon_VolumeFull_16x16.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_VolumeFull_16x16.png; path = images/Icon_VolumeFull_16x16.png; sourceTree = ""; }; + ABEFD81A14BB9E65004DB9DC /* Icon_VolumeMute_16x16.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_VolumeMute_16x16.png; path = images/Icon_VolumeMute_16x16.png; sourceTree = ""; }; + ABEFD81B14BB9E65004DB9DC /* Icon_VolumeOneThird_16x16.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_VolumeOneThird_16x16.png; path = images/Icon_VolumeOneThird_16x16.png; sourceTree = ""; }; + ABEFD81C14BB9E65004DB9DC /* Icon_VolumeTwoThird_16x16.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_VolumeTwoThird_16x16.png; path = images/Icon_VolumeTwoThird_16x16.png; sourceTree = ""; }; ABF4007614B4F19200578AE7 /* AppIcon_ROMCheats.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = AppIcon_ROMCheats.icns; sourceTree = ""; }; ABF4007E14B4F1C000578AE7 /* sndOSX.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = sndOSX.cpp; sourceTree = ""; }; ABF95B4714B4F4FC007912B8 /* cocoa_globals.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cocoa_globals.h; sourceTree = ""; }; @@ -832,7 +855,7 @@ 080E96DDFE201D6D7F000001 /* Cocoa Port */ = { isa = PBXGroup; children = ( - AB06CEC4135B8E0B00E977B3 /* dialogs */, + ABC3ADEC14B7DC6E00D5B13D /* userinterface */, ABF4007E14B4F1C000578AE7 /* sndOSX.cpp */, ABBF053B14B543B600E505A0 /* cocoa_file.h */, ABF95B4714B4F4FC007912B8 /* cocoa_globals.h */, @@ -840,24 +863,18 @@ AB8FE37414B652EC009E20B1 /* cocoa_util.h */, AB06CB43135B8A4D00E977B3 /* input.h */, AB8FE30A14B647D6009E20B1 /* macosx_10_4_compat.h */, - AB06CB44135B8A4D00E977B3 /* main_window.h */, AB06CB45135B8A4D00E977B3 /* nds_control.h */, AB06CB46135B8A4D00E977B3 /* preferences.h */, AB06CB47135B8A4D00E977B3 /* screen_state.h */, - AB06CB48135B8A4D00E977B3 /* screenshot.h */, AB06CB49135B8A4D00E977B3 /* sndOSX.h */, AB06CB4A135B8A4D00E977B3 /* video_output_view.h */, - AB06CB4B135B8A4D00E977B3 /* about.m */, AB06CB4D135B8A4D00E977B3 /* screen_state.m */, ABBF052F14B5436E00E505A0 /* cocoa_file.mm */, AB06CB4E135B8A4D00E977B3 /* cocoa_input.mm */, AB8FE37514B652EC009E20B1 /* cocoa_util.mm */, AB06CB4F135B8A4D00E977B3 /* input.mm */, - AB06CB51135B8A4D00E977B3 /* main.mm */, - AB06CB50135B8A4D00E977B3 /* main_window.mm */, AB06CB52135B8A4D00E977B3 /* nds_control.mm */, AB06CB53135B8A4D00E977B3 /* preferences.mm */, - AB06CB54135B8A4D00E977B3 /* screenshot.mm */, AB06CB56135B8A4D00E977B3 /* video_output_view.mm */, ); name = "Cocoa Port"; @@ -899,10 +916,10 @@ children = ( 080E96DDFE201D6D7F000001 /* Cocoa Port */, 29B97315FDCFA39411CA2CEA /* Core */, - 29B97317FDCFA39411CA2CEA /* Resources */, 29B97323FDCFA39411CA2CEA /* Frameworks */, AB06CB79135B8A7600E977B3 /* Other Sources */, 19C28FACFE9D520D11CA2CBB /* Products */, + 29B97317FDCFA39411CA2CEA /* Resources */, ); name = DeSmuME; sourceTree = ""; @@ -1026,7 +1043,7 @@ children = ( AB4677FA14ABD4790002FF94 /* Images */, 1F4B55090F53924500C8B514 /* Localizable.strings */, - ABBF04BC14B519A500E505A0 /* MainMenu (Legacy).xib */, + AB0191D214BD72EC004CB612 /* MainMenu (Legacy).xib */, 72C000010D9D59E60046B7EA /* Info.plist */, AB0A0DDE14AAD26600E83E91 /* Info (Debug).plist */, 72C000020D9D59E60046B7EA /* InfoPlist.strings */, @@ -1066,6 +1083,7 @@ AB06CB79135B8A7600E977B3 /* Other Sources */ = { isa = PBXGroup; children = ( + ABAC890814B7943E001B299F /* main.m */, AB06CCD5135B8A9B00E977B3 /* DeSmuME_Prefix.pch */, ); name = "Other Sources"; @@ -1228,21 +1246,18 @@ path = libfat; sourceTree = ""; }; - AB06CEC4135B8E0B00E977B3 /* dialogs */ = { - isa = PBXGroup; - children = ( - AB06CEC5135B8E0B00E977B3 /* rom_info.h */, - AB06CEC6135B8E0B00E977B3 /* rom_info.m */, - AB06CEC7135B8E0B00E977B3 /* speed_limit_selection_window.h */, - AB06CEC8135B8E0B00E977B3 /* speed_limit_selection_window.mm */, - ); - path = dialogs; - sourceTree = ""; - }; AB4677FA14ABD4790002FF94 /* Images */ = { isa = PBXGroup; children = ( AB46782914ABD4BF0002FF94 /* App Icons */, + ABEFD81914BB9E65004DB9DC /* Icon_VolumeFull_16x16.png */, + ABEFD81A14BB9E65004DB9DC /* Icon_VolumeMute_16x16.png */, + ABEFD81B14BB9E65004DB9DC /* Icon_VolumeOneThird_16x16.png */, + ABEFD81C14BB9E65004DB9DC /* Icon_VolumeTwoThird_16x16.png */, + AB73B1C114BDA94800F49C92 /* Icon_Execute_420x420.png */, + AB73B1C214BDA94800F49C92 /* Icon_Pause_420x420.png */, + AB73B1C314BDA94800F49C92 /* Icon_Speed1x_420x420.png */, + AB73B1C414BDA94800F49C92 /* Icon_Speed2x_420x420.png */, ); name = Images; sourceTree = ""; @@ -1259,6 +1274,17 @@ name = "App Icons"; sourceTree = ""; }; + ABC3ADEC14B7DC6E00D5B13D /* userinterface */ = { + isa = PBXGroup; + children = ( + AB73B12714BDA01C00F49C92 /* appDelegate_legacy.h */, + AB73B12814BDA01C00F49C92 /* emuWindowDelegate_legacy.h */, + AB73B12914BDA01C00F49C92 /* appDelegate_legacy.mm */, + AB73B12A14BDA01C00F49C92 /* emuWindowDelegate_legacy.mm */, + ); + name = userinterface; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -1266,6 +1292,7 @@ isa = PBXNativeTarget; buildConfigurationList = 1EFD51BB0F892B1A00B029BB /* Build configuration list for PBXNativeTarget "DeSmuME_gdbstub" */; buildPhases = ( + AB73B05614BD7A8B00F49C92 /* ShellScript */, 1EFD51780F892B1A00B029BB /* Resources */, 1EFD517C0F892B1A00B029BB /* Sources */, 1EFD51B60F892B1A00B029BB /* Frameworks */, @@ -1284,6 +1311,7 @@ isa = PBXNativeTarget; buildConfigurationList = C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "DeSmuME (v10.5 Leopard)" */; buildPhases = ( + AB73B04F14BD79CB00F49C92 /* ShellScript */, 8D1107290486CEB800E47090 /* Resources */, 8D11072C0486CEB800E47090 /* Sources */, 8D11072E0486CEB800E47090 /* Frameworks */, @@ -1302,6 +1330,7 @@ isa = PBXNativeTarget; buildConfigurationList = AB0A0DA914AACE9500E83E91 /* Build configuration list for PBXNativeTarget "DeSmuME (v10.4 Tiger)" */; buildPhases = ( + AB01918414BD6A0A004CB612 /* ShellScript */, AB0A0D3514AACE9500E83E91 /* Resources */, AB0A0D3914AACE9500E83E91 /* Sources */, AB0A0DA114AACE9500E83E91 /* Frameworks */, @@ -1320,6 +1349,7 @@ isa = PBXNativeTarget; buildConfigurationList = ABFE42B3143E32F0009A3CCE /* Build configuration list for PBXNativeTarget "DeSmuME (v10.6 Snow Leopard)" */; buildPhases = ( + AB73B05114BD79D300F49C92 /* ShellScript */, ABFE4240143E32F0009A3CCE /* Resources */, ABFE4244143E32F0009A3CCE /* Sources */, ABFE42AC143E32F0009A3CCE /* Frameworks */, @@ -1386,7 +1416,15 @@ AB46781014ABD4890002FF94 /* AppIcon_ROMSave.icns in Resources */, AB46781114ABD4890002FF94 /* AppIcon_SaveState.icns in Resources */, ABF4007A14B4F19200578AE7 /* AppIcon_ROMCheats.icns in Resources */, - ABBF04C014B519A500E505A0 /* MainMenu (Legacy).xib in Resources */, + AB0191D614BD72EC004CB612 /* MainMenu (Legacy).xib in Resources */, + ABEFD82514BB9E65004DB9DC /* Icon_VolumeFull_16x16.png in Resources */, + ABEFD82614BB9E65004DB9DC /* Icon_VolumeMute_16x16.png in Resources */, + ABEFD82714BB9E65004DB9DC /* Icon_VolumeOneThird_16x16.png in Resources */, + ABEFD82814BB9E65004DB9DC /* Icon_VolumeTwoThird_16x16.png in Resources */, + AB73B1CD14BDA94800F49C92 /* Icon_Execute_420x420.png in Resources */, + AB73B1CE14BDA94800F49C92 /* Icon_Pause_420x420.png in Resources */, + AB73B1CF14BDA94800F49C92 /* Icon_Speed1x_420x420.png in Resources */, + AB73B1D014BDA94800F49C92 /* Icon_Speed2x_420x420.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1406,7 +1444,15 @@ AB46781814ABD4890002FF94 /* AppIcon_ROMSave.icns in Resources */, AB46781914ABD4890002FF94 /* AppIcon_SaveState.icns in Resources */, ABF4007714B4F19200578AE7 /* AppIcon_ROMCheats.icns in Resources */, - ABBF04BE14B519A500E505A0 /* MainMenu (Legacy).xib in Resources */, + AB0191D414BD72EC004CB612 /* MainMenu (Legacy).xib in Resources */, + ABEFD82914BB9E65004DB9DC /* Icon_VolumeFull_16x16.png in Resources */, + ABEFD82A14BB9E65004DB9DC /* Icon_VolumeMute_16x16.png in Resources */, + ABEFD82B14BB9E65004DB9DC /* Icon_VolumeOneThird_16x16.png in Resources */, + ABEFD82C14BB9E65004DB9DC /* Icon_VolumeTwoThird_16x16.png in Resources */, + AB73B1D114BDA94800F49C92 /* Icon_Execute_420x420.png in Resources */, + AB73B1D214BDA94800F49C92 /* Icon_Pause_420x420.png in Resources */, + AB73B1D314BDA94800F49C92 /* Icon_Speed1x_420x420.png in Resources */, + AB73B1D414BDA94800F49C92 /* Icon_Speed2x_420x420.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1426,7 +1472,15 @@ AB46780C14ABD4890002FF94 /* AppIcon_ROMSave.icns in Resources */, AB46780D14ABD4890002FF94 /* AppIcon_SaveState.icns in Resources */, ABF4007814B4F19200578AE7 /* AppIcon_ROMCheats.icns in Resources */, - ABBF04BD14B519A500E505A0 /* MainMenu (Legacy).xib in Resources */, + AB0191D314BD72EC004CB612 /* MainMenu (Legacy).xib in Resources */, + ABEFD81D14BB9E65004DB9DC /* Icon_VolumeFull_16x16.png in Resources */, + ABEFD81E14BB9E65004DB9DC /* Icon_VolumeMute_16x16.png in Resources */, + ABEFD81F14BB9E65004DB9DC /* Icon_VolumeOneThird_16x16.png in Resources */, + ABEFD82014BB9E65004DB9DC /* Icon_VolumeTwoThird_16x16.png in Resources */, + AB73B1C514BDA94800F49C92 /* Icon_Execute_420x420.png in Resources */, + AB73B1C614BDA94800F49C92 /* Icon_Pause_420x420.png in Resources */, + AB73B1C714BDA94800F49C92 /* Icon_Speed1x_420x420.png in Resources */, + AB73B1C814BDA94800F49C92 /* Icon_Speed2x_420x420.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1446,72 +1500,176 @@ AB46781414ABD4890002FF94 /* AppIcon_ROMSave.icns in Resources */, AB46781514ABD4890002FF94 /* AppIcon_SaveState.icns in Resources */, ABF4007914B4F19200578AE7 /* AppIcon_ROMCheats.icns in Resources */, - ABBF04BF14B519A500E505A0 /* MainMenu (Legacy).xib in Resources */, + AB0191D514BD72EC004CB612 /* MainMenu (Legacy).xib in Resources */, + ABEFD82114BB9E65004DB9DC /* Icon_VolumeFull_16x16.png in Resources */, + ABEFD82214BB9E65004DB9DC /* Icon_VolumeMute_16x16.png in Resources */, + ABEFD82314BB9E65004DB9DC /* Icon_VolumeOneThird_16x16.png in Resources */, + ABEFD82414BB9E65004DB9DC /* Icon_VolumeTwoThird_16x16.png in Resources */, + AB73B1C914BDA94800F49C92 /* Icon_Execute_420x420.png in Resources */, + AB73B1CA14BDA94800F49C92 /* Icon_Pause_420x420.png in Resources */, + AB73B1CB14BDA94800F49C92 /* Icon_Speed1x_420x420.png in Resources */, + AB73B1CC14BDA94800F49C92 /* Icon_Speed2x_420x420.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ +/* Begin PBXShellScriptBuildPhase section */ + AB01918414BD6A0A004CB612 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "$(SRCROOT)/translations/English.lproj/MainMenu (Legacy).xib", + ); + outputPaths = ( + "$(SRCROOT)/translations/French.lproj/MainMenu (Legacy).xib", + "$(SRCROOT)/translations/Italian.lproj/MainMenu (Legacy).xib", + "$(SRCROOT)/translations/Japanese.lproj/MainMenu (Legacy).xib", + "$(SRCROOT)/translations/Chinese.lproj/MainMenu (Legacy).xib", + "$(SRCROOT)/translations/Norwegian.lproj/MainMenu (Legacy).xib", + "$(SRCROOT)/translations/Romanian.lproj/MainMenu (Legacy).xib", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "cd \"./translations\"\nibtool --generate-strings-file \"./English.lproj/MainMenu (Legacy).strings\" \"./English.lproj/MainMenu (Legacy).xib\"\n\nrm \"./French.lproj/MainMenu (Legacy).xib\"\nibtool --strings-file \"./French.lproj/MainMenu (Legacy).strings\" --write \"./French.lproj/MainMenu (Legacy).xib\" \"./English.lproj/MainMenu (Legacy).xib\"\n\nrm \"./Italian.lproj/MainMenu (Legacy).xib\"\nibtool --strings-file \"./Italian.lproj/MainMenu (Legacy).strings\" --write \"./Italian.lproj/MainMenu (Legacy).xib\" \"./English.lproj/MainMenu (Legacy).xib\"\n\nrm \"./Japanese.lproj/MainMenu (Legacy).xib\"\nibtool --strings-file \"./Japanese.lproj/MainMenu (Legacy).strings\" --write \"./Japanese.lproj/MainMenu (Legacy).xib\" \"./English.lproj/MainMenu (Legacy).xib\"\n\nrm \"./Chinese.lproj/MainMenu (Legacy).xib\"\nibtool --strings-file \"./Chinese.lproj/MainMenu (Legacy).strings\" --write \"./Chinese.lproj/MainMenu (Legacy).xib\" \"./English.lproj/MainMenu (Legacy).xib\"\n\nrm \"./Norwegian.lproj/MainMenu (Legacy).xib\"\nibtool --strings-file \"./Norwegian.lproj/MainMenu (Legacy).strings\" --write \"./Norwegian.lproj/MainMenu (Legacy).xib\" \"./English.lproj/MainMenu (Legacy).xib\"\n\nrm \"./Romanian.lproj/MainMenu (Legacy).xib\"\nibtool --strings-file \"./Romanian.lproj/MainMenu (Legacy).strings\" --write \"./Romanian.lproj/MainMenu (Legacy).xib\" \"./English.lproj/MainMenu (Legacy).xib\""; + }; + AB73B04F14BD79CB00F49C92 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "$(SRCROOT)/translations/English.lproj/MainMenu (Legacy).xib", + ); + outputPaths = ( + "$(SRCROOT)/translations/French.lproj/MainMenu (Legacy).xib", + "$(SRCROOT)/translations/Italian.lproj/MainMenu (Legacy).xib", + "$(SRCROOT)/translations/Japanese.lproj/MainMenu (Legacy).xib", + "$(SRCROOT)/translations/Chinese.lproj/MainMenu (Legacy).xib", + "$(SRCROOT)/translations/Norwegian.lproj/MainMenu (Legacy).xib", + "$(SRCROOT)/translations/Romanian.lproj/MainMenu (Legacy).xib", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "cd \"./translations\"\nibtool --generate-strings-file \"./English.lproj/MainMenu (Legacy).strings\" \"./English.lproj/MainMenu (Legacy).xib\"\n\nrm \"./French.lproj/MainMenu (Legacy).xib\"\nibtool --strings-file \"./French.lproj/MainMenu (Legacy).strings\" --write \"./French.lproj/MainMenu (Legacy).xib\" \"./English.lproj/MainMenu (Legacy).xib\"\n\nrm \"./Italian.lproj/MainMenu (Legacy).xib\"\nibtool --strings-file \"./Italian.lproj/MainMenu (Legacy).strings\" --write \"./Italian.lproj/MainMenu (Legacy).xib\" \"./English.lproj/MainMenu (Legacy).xib\"\n\nrm \"./Japanese.lproj/MainMenu (Legacy).xib\"\nibtool --strings-file \"./Japanese.lproj/MainMenu (Legacy).strings\" --write \"./Japanese.lproj/MainMenu (Legacy).xib\" \"./English.lproj/MainMenu (Legacy).xib\"\n\nrm \"./Chinese.lproj/MainMenu (Legacy).xib\"\nibtool --strings-file \"./Chinese.lproj/MainMenu (Legacy).strings\" --write \"./Chinese.lproj/MainMenu (Legacy).xib\" \"./English.lproj/MainMenu (Legacy).xib\"\n\nrm \"./Norwegian.lproj/MainMenu (Legacy).xib\"\nibtool --strings-file \"./Norwegian.lproj/MainMenu (Legacy).strings\" --write \"./Norwegian.lproj/MainMenu (Legacy).xib\" \"./English.lproj/MainMenu (Legacy).xib\"\n\nrm \"./Romanian.lproj/MainMenu (Legacy).xib\"\nibtool --strings-file \"./Romanian.lproj/MainMenu (Legacy).strings\" --write \"./Romanian.lproj/MainMenu (Legacy).xib\" \"./English.lproj/MainMenu (Legacy).xib\""; + }; + AB73B05114BD79D300F49C92 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "$(SRCROOT)/translations/English.lproj/MainMenu (Legacy).xib", + ); + outputPaths = ( + "$(SRCROOT)/translations/French.lproj/MainMenu (Legacy).xib", + "$(SRCROOT)/translations/Italian.lproj/MainMenu (Legacy).xib", + "$(SRCROOT)/translations/Japanese.lproj/MainMenu (Legacy).xib", + "$(SRCROOT)/translations/Chinese.lproj/MainMenu (Legacy).xib", + "$(SRCROOT)/translations/Norwegian.lproj/MainMenu (Legacy).xib", + "$(SRCROOT)/translations/Romanian.lproj/MainMenu (Legacy).xib", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "cd \"./translations\"\nibtool --generate-strings-file \"./English.lproj/MainMenu (Legacy).strings\" \"./English.lproj/MainMenu (Legacy).xib\"\n\nrm \"./French.lproj/MainMenu (Legacy).xib\"\nibtool --strings-file \"./French.lproj/MainMenu (Legacy).strings\" --write \"./French.lproj/MainMenu (Legacy).xib\" \"./English.lproj/MainMenu (Legacy).xib\"\n\nrm \"./Italian.lproj/MainMenu (Legacy).xib\"\nibtool --strings-file \"./Italian.lproj/MainMenu (Legacy).strings\" --write \"./Italian.lproj/MainMenu (Legacy).xib\" \"./English.lproj/MainMenu (Legacy).xib\"\n\nrm \"./Japanese.lproj/MainMenu (Legacy).xib\"\nibtool --strings-file \"./Japanese.lproj/MainMenu (Legacy).strings\" --write \"./Japanese.lproj/MainMenu (Legacy).xib\" \"./English.lproj/MainMenu (Legacy).xib\"\n\nrm \"./Chinese.lproj/MainMenu (Legacy).xib\"\nibtool --strings-file \"./Chinese.lproj/MainMenu (Legacy).strings\" --write \"./Chinese.lproj/MainMenu (Legacy).xib\" \"./English.lproj/MainMenu (Legacy).xib\"\n\nrm \"./Norwegian.lproj/MainMenu (Legacy).xib\"\nibtool --strings-file \"./Norwegian.lproj/MainMenu (Legacy).strings\" --write \"./Norwegian.lproj/MainMenu (Legacy).xib\" \"./English.lproj/MainMenu (Legacy).xib\"\n\nrm \"./Romanian.lproj/MainMenu (Legacy).xib\"\nibtool --strings-file \"./Romanian.lproj/MainMenu (Legacy).strings\" --write \"./Romanian.lproj/MainMenu (Legacy).xib\" \"./English.lproj/MainMenu (Legacy).xib\""; + }; + AB73B05614BD7A8B00F49C92 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "$(SRCROOT)/translations/English.lproj/MainMenu (Legacy).xib", + ); + outputPaths = ( + "$(SRCROOT)/translations/French.lproj/MainMenu (Legacy).xib", + "$(SRCROOT)/translations/Italian.lproj/MainMenu (Legacy).xib", + "$(SRCROOT)/translations/Japanese.lproj/MainMenu (Legacy).xib", + "$(SRCROOT)/translations/Chinese.lproj/MainMenu (Legacy).xib", + "$(SRCROOT)/translations/Norwegian.lproj/MainMenu (Legacy).xib", + "$(SRCROOT)/translations/Romanian.lproj/MainMenu (Legacy).xib", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "cd \"./translations\"\nibtool --generate-strings-file \"./English.lproj/MainMenu (Legacy).strings\" \"./English.lproj/MainMenu (Legacy).xib\"\n\nrm \"./French.lproj/MainMenu (Legacy).xib\"\nibtool --strings-file \"./French.lproj/MainMenu (Legacy).strings\" --write \"./French.lproj/MainMenu (Legacy).xib\" \"./English.lproj/MainMenu (Legacy).xib\"\n\nrm \"./Italian.lproj/MainMenu (Legacy).xib\"\nibtool --strings-file \"./Italian.lproj/MainMenu (Legacy).strings\" --write \"./Italian.lproj/MainMenu (Legacy).xib\" \"./English.lproj/MainMenu (Legacy).xib\"\n\nrm \"./Japanese.lproj/MainMenu (Legacy).xib\"\nibtool --strings-file \"./Japanese.lproj/MainMenu (Legacy).strings\" --write \"./Japanese.lproj/MainMenu (Legacy).xib\" \"./English.lproj/MainMenu (Legacy).xib\"\n\nrm \"./Chinese.lproj/MainMenu (Legacy).xib\"\nibtool --strings-file \"./Chinese.lproj/MainMenu (Legacy).strings\" --write \"./Chinese.lproj/MainMenu (Legacy).xib\" \"./English.lproj/MainMenu (Legacy).xib\"\n\nrm \"./Norwegian.lproj/MainMenu (Legacy).xib\"\nibtool --strings-file \"./Norwegian.lproj/MainMenu (Legacy).strings\" --write \"./Norwegian.lproj/MainMenu (Legacy).xib\" \"./English.lproj/MainMenu (Legacy).xib\"\n\nrm \"./Romanian.lproj/MainMenu (Legacy).xib\"\nibtool --strings-file \"./Romanian.lproj/MainMenu (Legacy).strings\" --write \"./Romanian.lproj/MainMenu (Legacy).xib\" \"./English.lproj/MainMenu (Legacy).xib\""; + }; +/* End PBXShellScriptBuildPhase section */ + /* Begin PBXSourcesBuildPhase section */ 1EFD517C0F892B1A00B029BB /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - AB06CB63135B8A4D00E977B3 /* about.m in Sources */, - AB06CB65135B8A4D00E977B3 /* screen_state.m in Sources */, - AB06CB66135B8A4D00E977B3 /* cocoa_input.mm in Sources */, - AB06CB67135B8A4D00E977B3 /* input.mm in Sources */, - AB06CB68135B8A4D00E977B3 /* main_window.mm in Sources */, - AB06CB69135B8A4D00E977B3 /* main.mm in Sources */, - AB06CB6A135B8A4D00E977B3 /* nds_control.mm in Sources */, - AB06CB6B135B8A4D00E977B3 /* preferences.mm in Sources */, - AB06CB6C135B8A4D00E977B3 /* screenshot.mm in Sources */, - AB06CB6E135B8A4D00E977B3 /* video_output_view.mm in Sources */, + AB06CE80135B8AEE00E977B3 /* ConvertUTF.c in Sources */, + AB06CE6C135B8AEE00E977B3 /* AAFilter.cpp in Sources */, AB06CD6C135B8ACE00E977B3 /* addons.cpp in Sources */, AB06CD6D135B8ACE00E977B3 /* aggdraw.cpp in Sources */, AB06CD6E135B8ACE00E977B3 /* arm_instructions.cpp in Sources */, AB06CD6F135B8ACE00E977B3 /* armcpu.cpp in Sources */, AB06CD70135B8ACE00E977B3 /* bios.cpp in Sources */, + AB06CE88135B8AEE00E977B3 /* cache.cpp in Sources */, AB06CD71135B8ACE00E977B3 /* cheatSystem.cpp in Sources */, AB06CD72135B8ACE00E977B3 /* commandline.cpp in Sources */, AB06CD73135B8ACE00E977B3 /* common.cpp in Sources */, AB06CD74135B8ACE00E977B3 /* cp15.cpp in Sources */, + AB06CE6F135B8AEE00E977B3 /* cpu_detect_x86_gcc.cpp in Sources */, + AB06CE82135B8AEE00E977B3 /* crc.cpp in Sources */, AB06CD75135B8ACE00E977B3 /* ctrlssdl.cpp in Sources */, + AB06CE81135B8AEE00E977B3 /* datetime.cpp in Sources */, AB06CD76135B8ACE00E977B3 /* debug.cpp in Sources */, + AB06CE83135B8AEE00E977B3 /* decrypt.cpp in Sources */, AB06CD77135B8ACE00E977B3 /* desmume_config.cpp in Sources */, + AB06CE89135B8AEE00E977B3 /* directory.cpp in Sources */, AB06CD78135B8ACE00E977B3 /* Disassembler.cpp in Sources */, + AB06CE8A135B8AEE00E977B3 /* disc.cpp in Sources */, + AB06CE85135B8AEE00E977B3 /* dlditool.cpp in Sources */, AB06CD79135B8ACE00E977B3 /* driver.cpp in Sources */, + AB06CE86135B8AEE00E977B3 /* emufat.cpp in Sources */, AB06CD7A135B8ACE00E977B3 /* emufile.cpp in Sources */, + AB06CE8B135B8AEE00E977B3 /* fatdir.cpp in Sources */, + AB06CE8C135B8AEE00E977B3 /* fatfile.cpp in Sources */, AB06CD7B135B8ACE00E977B3 /* FIFO.cpp in Sources */, + AB06CE72135B8AEE00E977B3 /* FIFOSampleBuffer.cpp in Sources */, + AB06CE8D135B8AEE00E977B3 /* file_allocation_table.cpp in Sources */, + AB06CE8E135B8AEE00E977B3 /* filetime.cpp in Sources */, + AB06CE73135B8AEE00E977B3 /* FIRFilter.cpp in Sources */, AB06CD7C135B8ACE00E977B3 /* firmware.cpp in Sources */, AB06CD7D135B8ACE00E977B3 /* fs-linux.cpp in Sources */, + AB06CE66135B8AEE00E977B3 /* gdbstub.cpp in Sources */, AB06CD7F135B8ACE00E977B3 /* gfx3d.cpp in Sources */, - AB06CD80135B8ACE00E977B3 /* GPU_osd_stub.cpp in Sources */, - AB06CD81135B8ACE00E977B3 /* GPU_osd.cpp in Sources */, AB06CD82135B8ACE00E977B3 /* GPU.cpp in Sources */, + AB06CD81135B8ACE00E977B3 /* GPU_osd.cpp in Sources */, + AB06CD80135B8ACE00E977B3 /* GPU_osd_stub.cpp in Sources */, + AB06CE87135B8AEE00E977B3 /* guid.cpp in Sources */, + AB06CE84135B8AEE00E977B3 /* header.cpp in Sources */, + AB06CE8F135B8AEE00E977B3 /* libfat.cpp in Sources */, + AB06CE90135B8AEE00E977B3 /* libfat_public_api.cpp in Sources */, + AB06CE91135B8AEE00E977B3 /* lock.cpp in Sources */, AB06CD83135B8ACE00E977B3 /* lua-engine.cpp in Sources */, + AB06CE63135B8AEE00E977B3 /* main.cpp in Sources */, AB06CD84135B8ACE00E977B3 /* matrix.cpp in Sources */, AB06CD85135B8ACE00E977B3 /* mc.cpp in Sources */, + AB06CE93135B8AEE00E977B3 /* md5.cpp in Sources */, + AB06CE68135B8AEE00E977B3 /* metaspu.cpp in Sources */, + AB06CD88135B8ACE00E977B3 /* mic.cpp in Sources */, AB06CD86135B8ACE00E977B3 /* mic_alsa.cpp in Sources */, AB06CD87135B8ACE00E977B3 /* mic_openal.cpp in Sources */, - AB06CD88135B8ACE00E977B3 /* mic.cpp in Sources */, AB06CD89135B8ACE00E977B3 /* MMU.cpp in Sources */, + AB06CE77135B8AEE00E977B3 /* mmx_optimized.cpp in Sources */, AB06CD8A135B8ACE00E977B3 /* movie.cpp in Sources */, AB06CD8B135B8ACE00E977B3 /* NDSSystem.cpp in Sources */, + AB06CE92135B8AEE00E977B3 /* partition.cpp in Sources */, AB06CD8D135B8ACE00E977B3 /* path.cpp in Sources */, AB06CD8E135B8ACE00E977B3 /* rasterize.cpp in Sources */, + AB06CE78135B8AEE00E977B3 /* RateTransposer.cpp in Sources */, AB06CD8F135B8ACE00E977B3 /* readwrite.cpp in Sources */, AB06CD90135B8ACE00E977B3 /* render3D.cpp in Sources */, AB06CD91135B8ACE00E977B3 /* ROMReader.cpp in Sources */, AB06CD92135B8ACE00E977B3 /* rtc.cpp in Sources */, AB06CD93135B8ACE00E977B3 /* saves.cpp in Sources */, AB06CD94135B8ACE00E977B3 /* slot1.cpp in Sources */, - AB06CD95135B8ACE00E977B3 /* sndsdl.cpp in Sources */, - AB06CD96135B8ACE00E977B3 /* SPU.cpp in Sources */, - AB06CD97135B8ACE00E977B3 /* texcache.cpp in Sources */, - AB06CD98135B8ACE00E977B3 /* thumb_instructions.cpp in Sources */, - AB06CD99135B8ACE00E977B3 /* version.cpp in Sources */, - AB06CD9A135B8ACE00E977B3 /* wifi.cpp in Sources */, AB06CE55135B8AEE00E977B3 /* slot1_none.cpp in Sources */, AB06CE56135B8AEE00E977B3 /* slot1_r4.cpp in Sources */, AB06CE57135B8AEE00E977B3 /* slot1_retail.cpp in Sources */, @@ -1523,53 +1681,37 @@ AB06CE5D135B8AEE00E977B3 /* slot2_paddle.cpp in Sources */, AB06CE5E135B8AEE00E977B3 /* slot2_piano.cpp in Sources */, AB06CE5F135B8AEE00E977B3 /* slot2_rumblepak.cpp in Sources */, - AB06CE63135B8AEE00E977B3 /* main.cpp in Sources */, - AB06CE66135B8AEE00E977B3 /* gdbstub.cpp in Sources */, - AB06CE68135B8AEE00E977B3 /* metaspu.cpp in Sources */, + ABF4008214B4F1C000578AE7 /* sndOSX.cpp in Sources */, AB06CE6A135B8AEE00E977B3 /* SndOut.cpp in Sources */, - AB06CE6C135B8AEE00E977B3 /* AAFilter.cpp in Sources */, - AB06CE6F135B8AEE00E977B3 /* cpu_detect_x86_gcc.cpp in Sources */, - AB06CE72135B8AEE00E977B3 /* FIFOSampleBuffer.cpp in Sources */, - AB06CE73135B8AEE00E977B3 /* FIRFilter.cpp in Sources */, - AB06CE77135B8AEE00E977B3 /* mmx_optimized.cpp in Sources */, - AB06CE78135B8AEE00E977B3 /* RateTransposer.cpp in Sources */, + AB06CD95135B8ACE00E977B3 /* sndsdl.cpp in Sources */, AB06CE7A135B8AEE00E977B3 /* SoundTouch.cpp in Sources */, + AB06CD96135B8ACE00E977B3 /* SPU.cpp in Sources */, AB06CE7B135B8AEE00E977B3 /* sse_optimized.cpp in Sources */, - AB06CE7C135B8AEE00E977B3 /* TDStretch.cpp in Sources */, - AB06CE7D135B8AEE00E977B3 /* WavFile.cpp in Sources */, - AB06CE7E135B8AEE00E977B3 /* Timestretcher.cpp in Sources */, - AB06CE80135B8AEE00E977B3 /* ConvertUTF.c in Sources */, - AB06CE81135B8AEE00E977B3 /* datetime.cpp in Sources */, - AB06CE82135B8AEE00E977B3 /* crc.cpp in Sources */, - AB06CE83135B8AEE00E977B3 /* decrypt.cpp in Sources */, - AB06CE84135B8AEE00E977B3 /* header.cpp in Sources */, - AB06CE85135B8AEE00E977B3 /* dlditool.cpp in Sources */, - AB06CE86135B8AEE00E977B3 /* emufat.cpp in Sources */, - AB06CE87135B8AEE00E977B3 /* guid.cpp in Sources */, - AB06CE88135B8AEE00E977B3 /* cache.cpp in Sources */, - AB06CE89135B8AEE00E977B3 /* directory.cpp in Sources */, - AB06CE8A135B8AEE00E977B3 /* disc.cpp in Sources */, - AB06CE8B135B8AEE00E977B3 /* fatdir.cpp in Sources */, - AB06CE8C135B8AEE00E977B3 /* fatfile.cpp in Sources */, - AB06CE8D135B8AEE00E977B3 /* file_allocation_table.cpp in Sources */, - AB06CE8E135B8AEE00E977B3 /* filetime.cpp in Sources */, - AB06CE8F135B8AEE00E977B3 /* libfat.cpp in Sources */, - AB06CE90135B8AEE00E977B3 /* libfat_public_api.cpp in Sources */, - AB06CE91135B8AEE00E977B3 /* lock.cpp in Sources */, - AB06CE92135B8AEE00E977B3 /* partition.cpp in Sources */, - AB06CE93135B8AEE00E977B3 /* md5.cpp in Sources */, AB06CE94135B8AEE00E977B3 /* task.cpp in Sources */, - AB06CE95135B8AEE00E977B3 /* vfat.cpp in Sources */, - AB06CE96135B8AEE00E977B3 /* xstring.cpp in Sources */, - AB06CECB135B8E0B00E977B3 /* rom_info.m in Sources */, - AB06CECC135B8E0B00E977B3 /* speed_limit_selection_window.mm in Sources */, + AB06CE7C135B8AEE00E977B3 /* TDStretch.cpp in Sources */, + AB06CD97135B8ACE00E977B3 /* texcache.cpp in Sources */, + AB06CD98135B8ACE00E977B3 /* thumb_instructions.cpp in Sources */, + AB06CE7E135B8AEE00E977B3 /* Timestretcher.cpp in Sources */, 7FA912241426523900E2ABDD /* tinystr.cpp in Sources */, 7FA912251426523900E2ABDD /* tinyxml.cpp in Sources */, 7FA912261426523900E2ABDD /* tinyxmlerror.cpp in Sources */, 7FA912271426523900E2ABDD /* tinyxmlparser.cpp in Sources */, - ABF4008214B4F1C000578AE7 /* sndOSX.cpp in Sources */, + AB06CD99135B8ACE00E977B3 /* version.cpp in Sources */, + AB06CE95135B8AEE00E977B3 /* vfat.cpp in Sources */, + AB06CE7D135B8AEE00E977B3 /* WavFile.cpp in Sources */, + AB06CD9A135B8ACE00E977B3 /* wifi.cpp in Sources */, + AB06CE96135B8AEE00E977B3 /* xstring.cpp in Sources */, + ABAC890C14B7943E001B299F /* main.m in Sources */, + AB06CB65135B8A4D00E977B3 /* screen_state.m in Sources */, + AB73B12F14BDA01C00F49C92 /* appDelegate_legacy.mm in Sources */, ABBF053314B5436E00E505A0 /* cocoa_file.mm in Sources */, + AB06CB66135B8A4D00E977B3 /* cocoa_input.mm in Sources */, AB8FE37914B652EC009E20B1 /* cocoa_util.mm in Sources */, + AB73B13014BDA01C00F49C92 /* emuWindowDelegate_legacy.mm in Sources */, + AB06CB67135B8A4D00E977B3 /* input.mm in Sources */, + AB06CB6A135B8A4D00E977B3 /* nds_control.mm in Sources */, + AB06CB6B135B8A4D00E977B3 /* preferences.mm in Sources */, + AB06CB6E135B8A4D00E977B3 /* video_output_view.mm in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1577,55 +1719,68 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - AB06CB57135B8A4D00E977B3 /* about.m in Sources */, - AB06CB59135B8A4D00E977B3 /* screen_state.m in Sources */, - AB06CB5A135B8A4D00E977B3 /* cocoa_input.mm in Sources */, - AB06CB5B135B8A4D00E977B3 /* input.mm in Sources */, - AB06CB5C135B8A4D00E977B3 /* main_window.mm in Sources */, - AB06CB5D135B8A4D00E977B3 /* main.mm in Sources */, - AB06CB5E135B8A4D00E977B3 /* nds_control.mm in Sources */, - AB06CB5F135B8A4D00E977B3 /* preferences.mm in Sources */, - AB06CB60135B8A4D00E977B3 /* screenshot.mm in Sources */, - AB06CB62135B8A4D00E977B3 /* video_output_view.mm in Sources */, + AB06CE3E135B8AEE00E977B3 /* ConvertUTF.c in Sources */, + AB06CE2A135B8AEE00E977B3 /* AAFilter.cpp in Sources */, AB06CD3D135B8ACE00E977B3 /* addons.cpp in Sources */, AB06CD3F135B8ACE00E977B3 /* arm_instructions.cpp in Sources */, AB06CD40135B8ACE00E977B3 /* armcpu.cpp in Sources */, AB06CD41135B8ACE00E977B3 /* bios.cpp in Sources */, + AB06CE46135B8AEE00E977B3 /* cache.cpp in Sources */, AB06CD42135B8ACE00E977B3 /* cheatSystem.cpp in Sources */, AB06CD44135B8ACE00E977B3 /* common.cpp in Sources */, AB06CD45135B8ACE00E977B3 /* cp15.cpp in Sources */, + AB06CE2D135B8AEE00E977B3 /* cpu_detect_x86_gcc.cpp in Sources */, + AB06CE40135B8AEE00E977B3 /* crc.cpp in Sources */, + AB06CE3F135B8AEE00E977B3 /* datetime.cpp in Sources */, AB06CD47135B8ACE00E977B3 /* debug.cpp in Sources */, + AB06CE41135B8AEE00E977B3 /* decrypt.cpp in Sources */, + AB06CE47135B8AEE00E977B3 /* directory.cpp in Sources */, AB06CD49135B8ACE00E977B3 /* Disassembler.cpp in Sources */, + AB06CE48135B8AEE00E977B3 /* disc.cpp in Sources */, + AB06CE43135B8AEE00E977B3 /* dlditool.cpp in Sources */, AB06CD4A135B8ACE00E977B3 /* driver.cpp in Sources */, + AB06CE44135B8AEE00E977B3 /* emufat.cpp in Sources */, AB06CD4B135B8ACE00E977B3 /* emufile.cpp in Sources */, + AB06CE49135B8AEE00E977B3 /* fatdir.cpp in Sources */, + AB06CE4A135B8AEE00E977B3 /* fatfile.cpp in Sources */, AB06CD4C135B8ACE00E977B3 /* FIFO.cpp in Sources */, + AB06CE30135B8AEE00E977B3 /* FIFOSampleBuffer.cpp in Sources */, + AB06CE4B135B8AEE00E977B3 /* file_allocation_table.cpp in Sources */, + AB06CE4C135B8AEE00E977B3 /* filetime.cpp in Sources */, + AB06CE31135B8AEE00E977B3 /* FIRFilter.cpp in Sources */, AB06CD4D135B8ACE00E977B3 /* firmware.cpp in Sources */, AB06CD4E135B8ACE00E977B3 /* fs-linux.cpp in Sources */, AB06CD50135B8ACE00E977B3 /* gfx3d.cpp in Sources */, - AB06CD51135B8ACE00E977B3 /* GPU_osd_stub.cpp in Sources */, AB06CD53135B8ACE00E977B3 /* GPU.cpp in Sources */, + AB06CD51135B8ACE00E977B3 /* GPU_osd_stub.cpp in Sources */, + AB06CE45135B8AEE00E977B3 /* guid.cpp in Sources */, + AB06CE42135B8AEE00E977B3 /* header.cpp in Sources */, + AB06CE4D135B8AEE00E977B3 /* libfat.cpp in Sources */, + AB06CE4E135B8AEE00E977B3 /* libfat_public_api.cpp in Sources */, + AB06CE4F135B8AEE00E977B3 /* lock.cpp in Sources */, AB06CD55135B8ACE00E977B3 /* matrix.cpp in Sources */, AB06CD56135B8ACE00E977B3 /* mc.cpp in Sources */, + AB06CE51135B8AEE00E977B3 /* md5.cpp in Sources */, + AB06CE26135B8AEE00E977B3 /* metaspu.cpp in Sources */, AB06CD59135B8ACE00E977B3 /* mic.cpp in Sources */, AB06CD5A135B8ACE00E977B3 /* MMU.cpp in Sources */, + AB06CE35135B8AEE00E977B3 /* mmx_optimized.cpp in Sources */, AB06CD5B135B8ACE00E977B3 /* movie.cpp in Sources */, AB06CD5C135B8ACE00E977B3 /* NDSSystem.cpp in Sources */, + AB06CE50135B8AEE00E977B3 /* partition.cpp in Sources */, AB06CD5E135B8ACE00E977B3 /* path.cpp in Sources */, AB06CD5F135B8ACE00E977B3 /* rasterize.cpp in Sources */, + AB06CE36135B8AEE00E977B3 /* RateTransposer.cpp in Sources */, AB06CD60135B8ACE00E977B3 /* readwrite.cpp in Sources */, AB06CD61135B8ACE00E977B3 /* render3D.cpp in Sources */, AB06CD62135B8ACE00E977B3 /* ROMReader.cpp in Sources */, AB06CD63135B8ACE00E977B3 /* rtc.cpp in Sources */, AB06CD64135B8ACE00E977B3 /* saves.cpp in Sources */, AB06CD65135B8ACE00E977B3 /* slot1.cpp in Sources */, - AB06CD67135B8ACE00E977B3 /* SPU.cpp in Sources */, - AB06CD68135B8ACE00E977B3 /* texcache.cpp in Sources */, - AB06CD69135B8ACE00E977B3 /* thumb_instructions.cpp in Sources */, - AB06CD6A135B8ACE00E977B3 /* version.cpp in Sources */, - AB06CD6B135B8ACE00E977B3 /* wifi.cpp in Sources */, AB06CE13135B8AEE00E977B3 /* slot1_none.cpp in Sources */, AB06CE14135B8AEE00E977B3 /* slot1_r4.cpp in Sources */, AB06CE15135B8AEE00E977B3 /* slot1_retail.cpp in Sources */, + 956B96C313DF4CF900FCDCD0 /* slot1_retail_nand.cpp in Sources */, AB06CE16135B8AEE00E977B3 /* slot2_expMemory.cpp in Sources */, AB06CE17135B8AEE00E977B3 /* slot2_gbagame.cpp in Sources */, AB06CE18135B8AEE00E977B3 /* slot2_guitarGrip.cpp in Sources */, @@ -1634,52 +1789,36 @@ AB06CE1B135B8AEE00E977B3 /* slot2_paddle.cpp in Sources */, AB06CE1C135B8AEE00E977B3 /* slot2_piano.cpp in Sources */, AB06CE1D135B8AEE00E977B3 /* slot2_rumblepak.cpp in Sources */, - AB06CE26135B8AEE00E977B3 /* metaspu.cpp in Sources */, + ABF4007F14B4F1C000578AE7 /* sndOSX.cpp in Sources */, AB06CE28135B8AEE00E977B3 /* SndOut.cpp in Sources */, - AB06CE2A135B8AEE00E977B3 /* AAFilter.cpp in Sources */, - AB06CE2D135B8AEE00E977B3 /* cpu_detect_x86_gcc.cpp in Sources */, - AB06CE30135B8AEE00E977B3 /* FIFOSampleBuffer.cpp in Sources */, - AB06CE31135B8AEE00E977B3 /* FIRFilter.cpp in Sources */, - AB06CE35135B8AEE00E977B3 /* mmx_optimized.cpp in Sources */, - AB06CE36135B8AEE00E977B3 /* RateTransposer.cpp in Sources */, AB06CE38135B8AEE00E977B3 /* SoundTouch.cpp in Sources */, + AB06CD67135B8ACE00E977B3 /* SPU.cpp in Sources */, AB06CE39135B8AEE00E977B3 /* sse_optimized.cpp in Sources */, - AB06CE3A135B8AEE00E977B3 /* TDStretch.cpp in Sources */, - AB06CE3B135B8AEE00E977B3 /* WavFile.cpp in Sources */, - AB06CE3C135B8AEE00E977B3 /* Timestretcher.cpp in Sources */, - AB06CE3E135B8AEE00E977B3 /* ConvertUTF.c in Sources */, - AB06CE3F135B8AEE00E977B3 /* datetime.cpp in Sources */, - AB06CE40135B8AEE00E977B3 /* crc.cpp in Sources */, - AB06CE41135B8AEE00E977B3 /* decrypt.cpp in Sources */, - AB06CE42135B8AEE00E977B3 /* header.cpp in Sources */, - AB06CE43135B8AEE00E977B3 /* dlditool.cpp in Sources */, - AB06CE44135B8AEE00E977B3 /* emufat.cpp in Sources */, - AB06CE45135B8AEE00E977B3 /* guid.cpp in Sources */, - AB06CE46135B8AEE00E977B3 /* cache.cpp in Sources */, - AB06CE47135B8AEE00E977B3 /* directory.cpp in Sources */, - AB06CE48135B8AEE00E977B3 /* disc.cpp in Sources */, - AB06CE49135B8AEE00E977B3 /* fatdir.cpp in Sources */, - AB06CE4A135B8AEE00E977B3 /* fatfile.cpp in Sources */, - AB06CE4B135B8AEE00E977B3 /* file_allocation_table.cpp in Sources */, - AB06CE4C135B8AEE00E977B3 /* filetime.cpp in Sources */, - AB06CE4D135B8AEE00E977B3 /* libfat.cpp in Sources */, - AB06CE4E135B8AEE00E977B3 /* libfat_public_api.cpp in Sources */, - AB06CE4F135B8AEE00E977B3 /* lock.cpp in Sources */, - AB06CE50135B8AEE00E977B3 /* partition.cpp in Sources */, - AB06CE51135B8AEE00E977B3 /* md5.cpp in Sources */, AB06CE52135B8AEE00E977B3 /* task.cpp in Sources */, - AB06CE53135B8AEE00E977B3 /* vfat.cpp in Sources */, - AB06CE54135B8AEE00E977B3 /* xstring.cpp in Sources */, - AB06CEC9135B8E0B00E977B3 /* rom_info.m in Sources */, - AB06CECA135B8E0B00E977B3 /* speed_limit_selection_window.mm in Sources */, - 956B96C313DF4CF900FCDCD0 /* slot1_retail_nand.cpp in Sources */, + AB06CE3A135B8AEE00E977B3 /* TDStretch.cpp in Sources */, + AB06CD68135B8ACE00E977B3 /* texcache.cpp in Sources */, + AB06CD69135B8ACE00E977B3 /* thumb_instructions.cpp in Sources */, + AB06CE3C135B8AEE00E977B3 /* Timestretcher.cpp in Sources */, 7FA912201426523900E2ABDD /* tinystr.cpp in Sources */, 7FA912211426523900E2ABDD /* tinyxml.cpp in Sources */, 7FA912221426523900E2ABDD /* tinyxmlerror.cpp in Sources */, 7FA912231426523900E2ABDD /* tinyxmlparser.cpp in Sources */, - ABF4007F14B4F1C000578AE7 /* sndOSX.cpp in Sources */, + AB06CD6A135B8ACE00E977B3 /* version.cpp in Sources */, + AB06CE53135B8AEE00E977B3 /* vfat.cpp in Sources */, + AB06CE3B135B8AEE00E977B3 /* WavFile.cpp in Sources */, + AB06CD6B135B8ACE00E977B3 /* wifi.cpp in Sources */, + AB06CE54135B8AEE00E977B3 /* xstring.cpp in Sources */, + ABAC890914B7943E001B299F /* main.m in Sources */, + AB06CB59135B8A4D00E977B3 /* screen_state.m in Sources */, + AB73B13114BDA01C00F49C92 /* appDelegate_legacy.mm in Sources */, ABBF053014B5436E00E505A0 /* cocoa_file.mm in Sources */, + AB06CB5A135B8A4D00E977B3 /* cocoa_input.mm in Sources */, AB8FE37714B652EC009E20B1 /* cocoa_util.mm in Sources */, + AB73B13214BDA01C00F49C92 /* emuWindowDelegate_legacy.mm in Sources */, + AB06CB5B135B8A4D00E977B3 /* input.mm in Sources */, + AB06CB5E135B8A4D00E977B3 /* nds_control.mm in Sources */, + AB06CB5F135B8A4D00E977B3 /* preferences.mm in Sources */, + AB06CB62135B8A4D00E977B3 /* video_output_view.mm in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1687,55 +1826,68 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - AB0A0D3A14AACE9500E83E91 /* about.m in Sources */, - AB0A0D3C14AACE9500E83E91 /* screen_state.m in Sources */, - AB0A0D3D14AACE9500E83E91 /* cocoa_input.mm in Sources */, - AB0A0D3E14AACE9500E83E91 /* input.mm in Sources */, - AB0A0D3F14AACE9500E83E91 /* main_window.mm in Sources */, - AB0A0D4014AACE9500E83E91 /* main.mm in Sources */, - AB0A0D4114AACE9500E83E91 /* nds_control.mm in Sources */, - AB0A0D4214AACE9500E83E91 /* preferences.mm in Sources */, - AB0A0D4314AACE9500E83E91 /* screenshot.mm in Sources */, - AB0A0D4514AACE9500E83E91 /* video_output_view.mm in Sources */, + AB0A0D8214AACE9500E83E91 /* ConvertUTF.c in Sources */, + AB0A0D7714AACE9500E83E91 /* AAFilter.cpp in Sources */, AB0A0D4614AACE9500E83E91 /* addons.cpp in Sources */, AB0A0D4714AACE9500E83E91 /* arm_instructions.cpp in Sources */, AB0A0D4814AACE9500E83E91 /* armcpu.cpp in Sources */, AB0A0D4914AACE9500E83E91 /* bios.cpp in Sources */, + AB0A0D8A14AACE9500E83E91 /* cache.cpp in Sources */, AB0A0D4A14AACE9500E83E91 /* cheatSystem.cpp in Sources */, AB0A0D4B14AACE9500E83E91 /* common.cpp in Sources */, AB0A0D4C14AACE9500E83E91 /* cp15.cpp in Sources */, + AB0A0D7814AACE9500E83E91 /* cpu_detect_x86_gcc.cpp in Sources */, + AB0A0D8414AACE9500E83E91 /* crc.cpp in Sources */, + AB0A0D8314AACE9500E83E91 /* datetime.cpp in Sources */, AB0A0D4D14AACE9500E83E91 /* debug.cpp in Sources */, + AB0A0D8514AACE9500E83E91 /* decrypt.cpp in Sources */, + AB0A0D8B14AACE9500E83E91 /* directory.cpp in Sources */, AB0A0D4E14AACE9500E83E91 /* Disassembler.cpp in Sources */, + AB0A0D8C14AACE9500E83E91 /* disc.cpp in Sources */, + AB0A0D8714AACE9500E83E91 /* dlditool.cpp in Sources */, AB0A0D4F14AACE9500E83E91 /* driver.cpp in Sources */, + AB0A0D8814AACE9500E83E91 /* emufat.cpp in Sources */, AB0A0D5014AACE9500E83E91 /* emufile.cpp in Sources */, + AB0A0D8D14AACE9500E83E91 /* fatdir.cpp in Sources */, + AB0A0D8E14AACE9500E83E91 /* fatfile.cpp in Sources */, AB0A0D5114AACE9500E83E91 /* FIFO.cpp in Sources */, + AB0A0D7914AACE9500E83E91 /* FIFOSampleBuffer.cpp in Sources */, + AB0A0D8F14AACE9500E83E91 /* file_allocation_table.cpp in Sources */, + AB0A0D9014AACE9500E83E91 /* filetime.cpp in Sources */, + AB0A0D7A14AACE9500E83E91 /* FIRFilter.cpp in Sources */, AB0A0D5214AACE9500E83E91 /* firmware.cpp in Sources */, AB0A0D5314AACE9500E83E91 /* fs-linux.cpp in Sources */, AB0A0D5414AACE9500E83E91 /* gfx3d.cpp in Sources */, - AB0A0D5514AACE9500E83E91 /* GPU_osd_stub.cpp in Sources */, AB0A0D5614AACE9500E83E91 /* GPU.cpp in Sources */, + AB0A0D5514AACE9500E83E91 /* GPU_osd_stub.cpp in Sources */, + AB0A0D8914AACE9500E83E91 /* guid.cpp in Sources */, + AB0A0D8614AACE9500E83E91 /* header.cpp in Sources */, + AB0A0D9114AACE9500E83E91 /* libfat.cpp in Sources */, + AB0A0D9214AACE9500E83E91 /* libfat_public_api.cpp in Sources */, + AB0A0D9314AACE9500E83E91 /* lock.cpp in Sources */, AB0A0D5714AACE9500E83E91 /* matrix.cpp in Sources */, AB0A0D5814AACE9500E83E91 /* mc.cpp in Sources */, + AB0A0D9514AACE9500E83E91 /* md5.cpp in Sources */, + AB0A0D7514AACE9500E83E91 /* metaspu.cpp in Sources */, AB0A0D5914AACE9500E83E91 /* mic.cpp in Sources */, AB0A0D5A14AACE9500E83E91 /* MMU.cpp in Sources */, + AB0A0D7B14AACE9500E83E91 /* mmx_optimized.cpp in Sources */, AB0A0D5B14AACE9500E83E91 /* movie.cpp in Sources */, AB0A0D5C14AACE9500E83E91 /* NDSSystem.cpp in Sources */, + AB0A0D9414AACE9500E83E91 /* partition.cpp in Sources */, AB0A0D5D14AACE9500E83E91 /* path.cpp in Sources */, AB0A0D5E14AACE9500E83E91 /* rasterize.cpp in Sources */, + AB0A0D7C14AACE9500E83E91 /* RateTransposer.cpp in Sources */, AB0A0D5F14AACE9500E83E91 /* readwrite.cpp in Sources */, AB0A0D6014AACE9500E83E91 /* render3D.cpp in Sources */, AB0A0D6114AACE9500E83E91 /* ROMReader.cpp in Sources */, AB0A0D6214AACE9500E83E91 /* rtc.cpp in Sources */, AB0A0D6314AACE9500E83E91 /* saves.cpp in Sources */, AB0A0D6414AACE9500E83E91 /* slot1.cpp in Sources */, - AB0A0D6514AACE9500E83E91 /* SPU.cpp in Sources */, - AB0A0D6614AACE9500E83E91 /* texcache.cpp in Sources */, - AB0A0D6714AACE9500E83E91 /* thumb_instructions.cpp in Sources */, - AB0A0D6814AACE9500E83E91 /* version.cpp in Sources */, - AB0A0D6914AACE9500E83E91 /* wifi.cpp in Sources */, AB0A0D6A14AACE9500E83E91 /* slot1_none.cpp in Sources */, AB0A0D6B14AACE9500E83E91 /* slot1_r4.cpp in Sources */, AB0A0D6C14AACE9500E83E91 /* slot1_retail.cpp in Sources */, + AB0A0D9C14AACE9500E83E91 /* slot1_retail_nand.cpp in Sources */, AB0A0D6D14AACE9500E83E91 /* slot2_expMemory.cpp in Sources */, AB0A0D6E14AACE9500E83E91 /* slot2_gbagame.cpp in Sources */, AB0A0D6F14AACE9500E83E91 /* slot2_guitarGrip.cpp in Sources */, @@ -1744,52 +1896,36 @@ AB0A0D7214AACE9500E83E91 /* slot2_paddle.cpp in Sources */, AB0A0D7314AACE9500E83E91 /* slot2_piano.cpp in Sources */, AB0A0D7414AACE9500E83E91 /* slot2_rumblepak.cpp in Sources */, - AB0A0D7514AACE9500E83E91 /* metaspu.cpp in Sources */, + ABF4008014B4F1C000578AE7 /* sndOSX.cpp in Sources */, AB0A0D7614AACE9500E83E91 /* SndOut.cpp in Sources */, - AB0A0D7714AACE9500E83E91 /* AAFilter.cpp in Sources */, - AB0A0D7814AACE9500E83E91 /* cpu_detect_x86_gcc.cpp in Sources */, - AB0A0D7914AACE9500E83E91 /* FIFOSampleBuffer.cpp in Sources */, - AB0A0D7A14AACE9500E83E91 /* FIRFilter.cpp in Sources */, - AB0A0D7B14AACE9500E83E91 /* mmx_optimized.cpp in Sources */, - AB0A0D7C14AACE9500E83E91 /* RateTransposer.cpp in Sources */, AB0A0D7D14AACE9500E83E91 /* SoundTouch.cpp in Sources */, + AB0A0D6514AACE9500E83E91 /* SPU.cpp in Sources */, AB0A0D7E14AACE9500E83E91 /* sse_optimized.cpp in Sources */, - AB0A0D7F14AACE9500E83E91 /* TDStretch.cpp in Sources */, - AB0A0D8014AACE9500E83E91 /* WavFile.cpp in Sources */, - AB0A0D8114AACE9500E83E91 /* Timestretcher.cpp in Sources */, - AB0A0D8214AACE9500E83E91 /* ConvertUTF.c in Sources */, - AB0A0D8314AACE9500E83E91 /* datetime.cpp in Sources */, - AB0A0D8414AACE9500E83E91 /* crc.cpp in Sources */, - AB0A0D8514AACE9500E83E91 /* decrypt.cpp in Sources */, - AB0A0D8614AACE9500E83E91 /* header.cpp in Sources */, - AB0A0D8714AACE9500E83E91 /* dlditool.cpp in Sources */, - AB0A0D8814AACE9500E83E91 /* emufat.cpp in Sources */, - AB0A0D8914AACE9500E83E91 /* guid.cpp in Sources */, - AB0A0D8A14AACE9500E83E91 /* cache.cpp in Sources */, - AB0A0D8B14AACE9500E83E91 /* directory.cpp in Sources */, - AB0A0D8C14AACE9500E83E91 /* disc.cpp in Sources */, - AB0A0D8D14AACE9500E83E91 /* fatdir.cpp in Sources */, - AB0A0D8E14AACE9500E83E91 /* fatfile.cpp in Sources */, - AB0A0D8F14AACE9500E83E91 /* file_allocation_table.cpp in Sources */, - AB0A0D9014AACE9500E83E91 /* filetime.cpp in Sources */, - AB0A0D9114AACE9500E83E91 /* libfat.cpp in Sources */, - AB0A0D9214AACE9500E83E91 /* libfat_public_api.cpp in Sources */, - AB0A0D9314AACE9500E83E91 /* lock.cpp in Sources */, - AB0A0D9414AACE9500E83E91 /* partition.cpp in Sources */, - AB0A0D9514AACE9500E83E91 /* md5.cpp in Sources */, AB0A0D9614AACE9500E83E91 /* task.cpp in Sources */, - AB0A0D9714AACE9500E83E91 /* vfat.cpp in Sources */, - AB0A0D9814AACE9500E83E91 /* xstring.cpp in Sources */, - AB0A0D9914AACE9500E83E91 /* rom_info.m in Sources */, - AB0A0D9A14AACE9500E83E91 /* speed_limit_selection_window.mm in Sources */, - AB0A0D9C14AACE9500E83E91 /* slot1_retail_nand.cpp in Sources */, + AB0A0D7F14AACE9500E83E91 /* TDStretch.cpp in Sources */, + AB0A0D6614AACE9500E83E91 /* texcache.cpp in Sources */, + AB0A0D6714AACE9500E83E91 /* thumb_instructions.cpp in Sources */, + AB0A0D8114AACE9500E83E91 /* Timestretcher.cpp in Sources */, AB0A0D9D14AACE9500E83E91 /* tinystr.cpp in Sources */, AB0A0D9E14AACE9500E83E91 /* tinyxml.cpp in Sources */, AB0A0D9F14AACE9500E83E91 /* tinyxmlerror.cpp in Sources */, AB0A0DA014AACE9500E83E91 /* tinyxmlparser.cpp in Sources */, - ABF4008014B4F1C000578AE7 /* sndOSX.cpp in Sources */, + AB0A0D6814AACE9500E83E91 /* version.cpp in Sources */, + AB0A0D9714AACE9500E83E91 /* vfat.cpp in Sources */, + AB0A0D8014AACE9500E83E91 /* WavFile.cpp in Sources */, + AB0A0D6914AACE9500E83E91 /* wifi.cpp in Sources */, + AB0A0D9814AACE9500E83E91 /* xstring.cpp in Sources */, + ABAC890B14B7943E001B299F /* main.m in Sources */, + AB0A0D3C14AACE9500E83E91 /* screen_state.m in Sources */, + AB73B12B14BDA01C00F49C92 /* appDelegate_legacy.mm in Sources */, ABBF053114B5436E00E505A0 /* cocoa_file.mm in Sources */, + AB0A0D3D14AACE9500E83E91 /* cocoa_input.mm in Sources */, AB8FE37614B652EC009E20B1 /* cocoa_util.mm in Sources */, + AB73B12C14BDA01C00F49C92 /* emuWindowDelegate_legacy.mm in Sources */, + AB0A0D3E14AACE9500E83E91 /* input.mm in Sources */, + AB0A0D4114AACE9500E83E91 /* nds_control.mm in Sources */, + AB0A0D4214AACE9500E83E91 /* preferences.mm in Sources */, + AB0A0D4514AACE9500E83E91 /* video_output_view.mm in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1797,55 +1933,68 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - ABFE4245143E32F0009A3CCE /* about.m in Sources */, - ABFE4247143E32F0009A3CCE /* screen_state.m in Sources */, - ABFE4248143E32F0009A3CCE /* cocoa_input.mm in Sources */, - ABFE4249143E32F0009A3CCE /* input.mm in Sources */, - ABFE424A143E32F0009A3CCE /* main_window.mm in Sources */, - ABFE424B143E32F0009A3CCE /* main.mm in Sources */, - ABFE424C143E32F0009A3CCE /* nds_control.mm in Sources */, - ABFE424D143E32F0009A3CCE /* preferences.mm in Sources */, - ABFE424E143E32F0009A3CCE /* screenshot.mm in Sources */, - ABFE4250143E32F0009A3CCE /* video_output_view.mm in Sources */, + ABFE428D143E32F0009A3CCE /* ConvertUTF.c in Sources */, + ABFE4282143E32F0009A3CCE /* AAFilter.cpp in Sources */, ABFE4251143E32F0009A3CCE /* addons.cpp in Sources */, ABFE4252143E32F0009A3CCE /* arm_instructions.cpp in Sources */, ABFE4253143E32F0009A3CCE /* armcpu.cpp in Sources */, ABFE4254143E32F0009A3CCE /* bios.cpp in Sources */, + ABFE4295143E32F0009A3CCE /* cache.cpp in Sources */, ABFE4255143E32F0009A3CCE /* cheatSystem.cpp in Sources */, ABFE4256143E32F0009A3CCE /* common.cpp in Sources */, ABFE4257143E32F0009A3CCE /* cp15.cpp in Sources */, + ABFE4283143E32F0009A3CCE /* cpu_detect_x86_gcc.cpp in Sources */, + ABFE428F143E32F0009A3CCE /* crc.cpp in Sources */, + ABFE428E143E32F0009A3CCE /* datetime.cpp in Sources */, ABFE4258143E32F0009A3CCE /* debug.cpp in Sources */, + ABFE4290143E32F0009A3CCE /* decrypt.cpp in Sources */, + ABFE4296143E32F0009A3CCE /* directory.cpp in Sources */, ABFE4259143E32F0009A3CCE /* Disassembler.cpp in Sources */, + ABFE4297143E32F0009A3CCE /* disc.cpp in Sources */, + ABFE4292143E32F0009A3CCE /* dlditool.cpp in Sources */, ABFE425A143E32F0009A3CCE /* driver.cpp in Sources */, + ABFE4293143E32F0009A3CCE /* emufat.cpp in Sources */, ABFE425B143E32F0009A3CCE /* emufile.cpp in Sources */, + ABFE4298143E32F0009A3CCE /* fatdir.cpp in Sources */, + ABFE4299143E32F0009A3CCE /* fatfile.cpp in Sources */, ABFE425C143E32F0009A3CCE /* FIFO.cpp in Sources */, + ABFE4284143E32F0009A3CCE /* FIFOSampleBuffer.cpp in Sources */, + ABFE429A143E32F0009A3CCE /* file_allocation_table.cpp in Sources */, + ABFE429B143E32F0009A3CCE /* filetime.cpp in Sources */, + ABFE4285143E32F0009A3CCE /* FIRFilter.cpp in Sources */, ABFE425D143E32F0009A3CCE /* firmware.cpp in Sources */, ABFE425E143E32F0009A3CCE /* fs-linux.cpp in Sources */, ABFE425F143E32F0009A3CCE /* gfx3d.cpp in Sources */, - ABFE4260143E32F0009A3CCE /* GPU_osd_stub.cpp in Sources */, ABFE4261143E32F0009A3CCE /* GPU.cpp in Sources */, + ABFE4260143E32F0009A3CCE /* GPU_osd_stub.cpp in Sources */, + ABFE4294143E32F0009A3CCE /* guid.cpp in Sources */, + ABFE4291143E32F0009A3CCE /* header.cpp in Sources */, + ABFE429C143E32F0009A3CCE /* libfat.cpp in Sources */, + ABFE429D143E32F0009A3CCE /* libfat_public_api.cpp in Sources */, + ABFE429E143E32F0009A3CCE /* lock.cpp in Sources */, ABFE4262143E32F0009A3CCE /* matrix.cpp in Sources */, ABFE4263143E32F0009A3CCE /* mc.cpp in Sources */, + ABFE42A0143E32F0009A3CCE /* md5.cpp in Sources */, + ABFE4280143E32F0009A3CCE /* metaspu.cpp in Sources */, ABFE4264143E32F0009A3CCE /* mic.cpp in Sources */, ABFE4265143E32F0009A3CCE /* MMU.cpp in Sources */, + ABFE4286143E32F0009A3CCE /* mmx_optimized.cpp in Sources */, ABFE4266143E32F0009A3CCE /* movie.cpp in Sources */, ABFE4267143E32F0009A3CCE /* NDSSystem.cpp in Sources */, + ABFE429F143E32F0009A3CCE /* partition.cpp in Sources */, ABFE4268143E32F0009A3CCE /* path.cpp in Sources */, ABFE4269143E32F0009A3CCE /* rasterize.cpp in Sources */, + ABFE4287143E32F0009A3CCE /* RateTransposer.cpp in Sources */, ABFE426A143E32F0009A3CCE /* readwrite.cpp in Sources */, ABFE426B143E32F0009A3CCE /* render3D.cpp in Sources */, ABFE426C143E32F0009A3CCE /* ROMReader.cpp in Sources */, ABFE426D143E32F0009A3CCE /* rtc.cpp in Sources */, ABFE426E143E32F0009A3CCE /* saves.cpp in Sources */, ABFE426F143E32F0009A3CCE /* slot1.cpp in Sources */, - ABFE4270143E32F0009A3CCE /* SPU.cpp in Sources */, - ABFE4271143E32F0009A3CCE /* texcache.cpp in Sources */, - ABFE4272143E32F0009A3CCE /* thumb_instructions.cpp in Sources */, - ABFE4273143E32F0009A3CCE /* version.cpp in Sources */, - ABFE4274143E32F0009A3CCE /* wifi.cpp in Sources */, ABFE4275143E32F0009A3CCE /* slot1_none.cpp in Sources */, ABFE4276143E32F0009A3CCE /* slot1_r4.cpp in Sources */, ABFE4277143E32F0009A3CCE /* slot1_retail.cpp in Sources */, + ABFE42A7143E32F0009A3CCE /* slot1_retail_nand.cpp in Sources */, ABFE4278143E32F0009A3CCE /* slot2_expMemory.cpp in Sources */, ABFE4279143E32F0009A3CCE /* slot2_gbagame.cpp in Sources */, ABFE427A143E32F0009A3CCE /* slot2_guitarGrip.cpp in Sources */, @@ -1854,52 +2003,36 @@ ABFE427D143E32F0009A3CCE /* slot2_paddle.cpp in Sources */, ABFE427E143E32F0009A3CCE /* slot2_piano.cpp in Sources */, ABFE427F143E32F0009A3CCE /* slot2_rumblepak.cpp in Sources */, - ABFE4280143E32F0009A3CCE /* metaspu.cpp in Sources */, + ABF4008114B4F1C000578AE7 /* sndOSX.cpp in Sources */, ABFE4281143E32F0009A3CCE /* SndOut.cpp in Sources */, - ABFE4282143E32F0009A3CCE /* AAFilter.cpp in Sources */, - ABFE4283143E32F0009A3CCE /* cpu_detect_x86_gcc.cpp in Sources */, - ABFE4284143E32F0009A3CCE /* FIFOSampleBuffer.cpp in Sources */, - ABFE4285143E32F0009A3CCE /* FIRFilter.cpp in Sources */, - ABFE4286143E32F0009A3CCE /* mmx_optimized.cpp in Sources */, - ABFE4287143E32F0009A3CCE /* RateTransposer.cpp in Sources */, ABFE4288143E32F0009A3CCE /* SoundTouch.cpp in Sources */, + ABFE4270143E32F0009A3CCE /* SPU.cpp in Sources */, ABFE4289143E32F0009A3CCE /* sse_optimized.cpp in Sources */, - ABFE428A143E32F0009A3CCE /* TDStretch.cpp in Sources */, - ABFE428B143E32F0009A3CCE /* WavFile.cpp in Sources */, - ABFE428C143E32F0009A3CCE /* Timestretcher.cpp in Sources */, - ABFE428D143E32F0009A3CCE /* ConvertUTF.c in Sources */, - ABFE428E143E32F0009A3CCE /* datetime.cpp in Sources */, - ABFE428F143E32F0009A3CCE /* crc.cpp in Sources */, - ABFE4290143E32F0009A3CCE /* decrypt.cpp in Sources */, - ABFE4291143E32F0009A3CCE /* header.cpp in Sources */, - ABFE4292143E32F0009A3CCE /* dlditool.cpp in Sources */, - ABFE4293143E32F0009A3CCE /* emufat.cpp in Sources */, - ABFE4294143E32F0009A3CCE /* guid.cpp in Sources */, - ABFE4295143E32F0009A3CCE /* cache.cpp in Sources */, - ABFE4296143E32F0009A3CCE /* directory.cpp in Sources */, - ABFE4297143E32F0009A3CCE /* disc.cpp in Sources */, - ABFE4298143E32F0009A3CCE /* fatdir.cpp in Sources */, - ABFE4299143E32F0009A3CCE /* fatfile.cpp in Sources */, - ABFE429A143E32F0009A3CCE /* file_allocation_table.cpp in Sources */, - ABFE429B143E32F0009A3CCE /* filetime.cpp in Sources */, - ABFE429C143E32F0009A3CCE /* libfat.cpp in Sources */, - ABFE429D143E32F0009A3CCE /* libfat_public_api.cpp in Sources */, - ABFE429E143E32F0009A3CCE /* lock.cpp in Sources */, - ABFE429F143E32F0009A3CCE /* partition.cpp in Sources */, - ABFE42A0143E32F0009A3CCE /* md5.cpp in Sources */, ABFE42A1143E32F0009A3CCE /* task.cpp in Sources */, - ABFE42A2143E32F0009A3CCE /* vfat.cpp in Sources */, - ABFE42A3143E32F0009A3CCE /* xstring.cpp in Sources */, - ABFE42A4143E32F0009A3CCE /* rom_info.m in Sources */, - ABFE42A5143E32F0009A3CCE /* speed_limit_selection_window.mm in Sources */, - ABFE42A7143E32F0009A3CCE /* slot1_retail_nand.cpp in Sources */, + ABFE428A143E32F0009A3CCE /* TDStretch.cpp in Sources */, + ABFE4271143E32F0009A3CCE /* texcache.cpp in Sources */, + ABFE4272143E32F0009A3CCE /* thumb_instructions.cpp in Sources */, + ABFE428C143E32F0009A3CCE /* Timestretcher.cpp in Sources */, ABFE42A8143E32F0009A3CCE /* tinystr.cpp in Sources */, ABFE42A9143E32F0009A3CCE /* tinyxml.cpp in Sources */, ABFE42AA143E32F0009A3CCE /* tinyxmlerror.cpp in Sources */, ABFE42AB143E32F0009A3CCE /* tinyxmlparser.cpp in Sources */, - ABF4008114B4F1C000578AE7 /* sndOSX.cpp in Sources */, + ABFE4273143E32F0009A3CCE /* version.cpp in Sources */, + ABFE42A2143E32F0009A3CCE /* vfat.cpp in Sources */, + ABFE428B143E32F0009A3CCE /* WavFile.cpp in Sources */, + ABFE4274143E32F0009A3CCE /* wifi.cpp in Sources */, + ABFE42A3143E32F0009A3CCE /* xstring.cpp in Sources */, + ABAC890A14B7943E001B299F /* main.m in Sources */, + ABFE4247143E32F0009A3CCE /* screen_state.m in Sources */, + AB73B12D14BDA01C00F49C92 /* appDelegate_legacy.mm in Sources */, ABBF053214B5436E00E505A0 /* cocoa_file.mm in Sources */, + ABFE4248143E32F0009A3CCE /* cocoa_input.mm in Sources */, AB8FE37814B652EC009E20B1 /* cocoa_util.mm in Sources */, + AB73B12E14BDA01C00F49C92 /* emuWindowDelegate_legacy.mm in Sources */, + ABFE4249143E32F0009A3CCE /* input.mm in Sources */, + ABFE424C143E32F0009A3CCE /* nds_control.mm in Sources */, + ABFE424D143E32F0009A3CCE /* preferences.mm in Sources */, + ABFE4250143E32F0009A3CCE /* video_output_view.mm in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1920,16 +2053,16 @@ name = Localizable.strings; sourceTree = ""; }; - ABBF04BC14B519A500E505A0 /* MainMenu (Legacy).xib */ = { + AB0191D214BD72EC004CB612 /* MainMenu (Legacy).xib */ = { isa = PBXVariantGroup; children = ( ABBF045E14B5144D00E505A0 /* English */, - ABBF04C114B519CD00E505A0 /* French */, - ABBF04C314B519DF00E505A0 /* Italian */, - ABBF04C414B519E400E505A0 /* Japanese */, - ABBF04C514B519EA00E505A0 /* Chinese */, - ABBF04C614B519F000E505A0 /* Norwegian */, - ABBF04C714B519F500E505A0 /* Romanian */, + AB0191D714BD72FC004CB612 /* French */, + AB0191D814BD72FF004CB612 /* Italian */, + AB0191E614BD741B004CB612 /* Japanese */, + AB0191E714BD741F004CB612 /* Chinese */, + AB0191E814BD7423004CB612 /* Norwegian */, + AB0191E914BD7425004CB612 /* Romanian */, ); name = "MainMenu (Legacy).xib"; sourceTree = ""; diff --git a/desmume/src/cocoa/cocoa_file.h b/desmume/src/cocoa/cocoa_file.h index 557ee3516..67f3bcb20 100644 --- a/desmume/src/cocoa/cocoa_file.h +++ b/desmume/src/cocoa/cocoa_file.h @@ -40,6 +40,7 @@ + (void) setupAllFilePaths; + (BOOL) setupAllAppDirectories; + (NSURL *) saveStateURL; ++ (BOOL) saveScreenshot:(NSURL *)fileURL bitmapData:(NSBitmapImageRep *)bitmapImageRep fileType:(NSBitmapImageFileType)fileType; + (BOOL) saveStateExistsForSlot:(NSURL *)romURL slotNumber:(NSUInteger)slotNumber; + (BOOL) isSaveStateSlotExtension:(NSString *)extension; + (NSString *) getSaveSlotFileName:(NSURL *)romURL slotNumber:(NSUInteger)slotNumber; diff --git a/desmume/src/cocoa/cocoa_file.mm b/desmume/src/cocoa/cocoa_file.mm index 0d484073f..a9efcd93e 100644 --- a/desmume/src/cocoa/cocoa_file.mm +++ b/desmume/src/cocoa/cocoa_file.mm @@ -222,6 +222,53 @@ return [CocoaDSFile getURLUserAppSupport:@STATEKEY appVersion:nil]; } ++ (BOOL) saveScreenshot:(NSURL *)fileURL bitmapData:(NSBitmapImageRep *)bitmapImageRep fileType:(NSBitmapImageFileType)fileType +{ + BOOL result = NO; + + if (fileURL == nil || bitmapImageRep == nil) + { + return result; + } + + NSString *fileExt = nil; + switch (fileType) + { + case NSTIFFFileType: + fileExt = @"tiff"; + break; + + case NSBMPFileType: + fileExt = @"bmp"; + break; + + case NSGIFFileType: + fileExt = @"gif"; + break; + + case NSJPEGFileType: + fileExt = @"jpg"; + break; + + case NSPNGFileType: + fileExt = @"png"; + break; + + case NSJPEG2000FileType: + fileExt = @"jp2"; + break; + + default: + break; + } + + NSURL *saveFileURL = [NSURL fileURLWithPath:[[fileURL path] stringByAppendingPathExtension:fileExt]]; + + result = [[bitmapImageRep representationUsingType:fileType properties:[NSDictionary dictionary]] writeToURL:saveFileURL atomically:NO]; + + return result; +} + /******************************************************************************************** fileKind: diff --git a/desmume/src/cocoa/cocoa_globals.h b/desmume/src/cocoa/cocoa_globals.h index 361dbd472..ec32a26fd 100644 --- a/desmume/src/cocoa/cocoa_globals.h +++ b/desmume/src/cocoa/cocoa_globals.h @@ -41,6 +41,8 @@ #define NSSTRING_TITLE_ENABLE_CHEATS NSLocalizedString(@"Enable Cheats", nil) #define NSSTRING_TITLE_DISABLE_HUD NSLocalizedString(@"Disable HUD", nil) #define NSSTRING_TITLE_ENABLE_HUD NSLocalizedString(@"Enable HUD", nil) +#define NSSTRING_TITLE_HIDE_STATUS_BAR NSLocalizedString(@"Hide Status Bar", nil) +#define NSSTRING_TITLE_SHOW_STATUS_BAR NSLocalizedString(@"Show Status Bar", nil) #define NSSTRING_TITLE_SPEED_1X NSLocalizedString(@"Speed 1x", nil) #define NSSTRING_TITLE_SPEED_2X NSLocalizedString(@"Speed 2x", nil) #define NSSTRING_TITLE_SLOT_NUMBER NSLocalizedString(@"Slot %d", nil) @@ -85,6 +87,27 @@ #define NSSTRING_DISPLAYMODE_TOUCH NSLocalizedString(@"Touch", nil) #define NSSTRING_DISPLAYMODE_COMBO NSLocalizedString(@"Combo", nil) +// LEGACY STRINGS +#define NSSTRING_TITLE_OPEN_ROM_PANEL_LEGACY NSLocalizedString(@"Open ROM...", nil) +#define NSSTRING_TITLE_OPEN_STATE_FILE_PANEL_LEGACY NSLocalizedString(@"Load State From...", nil) +#define NSSTRING_TITLE_SAVE_STATE_FILE_PANEL_LEGACY NSLocalizedString(@"Save State...", nil) +#define NSSTRING_STATUS_ROM_UNLOADED_LEGACY NSLocalizedString(@"No ROM Loaded", nil) +#define NSSTRING_STATUS_ROM_LOADED_LEGACY NSLocalizedString(@"ROM Loaded", nil) +#define NSSTRING_STATUS_ROM_LOADING_FAILED_LEGACY NSLocalizedString(@"Couldn't load ROM", nil) +#define NSSTRING_STATUS_EMULATOR_EXECUTING_LEGACY NSLocalizedString(@"Emulation Executing", nil) +#define NSSTRING_STATUS_EMULATOR_PAUSED_LEGACY NSLocalizedString(@"Emulation Paused", nil) +#define NSSTRING_STATUS_EMULATOR_RESET_LEGACY NSLocalizedString(@"Emulation Reset", nil) +#define NSSTRING_ERROR_TITLE_LEGACY NSLocalizedString(@"Error", nil) +#define NSSTRING_ERROR_GENERIC_LEGACY NSLocalizedString(@"An emulation error occurred", nil) +#define NSSTRING_ERROR_SCREENSHOT_FAILED_LEGACY NSLocalizedString(@"Couldn't create the screenshot image", nil) +#define NSSTRING_MESSAGE_TITLE_LEGACY NSLocalizedString(@"DeSmuME Emulator", nil) +#define NSSTRING_MESSAGE_ASK_CLOSE_LEGACY NSLocalizedString(@"Are you sure you want to close the ROM?", nil) + +#define FILENAME_README "README" +#define FILENAME_COPYING "COPYING" +#define FILENAME_AUTHORS "AUTHORS" +#define FILENAME_CHANGELOG "ChangeLog" + #define PATH_CONFIG_DIRECTORY_0_9_6 "~/.config/desmume" #define FILE_EXT_FIRMWARE_CONFIG "dfc" @@ -113,7 +136,9 @@ #define WINDOW_STATUS_BAR_HEIGHT 24 // Height of an emulation window status bar in pixels. +#define SPEED_SCALAR_QUARTER 0.25 // Speed scalar for quarter execution speed. #define SPEED_SCALAR_HALF 0.5 // Speed scalar for half execution speed. +#define SPEED_SCALAR_THREE_QUARTER 0.75 // Speed scalar for three quarters execution speed. #define SPEED_SCALAR_NORMAL 1.0 // Speed scalar for normal execution speed. #define SPEED_SCALAR_DOUBLE 2.0 // Speed scalar for double execution speed. #define SPEED_SCALAR_MIN 0.005 // Lower limit for the speed multiplier. diff --git a/desmume/src/cocoa/cocoa_util.h b/desmume/src/cocoa/cocoa_util.h index c67ae8cca..30c3a71a2 100644 --- a/desmume/src/cocoa/cocoa_util.h +++ b/desmume/src/cocoa/cocoa_util.h @@ -81,7 +81,7 @@ #ifdef __cplusplus extern "C" { -#endif +#endif uint32_t RGBA5551ToRGBA8888(const uint16_t color16); uint32_t RGBA8888ToRGB888(const uint32_t color24); diff --git a/desmume/src/cocoa/images/Icon_Execute_420x420.png b/desmume/src/cocoa/images/Icon_Execute_420x420.png new file mode 100644 index 0000000000000000000000000000000000000000..2d577c8c2a18eada7fd9e803202839fac7a0932e GIT binary patch literal 24810 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 literal 0 HcmV?d00001 diff --git a/desmume/src/cocoa/images/Icon_Pause_420x420.png b/desmume/src/cocoa/images/Icon_Pause_420x420.png new file mode 100644 index 0000000000000000000000000000000000000000..9bd6fe28531e51c9241b6e287d1492c9e44d4e49 GIT binary patch literal 26208 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

*@#BO?RAH~;rQ-N5(XP4e6NTE1cBii;HI$b3 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

Fu3p}?X&{7N#p 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

  • (WUHL4 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 literal 0 HcmV?d00001 diff --git a/desmume/src/cocoa/images/Icon_Speed2x_420x420.png b/desmume/src/cocoa/images/Icon_Speed2x_420x420.png new file mode 100644 index 0000000000000000000000000000000000000000..674ab7de6dffa3225fcddc5e34fc936267f054a0 GIT binary patch literal 118654 zcmX_mWmFt%)9v8y4#5T|I0S+OcMI{jiAEp3++X`6OTt)d9_uKu(jj&9ZUy_WS5)M3>l5nISc04sbIRd(L z74wCa84LhOpIR?jv@nc1mY6h9(i6&V18J{=<~K`zV$-K{lUar<0AiI z#WlEo3a$qpIYp9P@rxgFsW1t~R^U+o;PxJqpg$s|JpdiP-h}+;D+L7L!H19UGq4A) z3jpCZiv$nokpuOxdI}uLTf$$50=y8hwDg*C_4G{E*5iSAn{QQu=Q*FMz-+NR02Yf(b_?*#7i^M`wQ_buwTlkRf8UTR}s@8Ml>VpnynBRE}TF& zKsEDjva`wX48_0s1yEzf58)ZlSfXnTbtglEuHn?Pa}NMqwcGX1(ZWOdSp;rRxxQZr zyh`Ly0sPFQ5*z>kJyA*~mC<^EA$R~lG{>L5Mu_O97oVXA_ERs+S})Rz0cVgfW&bZ> zbYVmjzfX<^bQJ-@v>_8U#PkNtbArSiJ&G0~iT0>Wzf@aLzuBWb8Nz4v(suYGKno4S zV;PdKgh3cZXi&t!s5qc&rv!fm}XFSff?})gFFpJXPxojp;AegTM*xDokcb zA|$CHt0BK6Swi-Sk^^G}feQgDNbwg9FtJ3Yfw~Rju^-=vjWtw5l7V6YGZu>(-7`$2 zpNkSRT!f9LH4aj$wm@YDb4Gl|R*B-6p%la+Nl1}6vSMOg2gjYnK=ye!cn`eSx5vIm zv`2oWjR-apbSQXG-l0_*wUQ>-N8jhzhc!)O6H?93P+Bj^Rl)cYt0i2S+oV*j7+QkG z;he!e5r``#Q&^doJWFVSXK`;?edN@Jv7SsKpE|8RGj=R-lzIepGa5?5tc-YrF#ODR_^11p>=6DgaQ@|J{_nU~n92o(5ezJ|kU_R02r z7b#H8sny@@7$ie7Ca8B~Ah$*-4{`SY(obDGvFznS-=6kL+#dO@tTdNfgk73lyZ}-C z)G5}k`RtD>G$c)ZPKHZl9n?p<%LN z>UL0k>u%~a%vg56S?yYCArojx*}d#UfH3E@rk^N zh4e3=Z>)=KhoD2yB51SOK+8>wp{b;)#Z;f|t}0nb4=?iW7y+JD z)4RImGoh%QRv{dr*nrA_{oYD)i{U?UmE`w_X_N7jmZ-rBK1U1FaE1qlk$pbMG{K?4 z>LCI#_F)=?zgbhixc*)f`MD|jB$^_+0WxR(&RxwY{e_;tjLC{`g{zIDO<<78Omlo* z1FRwSL*^4V6MYq@?T@a_m$U289qjh0KQS8&4-|U_yMHgK!zSTw;^?iTQz<%UFeJaNXO0ZDcbuNiy7s zb$wg~j3y&ulW@_IiWco6JzSl+sk&MBMEEFoN_p1jiL>$g(bYJv%!};zGt6I@+X+pD zAu{TW#2N>k6;|AJd=Bobh`Ts2pF`AOEBIO>n&@rjzn7n>r&jrNQhUf*`|I_N2J|*U zSf3)PBJKx!pRO&Q>3-K>*4%6~d

    *@#BO?RAH~;rQ-N5(XP4e6NTE1cBii;HI$b3 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 z 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 literal 0 HcmV?d00001 diff --git a/desmume/src/cocoa/images/Icon_VolumeFull_16x16.png b/desmume/src/cocoa/images/Icon_VolumeFull_16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..52b34e81b4298e1d0c4d27b625793f6561c623d3 GIT binary patch literal 3003 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 literal 0 HcmV?d00001 diff --git a/desmume/src/cocoa/images/Icon_VolumeMute_16x16.png b/desmume/src/cocoa/images/Icon_VolumeMute_16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..f7bf5c991c2298d98522b07941bfec66a5ea7050 GIT binary patch literal 2975 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 VyukL82|oY;002ovPDHLkV1n_}uU7y7 literal 0 HcmV?d00001 diff --git a/desmume/src/cocoa/images/Icon_VolumeOneThird_16x16.png b/desmume/src/cocoa/images/Icon_VolumeOneThird_16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..dbde0e92ac23ff003cb45413b7e8b1c1962f7a21 GIT binary patch literal 2877 zcmV-D3&Qk?P)EX>4Tx0C?J+Q+HUC_ZB|i_hk=OLfG)Jmu!ImA|tE_$Pihg5Rw34gb)%y#f69p zRumNxoJdu~g4GI0orvO~D7a@qiilc^Ra`jkAKa(4eR}Wh?fcjJyyu+f{LXpL4}cL8 zCXwc%Y5+M>g*-agACFH+#L2yY0u@N$1RxOR%fe>`#Q*^C19^CUbg)1C0k3ZW0swH; zE+i7i;s1lWP$pLZAdvvzA`<5d0gzGv$SzdK6adH=0I*ZDWC{S3003-xd_p1ssto|_ z^hrJi0NAOM+!p}Yq8zCR0F40vnJ7mj0zkU}U{!%qECRs70HCZuA}$2Lt^t5qwlYTo zfV~9(c8*w(4?ti5fSE!p%m5%b0suoE6U_r4Oaq`W(!b!TUvP!ENC5!A%azTSOVTqG zxRuZvck=My;vwR~Y_URN7by^C3FIQ2mzyIKNaq7g&I|wm8u`(|{y0C7=jP<$=4R(? z@ASo@{%i1WB0eGU-~POe0t5gMPS5Y!U*+Z218~Oyuywy{sapWrRsd+<`CT*H37}dE z(0cicc{uz)9-g64$UGe!3JVMEC1RnyFyo6p|1;rl;ER6t{6HT5+j{T-ahgDxt-zy$ z{c&M#cCJ#6=gR~_F>d$gBmT#QfBlXr(c(0*Tr3re@mPttP$EsodAU-NL?OwQ;u7h9 zGVvdl{RxwI4FIf$Pry#L2er#=z<%xl0*ek<(slqqe)BDi8VivC5N9+pdG`PSlfU_o zKq~;2Moa!tiTSO!5zH77Xo1hL_iEAz&sE_ z2IPPo3ZWR5K^auQI@koYumc*P5t`u;w81er4d>tzT!HIw7Y1M$p28Tsh6w~g$Osc* zAv%Z=Vvg7%&IlKojszlMNHmgwq#)^t6j36@$a16tsX}UzT}UJHEpik&ja)$bklV;0 zGK&0)yhkyVfwEBp)B<%txu_o+ipHRG(R4HqU4WLNYtb6C9zB4zqNmYI=yh}eeTt4_ zfYC7yW{lZkT#ScBV2M~7CdU?I?5=ix(HVZgM=}{CnA%mPqZa^68Xe5gFH?u96Et<2 zCC!@_L(8Nsqt(!wX=iEoXfNq>x(VHb9z~bXm(pwK2kGbOgYq4YG!XMxcgB zqf}$J#u<$v7REAV@mNCEa#jQDENhreVq3EL>`ZnA`x|yIdrVV9bE;;nW|3x{=5fsd z4#u(I@HyF>O3oq94bFQl11&!-vDRv>X03j$H`;pIzS?5#a_tuF>)P*iaGgM%ES>c_ zZ94aL3A#4AQM!e?+jYlFJ5+DSzi0S9#6BJCZ5(XZOGfi zTj0IRdtf>~J!SgN=>tB-J_4V5pNGDtz9Qc}z9W9tewls;{GR(e`pf-~_`l(K@)q$< z1z-We0p$U`ff|9c18V~x1epY-2Q>wa1-k|>3_cY?3<(WcA99m#z!&lx`C~KOXDpi0 z70L*m6G6C?@k ziR8rC#65}Qa{}jVnlqf_npBo_W3J`gqPZ95>CVfZcRX1&S&)1jiOPpx423?lIEROmG(H@JAFg?XogQlb;dIZPf{y+kr|S? zBlAsGMAqJ{&)IR=Ejg5&l$@hd4QZCNE7vf$D7Q~$D=U)?Nn}(WA6du22pZOfRS_cv~1-c(_QtNLti0-)8>m`6CO07JR*suu!$(^sg%jf zZm#rNxnmV!m1I@#YM0epR(~oNm0zrItf;Q|utvD%;#W>z)qM4NZQ9!2O1H}G>qzUQ z>u#*~S--DJy=p<#(1!30tsC);y-IHSJr>wyfLop*ExT zdYyk=%U1oZtGB+{Cfe4&-FJKQ4uc&PJKpb5^_C@dOYIJXG+^@gCvI%WcHjN%gI&kHifN$EH?V5MBa9S!3!a?Q1 zC*P)gd*e{(q0YnH!_D8Bf4B7r>qvPk(mKC&tSzH$pgp0z@92!9ogH2sN4~fJe(y2k zV|B+hk5`_cohUu=`Q(C=R&z?UQbnZ;IU-!xL z-sg{9@Vs#JBKKn3CAUkhJ+3`ResKNaNUvLO>t*-L?N>ambo5Q@JJIjcfBI^`)pOVQ z*DhV3dA;w(>>IakCfyvkCA#(acJ}QTcM9%I++BK)c(44v+WqPW`VZ=VwEnSWz-{38 zV8CF{!&wjS4he^z{*?dIhvCvk%tzHDMk9@nogW_?4H~`jWX_Y}r?RIL&&qyQ|9R_k ztLNYS;`>X_Sp3-V3;B!Bzpi zNklQLAM_b?tWf-jkR^iqbSO%a9tLhE7M9~E4*3>(R+8CR*hE>9_ zz`o|PM#EI@=(T-vDhuqwIt#Fm)h9i?M!zoD#u$AyHp4jh>eDQsk6fGbf}V2%VV?7I b_`y5@ZyP7zNfT*_00000NkvXXu0mjfUxI@3 literal 0 HcmV?d00001 diff --git a/desmume/src/cocoa/images/Icon_VolumeTwoThird_16x16.png b/desmume/src/cocoa/images/Icon_VolumeTwoThird_16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..0486332e3dbb70cf9f1693034dfddaebc6e1e568 GIT binary patch literal 2937 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 literal 0 HcmV?d00001 diff --git a/desmume/src/cocoa/input.h b/desmume/src/cocoa/input.h index 9399c623b..21d6c5d38 100644 --- a/desmume/src/cocoa/input.h +++ b/desmume/src/cocoa/input.h @@ -27,26 +27,44 @@ @class VideoOutputWindow; @class CocoaDSController; + +@interface ControlsDelegate : NSObject {} + ++ (id)sharedObject; + +@end + @interface InputHandler : NSResponder { @private VideoOutputWindow *my_ds; - CocoaDSController *dsController; + CocoaDSController *cdsController; } //preferences + (NSView*)createPreferencesView:(float)width; + (NSDictionary*)appDefaults; //creation/deletion -- (id)initWithWindow:(VideoOutputWindow*)nds; -- (void)dealloc; +- (id) initWithCdsController:(CocoaDSController *)theController; + +- (void) setCdsController:(CocoaDSController *)theController; +- (CocoaDSController *) cdsController; //keyboard input - (void)keyDown:(NSEvent*)event; - (void)keyUp:(NSEvent*)event; -//mouse input -- (void)mouseDown:(NSEvent*)event; -- (void)mouseDragged:(NSEvent*)event; -- (void)mouseUp:(NSEvent*)event; @end + +#ifdef __cplusplus +extern "C" +{ +#endif + +int testKey(NSString *chars_pressed, NSString *chars_for_key); + +#ifdef __cplusplus +} +#endif + + diff --git a/desmume/src/cocoa/input.mm b/desmume/src/cocoa/input.mm index 051044ad2..18749b785 100644 --- a/desmume/src/cocoa/input.mm +++ b/desmume/src/cocoa/input.mm @@ -19,44 +19,13 @@ #import "input.h" #import "cocoa_input.h" -#import "main_window.h" #import "preferences.h" -unsigned char utf8_return = 0x0D; -unsigned char utf8_right[3] = { 0xEF, 0x9C, 0x83 }; -unsigned char utf8_up[3] = { 0xEF, 0x9C, 0x80 }; -unsigned char utf8_down[3] = { 0xEF, 0x9C, 0x81 }; -unsigned char utf8_left[3] = { 0xEF, 0x9C, 0x82 }; - -@interface ControlsDelegate : NSObject {} -+ (id)sharedObject; -@end - -inline int testKey(NSString *chars_pressed, NSString *chars_for_key) -{ - //Checks for common characters in chars_pressed and chars_for_key - - unichar *buffer1 = (unichar*)malloc([chars_pressed length] * sizeof(unichar)); - unichar *buffer2 = (unichar*)malloc([chars_for_key length] * sizeof(unichar)); - if(!buffer1 || !buffer2)return 0; - - [chars_pressed getCharacters:buffer1]; - [chars_for_key getCharacters:buffer2]; - - int i1, i2; - for(i1 = 0; i1 < [chars_pressed length]; i1++) - for(i2 = 0; i2 < [chars_for_key length]; i2++) - if(buffer1[i1] == buffer2[i2]) - { - free(buffer1); - free(buffer2); - return 1; - } - - free(buffer1); - free(buffer2); - return 0; -} +static unsigned char utf8_return = 0x0D; +static unsigned char utf8_right[3] = { 0xEF, 0x9C, 0x83 }; +static unsigned char utf8_up[3] = { 0xEF, 0x9C, 0x80 }; +static unsigned char utf8_down[3] = { 0xEF, 0x9C, 0x81 }; +static unsigned char utf8_left[3] = { 0xEF, 0x9C, 0x82 }; // @@ -160,24 +129,39 @@ inline int testKey(NSString *chars_pressed, NSString *chars_for_key) return nil; } -- (id)initWithWindow:(VideoOutputWindow*)nds +- (id) initWithCdsController:(CocoaDSController *)theController { self = [super init]; + if(self == nil) + { + return nil; + } - my_ds = nds; - [my_ds retain]; - - dsController = [nds getDSController]; - [dsController retain]; + cdsController = theController; + [cdsController retain]; return self; } - (void)dealloc { + [cdsController release]; + [super dealloc]; } +- (void) setCdsController:(CocoaDSController *)theController +{ + [cdsController release]; + cdsController = theController; + [cdsController retain]; +} + +- (CocoaDSController *) cdsController +{ + return cdsController; +} + - (void)keyDown:(NSEvent*)event { if([event isARepeat])return; @@ -185,18 +169,18 @@ inline int testKey(NSString *chars_pressed, NSString *chars_for_key) NSUserDefaults *settings = [NSUserDefaults standardUserDefaults]; NSString *chars = [event characters]; - if(testKey(chars, [settings stringForKey:PREF_KEY_A ]))[dsController pressA]; - else if(testKey(chars, [settings stringForKey:PREF_KEY_B ]))[dsController pressB]; - else if(testKey(chars, [settings stringForKey:PREF_KEY_SELECT]))[dsController pressSelect]; - else if(testKey(chars, [settings stringForKey:PREF_KEY_START ]))[dsController pressStart]; - else if(testKey(chars, [settings stringForKey:PREF_KEY_RIGHT ]))[dsController pressRight]; - else if(testKey(chars, [settings stringForKey:PREF_KEY_LEFT ]))[dsController pressLeft]; - else if(testKey(chars, [settings stringForKey:PREF_KEY_UP ]))[dsController pressUp]; - else if(testKey(chars, [settings stringForKey:PREF_KEY_DOWN ]))[dsController pressDown]; - else if(testKey(chars, [settings stringForKey:PREF_KEY_R ]))[dsController pressR]; - else if(testKey(chars, [settings stringForKey:PREF_KEY_L ]))[dsController pressL]; - else if(testKey(chars, [settings stringForKey:PREF_KEY_X ]))[dsController pressX]; - else if(testKey(chars, [settings stringForKey:PREF_KEY_Y ]))[dsController pressY]; + if(testKey(chars, [settings stringForKey:PREF_KEY_A ]))[cdsController pressA]; + else if(testKey(chars, [settings stringForKey:PREF_KEY_B ]))[cdsController pressB]; + else if(testKey(chars, [settings stringForKey:PREF_KEY_SELECT]))[cdsController pressSelect]; + else if(testKey(chars, [settings stringForKey:PREF_KEY_START ]))[cdsController pressStart]; + else if(testKey(chars, [settings stringForKey:PREF_KEY_RIGHT ]))[cdsController pressRight]; + else if(testKey(chars, [settings stringForKey:PREF_KEY_LEFT ]))[cdsController pressLeft]; + else if(testKey(chars, [settings stringForKey:PREF_KEY_UP ]))[cdsController pressUp]; + else if(testKey(chars, [settings stringForKey:PREF_KEY_DOWN ]))[cdsController pressDown]; + else if(testKey(chars, [settings stringForKey:PREF_KEY_R ]))[cdsController pressR]; + else if(testKey(chars, [settings stringForKey:PREF_KEY_L ]))[cdsController pressL]; + else if(testKey(chars, [settings stringForKey:PREF_KEY_X ]))[cdsController pressX]; + else if(testKey(chars, [settings stringForKey:PREF_KEY_Y ]))[cdsController pressY]; } - (void)keyUp:(NSEvent*)event @@ -204,39 +188,44 @@ inline int testKey(NSString *chars_pressed, NSString *chars_for_key) NSUserDefaults *settings = [NSUserDefaults standardUserDefaults]; NSString *chars = [event characters]; - if(testKey(chars, [settings stringForKey:PREF_KEY_A ]))[dsController liftA]; - else if(testKey(chars, [settings stringForKey:PREF_KEY_B ]))[dsController liftB]; - else if(testKey(chars, [settings stringForKey:PREF_KEY_SELECT]))[dsController liftSelect]; - else if(testKey(chars, [settings stringForKey:PREF_KEY_START ]))[dsController liftStart]; - else if(testKey(chars, [settings stringForKey:PREF_KEY_RIGHT ]))[dsController liftRight]; - else if(testKey(chars, [settings stringForKey:PREF_KEY_LEFT ]))[dsController liftLeft]; - else if(testKey(chars, [settings stringForKey:PREF_KEY_UP ]))[dsController liftUp]; - else if(testKey(chars, [settings stringForKey:PREF_KEY_DOWN ]))[dsController liftDown]; - else if(testKey(chars, [settings stringForKey:PREF_KEY_R ]))[dsController liftR]; - else if(testKey(chars, [settings stringForKey:PREF_KEY_L ]))[dsController liftL]; - else if(testKey(chars, [settings stringForKey:PREF_KEY_X ]))[dsController liftX]; - else if(testKey(chars, [settings stringForKey:PREF_KEY_Y ]))[dsController liftY]; -} - -- (void)mouseDown:(NSEvent*)event -{ - NSPoint temp = [my_ds windowPointToDSCoords:[event locationInWindow]]; - - if(temp.x >= 0 && temp.y>=0) - { - [dsController touch:temp]; - } -} - -- (void)mouseDragged:(NSEvent*)event -{ - [self mouseDown:event]; -} - -- (void)mouseUp:(NSEvent*)event -{ - [dsController releaseTouch]; + if(testKey(chars, [settings stringForKey:PREF_KEY_A ]))[cdsController liftA]; + else if(testKey(chars, [settings stringForKey:PREF_KEY_B ]))[cdsController liftB]; + else if(testKey(chars, [settings stringForKey:PREF_KEY_SELECT]))[cdsController liftSelect]; + else if(testKey(chars, [settings stringForKey:PREF_KEY_START ]))[cdsController liftStart]; + else if(testKey(chars, [settings stringForKey:PREF_KEY_RIGHT ]))[cdsController liftRight]; + else if(testKey(chars, [settings stringForKey:PREF_KEY_LEFT ]))[cdsController liftLeft]; + else if(testKey(chars, [settings stringForKey:PREF_KEY_UP ]))[cdsController liftUp]; + else if(testKey(chars, [settings stringForKey:PREF_KEY_DOWN ]))[cdsController liftDown]; + else if(testKey(chars, [settings stringForKey:PREF_KEY_R ]))[cdsController liftR]; + else if(testKey(chars, [settings stringForKey:PREF_KEY_L ]))[cdsController liftL]; + else if(testKey(chars, [settings stringForKey:PREF_KEY_X ]))[cdsController liftX]; + else if(testKey(chars, [settings stringForKey:PREF_KEY_Y ]))[cdsController liftY]; } @end +inline int testKey(NSString *chars_pressed, NSString *chars_for_key) +{ + //Checks for common characters in chars_pressed and chars_for_key + + unichar *buffer1 = (unichar*)malloc([chars_pressed length] * sizeof(unichar)); + unichar *buffer2 = (unichar*)malloc([chars_for_key length] * sizeof(unichar)); + if(!buffer1 || !buffer2)return 0; + + [chars_pressed getCharacters:buffer1]; + [chars_for_key getCharacters:buffer2]; + + int i1, i2; + for(i1 = 0; i1 < [chars_pressed length]; i1++) + for(i2 = 0; i2 < [chars_for_key length]; i2++) + if(buffer1[i1] == buffer2[i2]) + { + free(buffer1); + free(buffer2); + return 1; + } + + free(buffer1); + free(buffer2); + return 0; +} diff --git a/desmume/src/cocoa/main.m b/desmume/src/cocoa/main.m new file mode 100644 index 000000000..57db2a804 --- /dev/null +++ b/desmume/src/cocoa/main.m @@ -0,0 +1,25 @@ +/* + Copyright (C) 2007 Jeff Bland + Copyright (C) 2011 Roger Manuel + Copyright (C) 2012 DeSmuME team + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This file is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with the this software. If not, see . +*/ + +#import + +int main(int argc, char *argv[]) +{ + return NSApplicationMain(argc, (const char **) argv); +} diff --git a/desmume/src/cocoa/main.mm b/desmume/src/cocoa/main.mm deleted file mode 100644 index b60e671a1..000000000 --- a/desmume/src/cocoa/main.mm +++ /dev/null @@ -1,560 +0,0 @@ -/* - Copyright (C) 2007 Jeff Bland - Copyright (C) 2011 Roger Manuel - Copyright (C) 2012 DeSmuME team - - This file is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - This file is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with the this software. If not, see . -*/ - -/* -This file is part of the Cocoa (Mac OS X) port of DeSmuME emulator -By Jeff Bland -Based on work by yopyop and the DeSmuME team! -Mac related questions can go to osx@desmume.org -*/ - -#import -#import "cocoa_file.h" -#import "cocoa_util.h" -#import "main_window.h" -#import "preferences.h" - -#include "sndOSX.h" - -#ifdef GDB_STUB -#include -#endif - -/* -FIXME: .nds.gba support? -*/ - -//Globals---------------------------------------------------------------------------------------- - -//view (defined/managed in main_window.m) -extern NSMenuItem *resize1x; -extern NSMenuItem *resize2x; -extern NSMenuItem *resize3x; -extern NSMenuItem *resize4x; - -extern NSMenuItem *constrain_item; -extern NSMenuItem *min_size_item; -extern NSMenuItem *toggle_status_bar_item; - -extern NSMenuItem *rotation0_item; -extern NSMenuItem *rotation90_item; -extern NSMenuItem *rotation180_item; -extern NSMenuItem *rotation270_item; - -extern NSMenuItem *topBG0_item; -extern NSMenuItem *topBG1_item; -extern NSMenuItem *topBG2_item; -extern NSMenuItem *topBG3_item; -extern NSMenuItem *topOBJ_item; -extern NSMenuItem *subBG0_item; -extern NSMenuItem *subBG1_item; -extern NSMenuItem *subBG2_item; -extern NSMenuItem *subBG3_item; -extern NSMenuItem *subOBJ_item; - -extern NSMenuItem *screenshot_to_file_item; -extern NSMenuItem *screenshot_to_window_item; - -//execution control (defined/managed in nds_control.m) -extern NSMenuItem *close_rom_item; - -extern NSMenuItem *execute_item; -extern NSMenuItem *pause_item; -extern NSMenuItem *reset_item; - -extern NSMenuItem *save_type_item[]; -extern NSString *save_types[]; - -extern NSMenuItem *speed_limit_25_item; -extern NSMenuItem *speed_limit_50_item; -extern NSMenuItem *speed_limit_75_item; -extern NSMenuItem *speed_limit_100_item; -extern NSMenuItem *speed_limit_200_item; -extern NSMenuItem *speed_limit_none_item; -extern NSMenuItem *speed_limit_custom_item; - -extern NSMenuItem *save_state_as_item; -extern NSMenuItem *load_state_from_item; - -//sound (defined/managed in nds_control.m) -extern NSMenuItem *volume_item[]; -extern NSMenuItem *mute_item; - -#define SAVE_SLOTS 10 //this should never be more than NB_SAVES in saves.h -extern NSMenuItem *saveSlot_item[]; -extern NSMenuItem *loadSlot_item[]; - -//extern NSMenuItem *clear_all_saves_item; waiting for more functionality from saves.h - -extern NSMenuItem *rom_info_item; - -//Interfaces-------------------------------------------------------------------------------------- - -@interface AppDelegate : NSObject -{} - -//our methods -- (void)pickROM; - -//delegate methods -- (BOOL)application:(NSApplication*)sender openFile:(NSString*)filename; -- (void)applicationWillFinishLaunching:(NSNotification*)aNotification; -- (void)applicationDidFinishLaunching:(NSNotification*)aNotification; -- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication*)sender; -- (void)applicationWillTerminate:(NSNotification*)aNotification; -@end - -// -VideoOutputWindow *main_window; - -/////////////////////////////// - -//This generates and sets the entire menubar (and sets defaults) -void CreateMenu(AppDelegate *delegate) -{ - //Grab the main menu - NSMenu *main_menu = [NSApp mainMenu]; - if(main_menu == nil)return; - - // - int i; - NSMenuItem *temp; - - //File Menu - - temp = [main_menu addItemWithTitle:@"" action:nil keyEquivalent:@""]; - NSMenu *file_menu = [[NSMenu alloc] initWithTitle:NSLocalizedString(@"File", nil)]; - if(file_menu != nil) - { - [main_menu setSubmenu:file_menu forItem:temp]; - - [[file_menu addItemWithTitle:NSLocalizedString(@"Open ROM...", nil) action:@selector(pickROM) keyEquivalent:@"o"] setTarget:delegate]; - - //Recent items menu - // Thanks to Jeff Johnson and the Lap Cat Software Blog for their information on the Open Recent menu in Cocoa - // http://lapcatsoftware.com/blog/ - - temp = [file_menu addItemWithTitle:NSLocalizedString(@"Open Recent", nil) action:nil keyEquivalent:@""]; - - NSMenu *recent_menu = [[NSMenu alloc] initWithTitle:NSLocalizedString(@"Open Recent", nil)]; - - if(recent_menu != nil) - { - [recent_menu performSelector:@selector(_setMenuName:) withObject:@"NSRecentDocumentsMenu"]; - [temp setSubmenu:recent_menu]; - - [[recent_menu addItemWithTitle:@"Clear Menu" action:@selector(clearRecentDocuments:) keyEquivalent:@""] setTarget:[NSDocumentController sharedDocumentController]]; - - [recent_menu release]; - } - - [file_menu addItem:[NSMenuItem separatorItem]]; - - rom_info_item = [file_menu addItemWithTitle:NSLocalizedString(@"ROM Info...", nil) action:@selector(showRomInfo) keyEquivalent:@""]; - -#ifdef HAVE_LIBZ //internally, save states only work when zlib is there - - [file_menu addItem:[NSMenuItem separatorItem]]; - - [save_state_as_item = [file_menu addItemWithTitle:NSLocalizedString(@"Save State As...", nil) action:@selector(saveStateAs) keyEquivalent:@""] setEnabled:NO]; - - [load_state_from_item = [file_menu addItemWithTitle:NSLocalizedString(@"Load State From...", nil) action:@selector(loadStateFrom) keyEquivalent:@""] setEnabled:NO]; - - [file_menu addItem:[NSMenuItem separatorItem]]; - - //Save state menu - - [save_state_as_item setEnabled:NO]; - - temp = [file_menu addItemWithTitle:NSLocalizedString(@"Save State", nil) action:nil keyEquivalent:@""]; - - NSMenu *save_state_menu = [[NSMenu alloc] initWithTitle:NSLocalizedString(@"Save State", nil)]; - if(save_state_menu != nil) - { - [temp setSubmenu:save_state_menu]; - - for(i = 0; i < SAVE_SLOTS; i++) - { - saveSlot_item[i] = [save_state_menu addItemWithTitle:[NSString stringWithFormat:NSLocalizedString(@"Slot %d", nil), i+1] action:@selector(saveToSlot:) keyEquivalent:[NSString stringWithFormat:@"%d", i<9?i+1:0]]; - [saveSlot_item[i] setKeyEquivalentModifierMask:NSShiftKeyMask]; - } - [save_state_menu release]; - } - - //Load state menu - - temp = [file_menu addItemWithTitle:NSLocalizedString(@"Load State", nil) action:nil keyEquivalent:@""]; - NSMenu *load_state_menu = [[NSMenu alloc] initWithTitle:NSLocalizedString(@"Load State", nil)]; - if(load_state_menu != nil) - { - [temp setSubmenu:load_state_menu]; - - for(i = 0; i < SAVE_SLOTS; i++) - { - loadSlot_item[i] = [load_state_menu addItemWithTitle:[saveSlot_item[i] title] action:@selector(loadFromSlot:) keyEquivalent:[NSString stringWithFormat:@"%d", i<9?i+1:0]]; - [loadSlot_item[i] setKeyEquivalentModifierMask:0]; - } - - [load_state_menu release]; - } - -#endif - - [file_menu addItem:[NSMenuItem separatorItem]]; - - close_rom_item = [file_menu addItemWithTitle:NSLocalizedString(@"Close ROM", nil) action:@selector(askAndCloseROM) keyEquivalent:@"w"]; - - [file_menu release]; - } - - //Emulation menu - - temp = [main_menu addItemWithTitle:@"" action:nil keyEquivalent:@""]; - NSMenu *emulation_menu = [[NSMenu alloc] initWithTitle:NSLocalizedString(@"Emulation", nil)]; - if(emulation_menu != nil) - { - [main_menu setSubmenu:emulation_menu forItem:temp]; - - execute_item = [emulation_menu addItemWithTitle:NSLocalizedString(@"Execute", nil) action:@selector(execute) keyEquivalent:@"e"]; - pause_item = [emulation_menu addItemWithTitle:NSLocalizedString(@"Pause", nil) action:@selector(pause) keyEquivalent:@"p"]; - reset_item = [emulation_menu addItemWithTitle:NSLocalizedString(@"Reset", nil) action:@selector(reset) keyEquivalent:@"r"]; - - [emulation_menu addItem:[NSMenuItem separatorItem]]; - - //Speed limit menu - - temp = [emulation_menu addItemWithTitle:NSLocalizedString(@"Speed Limit", nil) action:nil keyEquivalent:@""]; - - NSMenu *speed_limit_menu = [[NSMenu alloc] initWithTitle:NSLocalizedString(@"Speed Limit", nil)]; - if(speed_limit_menu != nil) - { - [temp setSubmenu:speed_limit_menu]; - - speed_limit_25_item = [speed_limit_menu addItemWithTitle:NSLocalizedString(@"25% Speed Limit", nil) action:@selector(setSpeedLimitFromMenuItem:) keyEquivalent:@""]; - speed_limit_50_item = [speed_limit_menu addItemWithTitle:NSLocalizedString(@"50% Speed Limit", nil) action:@selector(setSpeedLimitFromMenuItem:) keyEquivalent:@""]; - speed_limit_75_item = [speed_limit_menu addItemWithTitle:NSLocalizedString(@"75% Speed Limit", nil) action:@selector(setSpeedLimitFromMenuItem:) keyEquivalent:@""]; - - [speed_limit_menu addItem:[NSMenuItem separatorItem]]; - - speed_limit_100_item = [speed_limit_menu addItemWithTitle:NSLocalizedString(@"100% Speed Limit", nil) action:@selector(setSpeedLimitFromMenuItem:) keyEquivalent:@""]; - - [speed_limit_menu addItem:[NSMenuItem separatorItem]]; - - speed_limit_200_item = [speed_limit_menu addItemWithTitle:NSLocalizedString(@"200% Speed Limit", nil) action:@selector(setSpeedLimitFromMenuItem:) keyEquivalent:@""]; - speed_limit_none_item = [speed_limit_menu addItemWithTitle:NSLocalizedString(@"No Speed Limit" , nil) action:@selector(setSpeedLimitFromMenuItem:) keyEquivalent:@""]; - - [speed_limit_menu addItem:[NSMenuItem separatorItem]]; - - speed_limit_custom_item = [speed_limit_menu addItemWithTitle:NSLocalizedString(@"Custom Speed Limit", nil) action:@selector(setSpeedLimitFromMenuItem:) keyEquivalent:@""]; - - [speed_limit_menu release]; - } - - // Backup media type - temp = [emulation_menu addItemWithTitle:NSLocalizedString(@"Backup Media Type", nil) action:nil keyEquivalent:@""]; - - NSMenu *save_type_menu = [[NSMenu alloc] initWithTitle:NSLocalizedString(@"Backup Media Type", nil)]; - if(save_type_menu != nil) - { - [temp setSubmenu:save_type_menu]; - - // Add autodetect apart from the others - save_type_item[0] = [save_type_menu addItemWithTitle:save_types[0] action:@selector(setSaveTypeFromMenuItem:) keyEquivalent:@""]; - [save_type_menu addItem:[NSMenuItem separatorItem]]; - - // Add the rest - for(i = 1; i < MAX_SAVE_TYPE; i++) - { - save_type_item[i] = [save_type_menu addItemWithTitle:save_types[i] action:@selector(setSaveTypeFromMenuItem:) keyEquivalent:@""]; - } - - [save_type_menu release]; - } - - [emulation_menu release]; - } - - //View menu - - temp = [main_menu addItemWithTitle:@"" action:nil keyEquivalent:@""]; - NSMenu *view_menu = [[NSMenu alloc] initWithTitle:NSLocalizedString(@"View", nil)]; - if(view_menu) - { - [main_menu setSubmenu:view_menu forItem:temp]; - - resize1x = [view_menu addItemWithTitle:NSLocalizedString(@"Size 1x", nil) action:@selector(resizeScreen1x) keyEquivalent:@"1"]; - resize2x = [view_menu addItemWithTitle:NSLocalizedString(@"Size 2x", nil) action:@selector(resizeScreen2x) keyEquivalent:@"2"]; - resize3x = [view_menu addItemWithTitle:NSLocalizedString(@"Size 3x", nil) action:@selector(resizeScreen3x) keyEquivalent:@"3"]; - resize4x = [view_menu addItemWithTitle:NSLocalizedString(@"Size 4x", nil) action:@selector(resizeScreen4x) keyEquivalent:@"4"]; - - [view_menu addItem:[NSMenuItem separatorItem]]; - - constrain_item = [view_menu addItemWithTitle:NSLocalizedString(@"Constrain Proportions", nil) action:@selector(toggleConstrainProportions) keyEquivalent:@""]; - min_size_item = [view_menu addItemWithTitle:NSLocalizedString(@"No Smaller Than DS", nil) action:@selector(toggleMinSize) keyEquivalent:@""]; - toggle_status_bar_item = [view_menu addItemWithTitle:NSLocalizedString(@"Show Status Bar", nil) action:@selector(toggleStatusBar) keyEquivalent:@"/"]; - - [view_menu addItem:[NSMenuItem separatorItem]]; - - //Rotation menu - - temp = [view_menu addItemWithTitle:NSLocalizedString(@"Rotation", nil) action:nil keyEquivalent:@""]; - NSMenu *rotation_menu = [[NSMenu alloc] initWithTitle:NSLocalizedString(@"Rotation", nil)]; - if(rotation_menu != nil) - { - [temp setSubmenu:rotation_menu]; - - rotation0_item = [rotation_menu addItemWithTitle:NSLocalizedString(@"Rotation 0", nil) action:@selector(setRotation0) keyEquivalent:@""]; - rotation90_item = [rotation_menu addItemWithTitle:NSLocalizedString(@"Rotation 90", nil) action:@selector(setRotation90) keyEquivalent:@""]; - rotation180_item = [rotation_menu addItemWithTitle:NSLocalizedString(@"Rotation 180", nil) action:@selector(setRotation180) keyEquivalent:@""]; - rotation270_item = [rotation_menu addItemWithTitle:NSLocalizedString(@"Rotation 270", nil) action:@selector(setRotation270) keyEquivalent:@""]; - - [rotation_menu release]; - } - - [view_menu addItem:[NSMenuItem separatorItem]]; - - //Layer Menu - - temp = [view_menu addItemWithTitle:NSLocalizedString(@"Layers", nil) action:nil keyEquivalent:@""]; - NSMenu *layer_menu = [[NSMenu alloc] initWithTitle:NSLocalizedString(@"Layers", nil)]; - if(layer_menu != nil) - { - [temp setSubmenu: layer_menu]; - - topBG0_item = [layer_menu addItemWithTitle:NSLocalizedString(@"Top BG0", nil) action:@selector(toggleTopBackground0) keyEquivalent:@""]; - topBG1_item = [layer_menu addItemWithTitle:NSLocalizedString(@"Top BG1", nil) action:@selector(toggleTopBackground1) keyEquivalent:@""]; - topBG2_item = [layer_menu addItemWithTitle:NSLocalizedString(@"Top BG2", nil) action:@selector(toggleTopBackground2) keyEquivalent:@""]; - topBG3_item = [layer_menu addItemWithTitle:NSLocalizedString(@"Top BG3", nil) action:@selector(toggleTopBackground3) keyEquivalent:@""]; - topOBJ_item = [layer_menu addItemWithTitle:NSLocalizedString(@"Top OBJ", nil) action:@selector(toggleTopObject) keyEquivalent:@""]; - - [layer_menu addItem:[NSMenuItem separatorItem]]; - - subBG0_item = [layer_menu addItemWithTitle:NSLocalizedString(@"Sub BG0", nil) action:@selector(toggleSubBackground0) keyEquivalent:@""]; - subBG1_item = [layer_menu addItemWithTitle:NSLocalizedString(@"Sub BG1", nil) action:@selector(toggleSubBackground1) keyEquivalent:@""]; - subBG2_item = [layer_menu addItemWithTitle:NSLocalizedString(@"Sub BG2", nil) action:@selector(toggleSubBackground2) keyEquivalent:@""]; - subBG3_item = [layer_menu addItemWithTitle:NSLocalizedString(@"Sub BG3", nil) action:@selector(toggleSubBackground3) keyEquivalent:@""]; - subOBJ_item = [layer_menu addItemWithTitle:NSLocalizedString(@"Sub OBJ", nil) action:@selector(toggleSubObject) keyEquivalent:@""]; - - [layer_menu release]; - } - - [view_menu addItem:[NSMenuItem separatorItem]]; - - screenshot_to_file_item = [view_menu addItemWithTitle:NSLocalizedString(@"Save Screenshot...", nil) action:@selector(saveScreenshot) keyEquivalent:@""]; - - [view_menu release]; - } - - //Sound Menu - - temp = [main_menu addItemWithTitle:@"" action:nil keyEquivalent:@""]; - NSMenu *sound_menu = [[NSMenu alloc] initWithTitle:NSLocalizedString(@"Sound", nil)]; - if(sound_menu != nil) - { - [main_menu setSubmenu:sound_menu forItem:temp]; - - [temp = [sound_menu addItemWithTitle:NSLocalizedString(@"Volume", nil) action:nil keyEquivalent:@""] setTarget:[NSApp delegate]]; - - NSMenu *volume_menu = [[NSMenu alloc] initWithTitle:NSLocalizedString(@"Volume", nil)]; - if(volume_menu) - { - [sound_menu setSubmenu:volume_menu forItem:temp]; - - for(i = 0; i < 10; i++) - volume_item[i] = [volume_menu addItemWithTitle:[NSString stringWithFormat:NSLocalizedString(@"Volume %d", nil), (i+1)*10] action:@selector(setVolumeFromMenu:) keyEquivalent:@""]; - - [volume_menu release]; - } - - [sound_menu addItem:[NSMenuItem separatorItem]]; - - mute_item = [sound_menu addItemWithTitle:NSLocalizedString(@"Mute", nil) action:@selector(toggleMute) keyEquivalent:@""]; - - [sound_menu release]; - } - - //Create the help menu - - temp = [main_menu addItemWithTitle:@"" action:nil keyEquivalent:@""]; - NSMenu *help_menu = [[NSMenu alloc] initWithTitle:NSLocalizedString(@"Help", nil)]; - if(help_menu != nil) - { - [main_menu setSubmenu:help_menu forItem:temp]; - - [[help_menu addItemWithTitle:NSLocalizedString(@"Go to Website", nil) action:@selector(launchWebsite) keyEquivalent: @""] setTarget:NSApp]; - [[help_menu addItemWithTitle:NSLocalizedString(@"Go to Forums", nil) action:@selector(launchForums) keyEquivalent: @""] setTarget:NSApp]; - [[help_menu addItemWithTitle:NSLocalizedString(@"Submit a Bug Report", nil) action:@selector(bugReport) keyEquivalent: @""] setTarget:NSApp]; - - [help_menu release]; - } -} - -#ifdef GDB_STUB -//GDB Stub implementation---------------------------------------------------------------------------- - -void * createThread_gdb(void (*thread_function)( void *data),void *thread_data) -{ - // Create the thread using POSIX routines. - pthread_attr_t attr; - pthread_t* posixThreadID = (pthread_t*)malloc(sizeof(pthread_t)); - - assert(!pthread_attr_init(&attr)); - assert(!pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE)); - - int threadError = pthread_create(posixThreadID, &attr, (void* (*)(void *))thread_function, thread_data); - - assert(!pthread_attr_destroy(&attr)); - - if (threadError != 0) - { - // Report an error. - return NULL; - } - else - { - return posixThreadID; - } -} - -void joinThread_gdb( void *thread_handle) -{ - pthread_join(*((pthread_t*)thread_handle), NULL); - free(thread_handle); -} - -#endif - -//Main Function-------------------------------------------------------------------------------------- - -int main(int argc, char *argv[]) -{ - srand(time(NULL)); - - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; - - [NSApplication sharedApplication]; - [NSApp setDelegate:[[AppDelegate alloc] init]]; - - int result = NSApplicationMain(argc, (const char**)argv); - - [pool release]; - - return result; -} - -//Implementations------------------------------------------------------------------------- - -@implementation AppDelegate - -- (void)pickROM -{ - NSOpenPanel *panel = [NSOpenPanel openPanel]; - - [panel setCanChooseDirectories:NO]; - [panel setCanChooseFiles:YES]; - [panel setResolvesAliases:YES]; - [panel setAllowsMultipleSelection:NO]; - [panel setTitle:NSLocalizedString(@"Open ROM...", nil)]; - - if([panel runModalForDirectory:nil file:nil types:[NSArray arrayWithObjects:@"NDS", @"DS.GBA", nil]] == NSOKButton) - { - NSString* selected_file = [[panel filenames] lastObject]; //hopefully also the first object - - [self application:NSApp openFile:selected_file]; - } -} - -- (BOOL)application:(NSApplication*)sender openFile:(NSString*)filename -{ - BOOL result = NO; - NSURL *fileURL = [NSURL fileURLWithPath:filename]; - - NSString *fileKind = [CocoaDSFile fileKind:fileURL]; - if ([fileKind isEqualToString:@"DS ROM"] || [fileKind isEqualToString:@"GBA ROM"]) - { - result = [main_window loadRom:fileURL]; - } - - return result; -} - -- (void)applicationWillFinishLaunching:(NSNotification*)notification -{ - // Create the needed directories in Application Support if they haven't already - // been created. - if (![CocoaDSFile setupAllAppDirectories]) - { - [CocoaDSUtil quickDialogUsingTitle:NSLocalizedString(@"Error", nil) message:NSLocalizedString(@"Could not create the required directories in your Application Support folder. DeSmuME will now quit.", nil)]; - return; - } - - [CocoaDSFile setupAllFilePaths]; - - SNDOSXStartup(); - - //Set default values for all preferences - //(this wont override saved preferences as - //they work in different preference domains) - setAppDefaults(); - - //create the menus - CreateMenu(self); - - //create the video output window (the only window that opens with the app) - main_window = [[VideoOutputWindow alloc] init]; -} - -- (void)applicationDidFinishLaunching:(NSNotification*)notification -{ - //Bring the application to the front - [NSApp activateIgnoringOtherApps:TRUE]; - - //check if it should load something by default - if([[[NSUserDefaults standardUserDefaults] stringForKey:PREF_AFTER_LAUNCHED] compare:PREF_AFTER_LAUNCHED_OPTION_LAST_ROM]==NSOrderedSame) - { - NSArray *recent_documents = [[NSDocumentController sharedDocumentController] recentDocumentURLs]; - - if([recent_documents count] > 0) - { - NSURL *romURL = [recent_documents objectAtIndex:0]; - - [main_window loadRom:romURL]; - } - } -} - -- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication*)sender -{ - //Ask user about quitting if a rom is loaded (avoid accidentally quiting with unsaved progress) - if([main_window ROMLoaded]) - if(![CocoaDSUtil quickYesNoDialogUsingTitle:NSLocalizedString(@"DeSmuME Emulator", nil) message:NSLocalizedString(@"Are you sure you want to quit?", nil)]) - return NSTerminateCancel; - - return NSTerminateNow; -} - -- (void)applicationWillTerminate:(NSNotification*)notification -{ - [main_window pause]; - [main_window release]; - - SNDOSXShutdown(); -} - -@end diff --git a/desmume/src/cocoa/nds_control.h b/desmume/src/cocoa/nds_control.h index 3f4375ee3..87b11f3de 100644 --- a/desmume/src/cocoa/nds_control.h +++ b/desmume/src/cocoa/nds_control.h @@ -33,17 +33,6 @@ @class CocoaDSController; @class ScreenState; -@interface CocoaDSStateBuffer : NSObject -{ - @public - int frame_skip; - int speed_limit; -} - -- (id) init; - -@end - //This class is a compelte objective-c wrapper for //the core emulation features, other objective-c code inherit //upon or instanciate this to add interfaces for these features @@ -72,16 +61,15 @@ volatile bool paused; //sey by other thread to let us know if its executing bool muted; - int volume; + float volume; volatile int frame_skip; volatile int speed_limit; volatile int save_type; - - bool doesConfigNeedUpdate; + CGFloat speedScalar; + BOOL isSpeedLimitEnabled; NSTimeInterval calcTimeBudget; - - CocoaDSController *dsController; + CocoaDSController *cdsController; #ifdef GDB_STUB NSInteger arm9_gdb_port; @@ -93,8 +81,8 @@ unsigned char gpu_buff[256 * 256 * 5]; //this is where the 3D rendering of the NDS is stored @public - CocoaDSStateBuffer *dsStateBuffer; NSURL *loadedRomURL; + NSInteger prevCoreState; } //Instanciating, setup, and deconstruction @@ -104,34 +92,44 @@ - (void)dealloc; // Data accessors -- (CocoaDSController*) getDSController; +- (void) setMasterExecute:(BOOL)theState; +- (BOOL) masterExecute; +- (void) setCdsController:(CocoaDSController *)theController; +- (CocoaDSController*) cdsController; //Firmware control - (void)setPlayerName:(NSString*)player_name; //ROM control - (BOOL) loadRom:(NSURL *)romURL; -- (BOOL)ROMLoaded; +- (BOOL)isRomLoaded; - (void)closeROM; //ROM Info -- (NSImage *)ROMIcon; +- (NSImage *)romIcon; - (NSString *) romFileName; -- (NSString *)ROMTitle; -- (NSInteger)ROMMaker; -- (NSInteger)ROMSize; -- (NSInteger)ROMARM9Size; -- (NSInteger)ROMARM7Size; -- (NSInteger)ROMDataSize; +- (NSString *)romTitle; +- (NSInteger)romMaker; +- (NSInteger)romSize; +- (NSInteger)romArm9Size; +- (NSInteger)romArm7Size; +- (NSInteger)romDataSize; +- (NSURL *) loadedRomURL; +- (NSMutableDictionary *) romInfoBindings; ++ (NSMutableDictionary *) romNotLoadedBindings; //execution control +- (void) setCoreState:(NSInteger)coreState; +- (void) restoreCoreState; - (BOOL)executing; - (void)execute; - (BOOL)paused; - (void)pause; - (void)reset; -- (void)setSpeedLimit:(int)percent; //0 is off, 1-1000 is the pertance speed it runs at, anything else does nothing -- (int)speedLimit; +- (void) setSpeedScalar:(CGFloat)scalar; +- (CGFloat) speedScalar; +- (void) setIsSpeedLimitEnabled:(BOOL)theState; +- (BOOL) isSpeedLimitEnabled; - (void)setSaveType:(int)savetype; // see save_types in src/mmu.h - (int)saveType; // default is 0, which is autodetect - (void) updateConfig; @@ -146,10 +144,14 @@ //Sound - (BOOL)hasSound; -- (void)setVolume:(int)volume; //clamped: 0 to 100 -- (int)volume; +- (void) setVolume:(float)vol; //clamped: 0 to 100 +- (float) volume; - (void)enableMute; - (void)disableMute; - (void)toggleMute; - (BOOL)muted; + +- (void) copyToPasteboard; +- (NSBitmapImageRep *) bitmapImageRep; + @end diff --git a/desmume/src/cocoa/nds_control.mm b/desmume/src/cocoa/nds_control.mm index 3eab1625e..52bf2a8d6 100644 --- a/desmume/src/cocoa/nds_control.mm +++ b/desmume/src/cocoa/nds_control.mm @@ -24,11 +24,7 @@ #import "cocoa_util.h" #import "preferences.h" #import "screen_state.h" -#import "main_window.h" - -#ifdef DESMUME_COCOA -#import "sndOSX.h" -#endif +#include "sndOSX.h" #ifdef HAVE_OPENGL #import @@ -54,38 +50,17 @@ volatile bool execute = true; GPU3DInterface *core3DList[] = { &gpu3DNull, &gpu3DRasterize, -#ifdef HAVE_OPENGL -//&gpu3Dgl, -#endif NULL }; SoundInterface_struct *SNDCoreList[] = { &SNDDummy, -#ifdef DESMUME_COCOA &SNDOSX, -#endif NULL }; struct NDS_fw_config_data macDS_firmware; -bool opengl_init() -{ - return true; -} - -@implementation CocoaDSStateBuffer - -- (id) init -{ - frame_skip = -1; //default to auto frame skip - speed_limit = 100; //default to max speed = normal speed - - return self; -} - -@end @implementation NintendoDS - (id)init @@ -97,8 +72,9 @@ bool opengl_init() display_object = nil; error_object = nil; frame_skip = -1; //default to auto frame skip - speed_limit = 100; //default to max speed = normal speed - calcTimeBudget = (NSTimeInterval)(DS_SECONDS_PER_FRAME / ((float)speed_limit / 100.0)); + speedScalar = SPEED_SCALAR_NORMAL; + calcTimeBudget = (NSTimeInterval)(DS_SECONDS_PER_FRAME / speedScalar); + isSpeedLimitEnabled = YES; gui_thread = [NSThread currentThread]; loadedRomURL = nil; execution_lock = [[NSLock alloc] init]; @@ -252,8 +228,7 @@ bool opengl_init() if(context) { [context makeCurrentContext]; - - //oglrender_init = &opengl_init; + NDS_3D_SetDriver(CORE3DLIST_SWRASTERIZE); if(!gpu3D->NDS_3D_Init()) [CocoaDSUtil quickDialogUsingTitle:NSLocalizedString(@"Error", nil) message:NSLocalizedString(@"Unable to initialize OpenGL components", nil)]; @@ -269,12 +244,12 @@ bool opengl_init() //Sound Init muted = false; - volume = 100; + volume = 100.0; #ifdef DESMUME_COCOA if(SPU_ChangeSoundCore(SNDCORE_OSX, 735 * 4) != 0) [CocoaDSUtil quickDialogUsingTitle:NSLocalizedString(@"Error", nil) message:NSLocalizedString(@"Unable to initialize sound core", nil)]; else - SPU_SetVolume(volume); + SPU_SetVolume((int)volume); #endif //Breakoff a new thread that will execute the ds stuff @@ -282,6 +257,7 @@ bool opengl_init() finished = false; run = false; paused = false; + prevCoreState = CORESTATE_PAUSE; [NSThread detachNewThreadSelector:@selector(run:) toTarget:self withObject:context]; //Start a timer to update the screen @@ -291,8 +267,7 @@ bool opengl_init() [NSTimer scheduledTimerWithTimeInterval:DS_SECONDS_PER_FRAME target:self selector:@selector(videoUpdateTimerHelper) userInfo:nil repeats:YES]; } - dsStateBuffer = [[CocoaDSStateBuffer alloc] init]; - dsController = [[CocoaDSController alloc] init]; + cdsController = nil; return self; } @@ -326,8 +301,7 @@ bool opengl_init() finish = true; while(!finished){} - [dsStateBuffer release]; - [dsController release]; + [cdsController release]; [display_object release]; [error_object release]; @@ -353,9 +327,46 @@ bool opengl_init() [super dealloc]; } -- (CocoaDSController*) getDSController +- (void) setMasterExecute:(BOOL)theState { - return dsController; + //OSSpinLockLock(&spinlockMasterExecute); + + if (theState) + { + execute = true; + } + else + { + execute = false; + } + + //OSSpinLockUnlock(&spinlockMasterExecute); +} + +- (BOOL) masterExecute +{ + BOOL theState = NO; + + //OSSpinLockLock(&spinlockMasterExecute); + + if (execute) + { + theState = YES; + } + + //OSSpinLockUnlock(&spinlockMasterExecute); + + return theState; +} + +- (void) setCdsController:(CocoaDSController *)theController +{ + cdsController = theController; +} + +- (CocoaDSController*) cdsController +{ + return cdsController; } - (void)setPlayerName:(NSString*)player_name @@ -390,16 +401,16 @@ bool opengl_init() //continue playing if load didn't work if(was_paused == NO)[self execute]; - return NO; + return result; } - +/* //clear screen data if(current_screen != nil) { [current_screen release]; current_screen = nil; } - +*/ // Retain a copy of the URL of the currently loaded ROM, since we'll be // using it later. loadedRomURL = romURL; @@ -408,11 +419,13 @@ bool opengl_init() //this is incase emulation stopped from the //emulation core somehow execute = true; - - return YES; + + result = YES; + + return result; } -- (BOOL)ROMLoaded +- (BOOL) isRomLoaded { return (loadedRomURL==nil)?NO:YES; } @@ -420,20 +433,20 @@ bool opengl_init() - (void)closeROM { [self pause]; - +/* if(current_screen != nil) { [current_screen release]; current_screen = nil; } - +*/ NDS_FreeROM(); [loadedRomURL release]; loadedRomURL = nil; } -- (NSImage*)ROMIcon +- (NSImage *) romIcon { NDS_header *header = NDS_getROMHeader(); if(!header)return nil; @@ -512,41 +525,124 @@ bool opengl_init() return result; } -- (NSString*)romFileName +- (NSString *) romFileName { return [[loadedRomURL path] lastPathComponent]; } -- (NSString*)ROMTitle +- (NSString *) romTitle { return [[NSString alloc] initWithCString:(NDS_getROMHeader()->gameTile) encoding:NSUTF8StringEncoding]; } -- (NSInteger)ROMMaker +- (NSInteger) romMaker { return NDS_getROMHeader()->makerCode; } -- (NSInteger)ROMSize +- (NSInteger) romSize { return NDS_getROMHeader()->cardSize; } -- (NSInteger)ROMARM9Size +- (NSInteger) romArm9Size { return NDS_getROMHeader()->ARM9binSize; } -- (NSInteger)ROMARM7Size +- (NSInteger) romArm7Size { return NDS_getROMHeader()->ARM7binSize; } -- (NSInteger)ROMDataSize +- (NSInteger) romDataSize { return NDS_getROMHeader()->ARM7binSize + NDS_getROMHeader()->ARM7src; } +- (NSMutableDictionary *) romInfoBindings +{ + if (![self isRomLoaded]) + { + return [NintendoDS romNotLoadedBindings]; + } + + return [NSMutableDictionary dictionaryWithObjectsAndKeys: + [self romFileName], @"romFileName", + [self romTitle], @"romTitle", + [NSString stringWithFormat:@"%04X", [self romMaker]], @"makerCode", + [NSString stringWithFormat:NSSTRING_STATUS_SIZE_BYTES, [self romSize]], @"romSize", + [NSString stringWithFormat:NSSTRING_STATUS_SIZE_BYTES, [self romArm9Size]], @"arm9BinarySize", + [NSString stringWithFormat:NSSTRING_STATUS_SIZE_BYTES, [self romArm7Size]], @"arm7BinarySize", + [NSString stringWithFormat:NSSTRING_STATUS_SIZE_BYTES, [self romDataSize]], @"dataSize", + [self romIcon], @"iconImage", + nil]; +} + ++ (NSMutableDictionary *) romNotLoadedBindings +{ + NSImage *iconImage = [[[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"AppIcon_DeSmuME" ofType:@"icns"]] autorelease]; + + return [NSMutableDictionary dictionaryWithObjectsAndKeys: + NSSTRING_STATUS_NO_ROM_LOADED, @"romFileName", + NSSTRING_STATUS_NO_ROM_LOADED, @"romTitle", + NSSTRING_STATUS_NO_ROM_LOADED, @"makerCode", + [NSString stringWithFormat:NSSTRING_STATUS_SIZE_BYTES, 0], @"romSize", + [NSString stringWithFormat:NSSTRING_STATUS_SIZE_BYTES, 0], @"arm9BinarySize", + [NSString stringWithFormat:NSSTRING_STATUS_SIZE_BYTES, 0], @"arm7BinarySize", + [NSString stringWithFormat:NSSTRING_STATUS_SIZE_BYTES, 0], @"dataSize", + iconImage, @"iconImage", + nil]; +} + +- (NSURL *) loadedRomURL +{ + return loadedRomURL; +} + +- (void) setCoreState:(NSInteger)coreState +{ + if ([self paused]) + { + prevCoreState = CORESTATE_PAUSE; + } + else + { + prevCoreState = CORESTATE_EXECUTE; + } + + switch (coreState) + { + case CORESTATE_EXECUTE: + [self execute]; + break; + + case CORESTATE_PAUSE: + [self pause]; + break; + + default: + break; + } +} + +- (void) restoreCoreState +{ + switch (prevCoreState) + { + case CORESTATE_EXECUTE: + [self execute]; + break; + + case CORESTATE_PAUSE: + [self pause]; + break; + + default: + break; + } +} + - (BOOL)executing { return run; @@ -595,21 +691,26 @@ bool opengl_init() execute = true; } -- (void)setSpeedLimit:(int)speedLimit +- (void) setSpeedScalar:(CGFloat)scalar { - if(speedLimit < 0 || speedLimit > 1000) - { - return; - } - - dsStateBuffer->speed_limit = speedLimit; - - doesConfigNeedUpdate = true; + speedScalar = scalar; + [self updateConfig]; } -- (int)speedLimit +- (CGFloat) speedScalar { - return speed_limit; + return speedScalar; +} + +- (void) setIsSpeedLimitEnabled:(BOOL)theState +{ + isSpeedLimitEnabled = theState; + [self updateConfig]; +} + +- (BOOL) isSpeedLimitEnabled +{ + return isSpeedLimitEnabled; } - (void)setSaveType:(int)savetype @@ -742,19 +843,25 @@ bool opengl_init() return core != &SNDDummy; } -- (void)setVolume:(int)new_volume +- (void) setVolume:(float)vol { - if(new_volume < 0)new_volume = 0; - if(new_volume > 100)new_volume = 100; - if(volume == new_volume)return; + if (vol < 0.0f) + { + vol = 0.0f; + } + else if (vol > MAX_VOLUME) + { + vol = MAX_VOLUME; + } - volume = new_volume; + volume = vol; + [sound_lock lock]; - SPU_SetVolume(volume); + SPU_SetVolume((int)vol); [sound_lock unlock]; } -- (int)volume +- (float) volume { if([self hasSound]) return volume; @@ -772,7 +879,7 @@ bool opengl_init() - (void)disableMute { [sound_lock lock]; - SPU_SetVolume(volume); + SPU_SetVolume((int)volume); [sound_lock unlock]; muted = false; } @@ -790,6 +897,38 @@ bool opengl_init() return muted?YES:NO; } +- (void) copyToPasteboard +{ + if (current_screen == nil) + { + return; + } + + NSImage *screenshot = [[current_screen image] autorelease]; + if (screenshot == nil) + { + return; + } + + NSPasteboard *pboard = [NSPasteboard generalPasteboard]; + [pboard declareTypes:[NSArray arrayWithObjects:NSTIFFPboardType, nil] owner:self]; + [pboard setData:[screenshot TIFFRepresentationUsingCompression:NSTIFFCompressionLZW factor:1.0f] forType:NSTIFFPboardType]; +} + +- (NSBitmapImageRep *) bitmapImageRep +{ + NSBitmapImageRep *currentScreenImageRep = nil; + + if (current_screen == nil) + { + return currentScreenImageRep; + } + + currentScreenImageRep = [current_screen imageRep]; + + return currentScreenImageRep; +} + //---------------------------- //Here's the run function which continuously executes in a separate thread //it's controlled by the run and finish varaiables of the instance @@ -812,20 +951,12 @@ bool opengl_init() - (void)videoUpdateTimerHelper { - if(!run)return; - - [video_update_lock lock]; - ScreenState *screen = current_screen; - [screen retain]; - current_screen = nil; - [video_update_lock unlock]; - - if(screen != nil) + if(!run || current_screen == nil) { - [display_object performSelector:display_func withObject:screen]; - [screen release]; + return; } + [display_object performSelector:display_func withObject:current_screen]; } - (void)run:(NSOpenGLContext*)gl_context @@ -863,18 +994,6 @@ bool opengl_init() */ loopStartDate = [NSDate date]; - /* - Some controls may affect how the loop runs. - - Instead of checking and modifying the NDS config every time through - the loop, only change the config on an as-needed basis. - */ - if(doesConfigNeedUpdate == true) - { - [self updateConfig]; - doesConfigNeedUpdate = false; - } - // Force paused state. paused = false; @@ -904,7 +1023,7 @@ bool opengl_init() The time taken up by this step should be insignificant, so we won't bother calculating this in the time budget. */ - [dsController setupAllDSInputs]; + [cdsController setupAllDSInputs]; NDS_beginProcessingInput(); /* Shouldn't need to do any special processing steps in between. @@ -997,17 +1116,20 @@ bool opengl_init() if(timer_based) { //for tiger compatibility [video_update_lock lock]; - [current_screen release]; + ScreenState *oldScreenData = current_screen; current_screen = new_screen_data; + [oldScreenData release]; [video_update_lock unlock]; } else { //for leopard and later + ScreenState *oldScreenData = current_screen; + current_screen = new_screen_data; //this will generate a warning when compiling on tiger or earlier, but it should //be ok since the purpose of the if statement is to check if this will work - [self performSelector:@selector(videoUpdateHelper:) onThread:gui_thread withObject:new_screen_data waitUntilDone:NO]; - [new_screen_data release]; //performSelector will auto retain the screen data while the other thread displays + [self performSelector:@selector(videoUpdateHelper:) onThread:gui_thread withObject:current_screen waitUntilDone:NO]; + [oldScreenData release]; //performSelector will auto retain the screen data while the other thread displays } } @@ -1026,22 +1148,25 @@ bool opengl_init() - (void) updateConfig { - // Update the Nintendo DS config - frame_skip = dsStateBuffer->frame_skip; - speed_limit = dsStateBuffer->speed_limit; + CGFloat newTimeBudget; - if(speed_limit <= 0) + // Update speed limit + if(!isSpeedLimitEnabled) { - calcTimeBudget = 0; - } - else if(speed_limit > 0 && speed_limit < 1000) - { - calcTimeBudget = (NSTimeInterval)(DS_SECONDS_PER_FRAME / ((float)speed_limit / 100.0)); + newTimeBudget = 0.0; } else { - calcTimeBudget = (NSTimeInterval)(DS_SECONDS_PER_FRAME / ((float)1000.0 / 100.0)); + CGFloat theSpeed = speedScalar; + if(theSpeed <= SPEED_SCALAR_MIN) + { + theSpeed = SPEED_SCALAR_MIN; + } + + newTimeBudget = (NSTimeInterval)(DS_SECONDS_PER_FRAME / theSpeed); } + + calcTimeBudget = newTimeBudget; } @end diff --git a/desmume/src/cocoa/preferences.mm b/desmume/src/cocoa/preferences.mm index eb9b642b0..e3a8a688c 100644 --- a/desmume/src/cocoa/preferences.mm +++ b/desmume/src/cocoa/preferences.mm @@ -93,7 +93,7 @@ void setAppDefaults() { BOOL value = ([sender indexOfSelectedItem] == 0) ? YES : NO; - [[NSUserDefaults standardUserDefaults] setBool:value forKey:PREF_EXECUTE_UPON_LOAD]; + [[NSUserDefaults standardUserDefaults] setBool:value forKey:@"ExecuteROMOnLoad"]; } - (void)afterLaunch:(id)sender @@ -308,7 +308,9 @@ NSView *createPreferencesView(NSString *helpinfo, NSDictionary *options, id dele NSArray* keys = [[options allKeys] sortedArrayUsingSelector:@selector(localizedCompare:)]; NSEnumerator *key_enumerator = [keys reverseObjectEnumerator]; - id key, key_raw, object; + NSString *key; + NSString *key_raw; + NSArray *object; NSRect text_rect = NSMakeRect(5, 5, 220, 29); NSRect button_rect = NSMakeRect(230, 5, PREFERENCES_WIDTH - 235, 26); while ((key_raw = [key_enumerator nextObject])) @@ -319,7 +321,7 @@ NSView *createPreferencesView(NSString *helpinfo, NSDictionary *options, id dele NSString *current_setting = [[NSUserDefaults standardUserDefaults] objectForKey:key_raw]; - if([[object objectAtIndex:0] compare:@"Bool"] == NSOrderedSame) + if([(NSString *)[object objectAtIndex:0] compare:@"Bool"] == NSOrderedSame) { //Create the button for this option NSPopUpButton *button = [[NSPopUpButton alloc] initWithFrame:button_rect pullsDown:NO]; @@ -335,12 +337,12 @@ NSView *createPreferencesView(NSString *helpinfo, NSDictionary *options, id dele [button addItemWithTitle:NSLocalizedString(@"Yes",nil)]; [button addItemWithTitle:NSLocalizedString(@"No",nil)]; - [button selectItemAtIndex:([[NSUserDefaults standardUserDefaults] boolForKey:PREF_EXECUTE_UPON_LOAD] == YES) ? 0 : 1]; + [button selectItemAtIndex:([[NSUserDefaults standardUserDefaults] boolForKey:@"ExecuteROMOnLoad"] == YES) ? 0 : 1]; [view addSubview:button]; } - else if([[object objectAtIndex:0] compare:@"Array"] == NSOrderedSame) + else if([(NSString *)[object objectAtIndex:0] compare:@"Array"] == NSOrderedSame) { //Create the button for this option NSPopUpButton *button = [[NSPopUpButton alloc] initWithFrame:button_rect pullsDown:NO]; @@ -387,7 +389,7 @@ NSView *createPreferencesView(NSString *helpinfo, NSDictionary *options, id dele [view addSubview:button]; } - else if ([[object objectAtIndex:0] caseInsensitiveCompare:@"Text"] == NSOrderedSame) + else if ([(NSString *)[object objectAtIndex:0] caseInsensitiveCompare:@"Text"] == NSOrderedSame) { //if this preference is a text field @@ -406,7 +408,7 @@ NSView *createPreferencesView(NSString *helpinfo, NSDictionary *options, id dele [view addSubview:text]; } - else if([[object objectAtIndex:0] compare:@"Dictionary"] == NSOrderedSame) + else if([(NSString *)[object objectAtIndex:0] compare:@"Dictionary"] == NSOrderedSame) { //Create the button for this option NSPopUpButton *button = [[NSPopUpButton alloc] initWithFrame:button_rect pullsDown:NO]; diff --git a/desmume/src/cocoa/translations/Chinese.lproj/Localizable.strings b/desmume/src/cocoa/translations/Chinese.lproj/Localizable.strings index 6221ad69a4e655d75012d1c51c23dd001f234208..9c4502ac4a3c8eba5c2324d4e081fe80b8b8e858 100644 GIT binary patch delta 257 zcmaFlcuZ_U`ovhTaWNWc$lkbYDOy(6=nQRNhxj;M@h|h{^OlFiY zm~0Egl@cbCcLMQG35&_Ll4_IlCG{q+1mee%Mw1n#j3&oRSxtT^BsRHQ&TaBtITN7G i0W6}Ejpa3`DC?lS+GKYHlgaH0Mw7QIXaWGiE>JN5 literal 8418 zcmb7JTWnNS6g`?40tpg7{o+DIv{6dSyW*qt1yW|FbH_eXXz2{o8EBc-X$L3?BF1P* zV+tQw!k-CIln?#Us2}>He;Oq*7-EbXqlqLwViQatLDxQK&g0&@?{v(hk2!a*{W^Q^ zv-i1o{}qj*L3pA|hIpK0Xx#0iIQj_iDV$$**+K_%bK1ieAq}c}dC8v++GkM>d_=%8 zSmGgSr)8AV|E-9JFh6gwKXs+FJ-f<0iE`_P9u!eQZk>p)3FJYD2F*G*W=Ye@kIbsY1?z*#ATHWE z#0lt=LoQ6?uhA!4nC%Y4td7nUcA+9|FtnpDrS`M5X>cTKowz&yWu}p(rJWqXPO5kr zL&iB7^xERkdKT3x^`5}9YVA97Gkt}nOd^s;EuHi?w@1EEvO|8Zdfob0`@@&nnwOE; z4Xuyj$FcX^>Y+DZPo=lAIyH+e;7burxf;tuG@)j179R0p`D_sz>*mv3gU_})_1Uz9 zK26Z4E{(==L)&AmYOa@y|3zwLESCf_Zb=X4e~jIuHW}@7!X90k&zYN*rnyfBFR{B+ z4<}EsXN``cSl+(OGRp4}f zts;ZJd*H7TQIPqpPrGoHCQq>l*%fGNE6Wr5eCH~ekIXwMHV$-rW27jjt}i-4%Lw=gwqA}6!#}to7xboCDh$%Sy8ET z@kC0VlaqK-#=1HUrmT;KThd#PG`#Ts*f%UkokO&vq!D#>9(K8i@5H?w8XA8Ko_ab& zZFkjH(jxRbF6~wQ0-ZCS*aaz0cS{{z`GbS^6j!mjrols@LtW$WJ5%r0h44^!tTh|O zdv&6A1aS1NUSyNl9>A*a^`e`_wg6gv=h5Bp<&4}vXZQE-VlB+Tlatc_T><{#_2^Ez z6itpV!|Sz?%`r$?uZ`RkgQWE+(np?U89T%4wUMr!E|S)3BV9XPByXon;o2Eq=VaP` z+}4vR)BKiGbf3^V?Mz33bRFCxR#MR+mJROHmsh2Z(w6J)dufQ%f*K^VN zV`b}Fu@C$M{p!L%Xm(RGD9vGG}N~_8qa-t;g8cjCvULwU3@3F zl%>5+P7!+UkFEtvY;hTctBAt zrpePz+rb+H!!LA`;PTY|O~4y8FVcxabFZrL!I>g(=a9HF@M!c%M6ymi zW22lXqwa3`Ex4KXZ4o53qiwew=PC=rnY9_CxZc z|KfcteOvWRQ(X?tg$0Ys??_+C|1$h-07-s43>#<;EXdPMd%P7gY4(}H6S_f}!tdb9 zak;~^*D7wG2L;9K(^h8k;EB@UrGtxS&zuuIx8;+l7yrMcoYYs%t#ppt`IVJTv(@~K zL_>APB^s**RgdWDu5xq=R;!-Ty)#n%guau|(>F~^W{1Y#C@fdfX0Ohl>Y=^1619ij zNtdGA*(;iM6OXefJMTL34*VUNc~y^<$BaqwO)*E2M|QX!eOzwFp^b&1ob^)4fm5;5 z0NvYA?v|m=h}6UIsdO)7SvytNNIfG}ZzuY5Z^cZn)b**GtTHl^qLb`4l4Mut_1=!T z-y4wLG1Q}ttX8!5h9>iHfJWU<1?`OUqxHKR1r*26$$Cp&td1-rZ}#)~QabO8=M^Wv#dGA9W@<{DV4{uMx z^1AU}rW3O3Y_c?SepSh z9YX6mV&4YXTB^@veZOP;9{W~DBQmmcp*=U4;_F^9Fz{>j*%Ih&HPCn#i*AQ))DcvDEdH{CN$ zixzmp?Ap2I+280Eueft~RrQHIy)@qxqAG_N@h}(7;5VK1YKEcdF6f_nXrmH#Awp7C zD`cVi9;NI;E_XVV`g@e}S#a!fDE0R!WePd!QtIzf%8Zom%C{?)I<6Pj{tR~BMkeHzgIgFuLeH)K3MIqes>k>m1=bK9H)A_d~FTK zBaNu08OeG36M5T39=EqJY7SCUg67OU59Ju$&BVOjB%hS=Q4_4K)OOWm)P)D<;-+Bg qK=Q~!x__oj)U!I(Ud7vkgd9F1{JfrtM8g(oc}l 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 literal 0 HcmV?d00001 diff --git a/desmume/src/cocoa/translations/English.lproj/Localizable.strings b/desmume/src/cocoa/translations/English.lproj/Localizable.strings index 684577be954e976f6f12828772b114f9a39a1f01..b79cc352575cb71022b98032bf3757f4354ed7bc 100644 GIT binary patch delta 82 zcmZp0{3f+QfN`=4lg#7*mNk>bIMpV9;__klV8~=hVMv|)QAm6;A2$~=fAa*v6C9g= c$)+(*J|mwq*-XKKr-&gHs9K4^nt_V}033Z6)&Kwi literal 8320 zcmbtZU2juI5Z%}IS6oHn1yv;ppcJaAbv_&@PO$8h6rn!2#w3W4fbBF*e^q~B+jDl9 z%=4`^HO887R06> z&s&V>+*vO1MCt`1JPTJ2YZO6@q3aUbUOSAZ3F6SZha9VyhU= zz*(%j0epLpuOH7i&d{7M(wpHSGR2Brtz`o%{(}Uk74|T!ch<03)Uegjhx=6@HsC`y zFAh-E)r*Sh1p;Y^)iW_t8vSI=XNt&UPn8at`;JE$j{wXAiaC|Wf3LoXb`?$emf zlb8kFsoHC;deKFOR&-_39k{d}jWN&uidHu;e)G3YSFaVlSwRcEjlN$&3%!kgP(ce_ z(0x?c89vO|6mx-Vhwo5oe39OX^}0Y#xhAqdY{C$~FR*@aW-UQuMK4@LK1W8Z=-iQc z${99?ouhCHo3ywK-!0;0^s;xa7xXx;=(*o*dXDyfd$jrOsow84J=g91_Gs_7 z^|Cgn7qNzyS?B5d#X6dP=sIYpjM7T@0@*%8u-Wtp_ zR^cU1-|W6;H><0~w=3R9tB29CYvGRk0XEoq)KBJSE4>}i9395>pIPFWl=0)b%v%B8 zBb3hb-6bR@FQ9uK^T9oZ74wseXqhXLj2X{jX-%e7L9%D&{Q&nYpYt|d(9*wiZ=hcm zp*CI6JD>I-=}vgsI&m^(E+w^Yci|g5Rm%B0h#su7>%0bsr||{;rj)CgUFKOT`y&uM z7yRh#f0-7IM{4(WPo{A^j5U2bjsN9*`DMPX*6X9nyRG)lFDt_Wk(?mbJQdm#7 z`Tbg1+Wbt{0qOj5Yq~!0UWTi~9R5tAC#I>ylMzd|$o`VMil1XSM zH(NEnNWY8`GPFJmmw7dwJdvX_G#^JTDppTE+nfcz#MPbao7R?D?1B|fkKV1c{m5})+` zHRp(r+f|92BND$>C322PysS#(9FZ7QC322PjH(hjMd7r)0I+&5jk3u zxIKgHHJi6>F6wT{^^te;w)!bY?`kY| zM$ua48wH;G*|{)FhV`@*&HJc#!1~j?r=@7Utuf8&pK(N@hfyAcNASlun)MRTOKq)? zN_ir+i!rcADcLIV(lI?nHK(hdj>$Nb&|LX@AU!ks{%7@hQ9De{UVits>TFt*mJy}1 zGrj54d)#Gsj5t~TK1W8Z3{hWG)J%iZ(KY^Z&y`aRPl9PAyI@7@HmYUl{L*LP?qhcL z9ao=)`!gi>9ao>#U%qv<5f9^ASY2_BqGqq#D3rIXm%8A)pE^VCR;zv$ zMm*KJ)6Ri!AM4Dea$iJSnv09=m3qOl`e2s*jc;wQ72CXP>!~yGETWsc3DWdy0>o MHGL-kpEP~{50QsV6ieQ#1Mci*`Kx_xAr+* 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 literal 0 HcmV?d00001 diff --git a/desmume/src/cocoa/translations/French.lproj/Localizable.strings b/desmume/src/cocoa/translations/French.lproj/Localizable.strings index ddb1f40e9..2701f819b 100644 --- a/desmume/src/cocoa/translations/French.lproj/Localizable.strings +++ b/desmume/src/cocoa/translations/French.lproj/Localizable.strings @@ -6,91 +6,16 @@ //"OK" = ?; //"Cancel" = ?; -/* Menu Headers */ -"File" = "Fichier"; -"Emulation" = "Emulation"; -"View" = "Présentation"; -"Sound" = "Son"; -"Window" = "Fenêtre"; -"Help" = "Aide"; - /* File Menu */ -"Open ROM..." = "Ouvrir une ROM..."; -"Open Recent" = "Fichiers récents"; -"ROM Info..." = "Informations sur la ROM..."; -"Save State As..." = "Enregistrer l'état sous..."; -"Load State From..." = "Charger l'état depuis..."; -"Save State" = "Enregistrer l'état"; -"Load State" = "Charger l'état"; -"Close ROM" = "Fermer la ROM"; "Slot %d" = "Slot %d"; /* Emulation Menu */ "Execute" = "Exécuter"; "Pause" = "Pause"; -"Reset" = "Réinitialiser"; -"Frame Skip" = "Saut d'image"; -"Auto" = "Automatique"; -"Off" = "Off"; -"Skip %d" = "%d"; -//"Speed Limit" = ?; -//"25% Speed Limit" = ?; -//"50% Speed Limit" = ?; -//"75% Speed Limit" = ?; -//"100% Speed Limit" = ?; -//"200% Speed Limit" = ?; -//"No Speed Limit" = ?; -//"Custom Speed Limit" = ?; -//"Custom Speed Limit Window" = ?; -//"Set Max Speed:" = ?; -"Speed %d%%" = "%d%%"; -"Set FAT Image File..." = "Définir le fichier d'image FAT..."; /* View Menu */ -"Size 1x" = "Taille 1x"; -"Size 2x" = "Taille 2x"; -"Size 3x" = "Taille 3x"; -"Size 4x" = "Taille 4x"; -"Full Screen" = "Plein écran"; -"Constrain Proportions" = "Contraindre les proportions"; -"No Smaller Than DS" = "Pas plus petit que la DS"; "Show Status Bar" = "Afficher la barre d'état"; -"Rotation" = "Rotation"; -"Rotation 0" = "0°"; -"Rotation 90" = "90°"; -"Rotation 180" = "180°"; -"Rotation 270" = "270°"; -"Layers" = "Calques"; -"Top BG0" = "Top BG0"; -"Top BG1" = "Top BG1"; -"Top BG2" = "Top BG2"; -"Top BG3" = "Top BG3"; -"Sub BG0" = "Sub BG0"; -"Sub BG1" = "Sub BG1"; -"Sub BG2" = "Sub BG2"; -"Sub BG3" = "Sub BG3"; -"Save Screenshot..." = "Enregistrer une capture d'écran..."; - -/* Sound Menu */ -"Volume" = "Volume"; -"Volume %d" = "%d%"; -"Mute" = "Muet"; - -/* Window Menu */ - -/* Help Menu */ -"Go to Website" = "Aller sur le site web"; -"Go to Forums" = "Aller sur les forums"; -"Submit a Bug Report" = "Envoyer un rapport de bug"; - -/* About panel */ -"DeSmuME" = "DeSmuME"; -"Nintendo DS Emulator" = "Emulateur Nintendo DS"; -"Version %@" = "Version %@"; -"Readme" = "Lisez-moi"; -"License" = "Licence"; -"Authors" = "Auteurs"; -"Change Log" = "Change Log"; +"Hide Status Bar" = "Hide Status Bar"; /* Dialogs */ "Are you sure you want to quit?" = "Etes vous su de vouloir quitter ?"; @@ -136,26 +61,6 @@ //"Space Bar" = ?; //"Enter Key" = ?; -/* ROM Info */ -"ROM File" = "Fichier"; -"ROM Title" = "Titre"; -"ROM Maker" = "Maker"; -"ROM Size" = "Taille de la ROM"; -"ARM9 Size" = "ARM9 Size"; -"ARM7 Size" = "ARM7 Size"; -"Data Size" = "Taille des données"; -"ROM Icon" = "Icône de la ROM"; - -/* Screenshots */ -"Save Screenshot to File..." = "Enregistrer une capture d'écran dans un fichier..."; -"Select Image Format: " = "Sélectionner le format d'image :"; -"Pick by Extension" = "Choisir par extension"; -"BMP" = "BMP"; -"GIF" = "GIF"; -"JPG" = "JPG"; -"PNG" = "PNG"; -"TIFF" = "TIFF"; - /* Status Bar */ "No ROM loaded" = "Aucune ROM chargée"; "ROM Loaded" = "ROM chargée"; @@ -163,9 +68,6 @@ "Emulation Paused" = "En pause"; "Emulation Reset" = "Réinitialiser"; -/* Save States */ -"Save State..." = "Enregistrer l'état..."; - /* Errors */ "Error" = "Erreur"; -"An emulation error occured" = "Une erreur d'émulation est survenue"; +"An emulation error occurred" = "Une erreur d'émulation est survenue"; diff --git a/desmume/src/cocoa/translations/French.lproj/MainMenu (Legacy).strings b/desmume/src/cocoa/translations/French.lproj/MainMenu (Legacy).strings new file mode 100644 index 0000000000000000000000000000000000000000..b42051f8e740aa058bc2336e555f15c82d2db948 GIT binary patch literal 28098 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 ACIA2c literal 0 HcmV?d00001 diff --git a/desmume/src/cocoa/translations/Italian.lproj/Localizable.strings b/desmume/src/cocoa/translations/Italian.lproj/Localizable.strings index b77011922b403f3b62c7883582078cda5d339459..fc9e418b47a8401342274eb95ab532aaa760f6a7 100644 GIT binary patch delta 83 zcmZ4I@=AJxDC1;XCYi~NEUPB3=Tw_~lskgmgCUb4g&}qFDQ-nsD4RinA()|rArXj6 f8H#~CCm_3MbA!-#j?KC9EsT@n74s&aR!jx}4jUMM literal 8750 zcmbuF+iqLe5r)@o`V<=ki~vEAL~;T*34)fg4sk=tf+#6*i(W8{BnzP_RR=rvQ{|Cz z*;mL-+y7gm;mqdVQluCJY3*5aT60=6Yx}?dE1#5)N>kR$Q5lz4<+^N_4Ly&`Rkl^(wDL>XdU?;a4dhaqV#Cw& zP9N8IATOP1WiAavlc69#R=%#wcX|Tnti>0Nk$hP_9X#3dtem$vo{A^FY1_&7+$d)7 zG!}CUJr@UHP1%!gw#&!$leIjr@wL3}-VExa>btq*_fyAuSkYuQipzO9mfp+KZ(BF% zV_EpMw6`oED*1aTOD*#Ob0*wL!adX9PbHJR@95uGqINptKN6IvYV+TeJ-~Kc&jI3> zOq_P4tPA4Uw`(3&>(|z!q))4$y-f?Jekwbh$wFAltea_HN`H&WSapq|yAsu-Ruqpb zzkq}7`5F0hCBA0qZUk6>>HFnoC^OguELSideTwpu=y$JpWB+?MH^vZAx&vjv~e%ct+bXLZ5n$sg9| zaZ8^S>GMZ5BHJ%yPijKcqSg1{xGs+8`kacV#|Tn>-|joo;8Gt>2d~=$)g_{w2zzx8 z9=qakA$&3{pFVLC+>c{Z`cI%|(&Aj)(TED#j=cLwA4@}O#J1>vZtdtx*~@dN8-w6u z9io3y!0qM+IrB)L;1dwXHtCyXs6L3(25u+PDf%U^&#uezp5qK<#pvx^h6j9|12Vk= zdY905@{YBucU6ZK*(9`Iue;?;X5ZFzkd5H@ew=dk9+ZZ&O!@d8l!miR`Pn@v4aX=q z70WYy$c3rml$w^ito>R`iB-dRsdch5X9HI7{s*f!Ite(1iOLH_mf7htS&_)07okg= z>$gqe{albhG2c9c-$i4Kouzat+%1H$`_TkiFpFL5KnQn)OC13IVMz!-5r)gCEg6`Au%Ocvk zm|wJTdAbXGrTnFZZ_js8td=J&3VRNUk@otwdMJCGszf)4_rkCHvdy`ywpO-UJeT3- zqYPb1_E?5@u{q(qc4X{0`7-qJE!e<4TCU3vJ$jE7H5uN;&U$BT;9cyjcg7CAGc@bH z40qnqlSj5+DvyX!uaR!4cBeZPmQA5#ArbBP@b;P-vs7PIJ(Qf8Y(zI79%(~O(+unD z!#Gh4bGufk%+Da6fv#CTJ-fO&md|ZnjDcd5>Ty+nztawWsAm9kP2S6-)&c5NbF&VW z;k(Y6)28@cRGZ{{Ih1{=C-xgS&cXa^T_;%N(6vrYCWE6zyS;)>*vz64S4QV+F3Yo;{_IE-uvy6N_1I;*Mt)T9D7!a}{nR1b z?ro0c1?~svjzVkezT%G5ZGgVig$rplsd*Lrme+_X-x0GD-5&R>#9q#=_Db$M==^ND zpqC};u}4T`p2#chUh#!+vm9mx-v{v#eC#R5+wxwB&whKxEntoh@DFO$CN4bwLZU^A z-OF$;P^)v?QQ5GTpN<3hoSZUl6Zwm1AcKg*KljQQitDU=Scb}X&Xlu?m!-HhTtBq(^vdnD0B#j)f&g#SA1Mmj|Hy5?AE~j>iFDX{3KoT{xYo1ov7qCDR}qa zBN=y>HIzTL%NN?$edw)2a+)@eC->xGbq%RcQl#0mcRwxQz#A3nvg_bBd!}sQtPU$U zg!;|yxha%H8`&^Kv`axq*!P zOZt7|@})G3ojZ+pM(mn*!^j94VtV;T)A*R=UC~SxhmEGRxB8`1u<7bjD{WgJ)YFS@ z_`}*y8lKCK(|1kY-%XnOvq_}3Y^GIzw$;Cjax1O+vunH4THRG7D5HLLJ zt=6{h=OXjl{rOBbc>n&~FvI`-_fhpt^>sCF{r=e$9jafZ*O;?`x$oj4w~$TeoLX>GSGMP$lY^KlB4PdcJfdB;osM=<_mbo zp9Z2UOA8ydP0MG3mCIV%X1ciKN@7{hagF^GJXElI$TzDekq$O0uBDNusOKW~_C7`1 zwtS-8NFd+%1CW1*-F}OG?`Qp#V3d$xWJu7(rIZf-3NOCw?Z=cPj+nBRwxTXBr6g%~ z>lNhrsrHK7`EJ{OJgUY@BV0?%Ve=>@#W9f2ss~us4$j~!7ymfn&0I_4Pf_=fpI|3{ z#*QAqPA-7xEwTvy9kA(qfqu>WftkSoxxokI5AX2v05oQZv;6t4dg{nFgtreP-N>3H zn{fRVIA@6Dr{H%99E)6Mb3}rPS5j#eCbm9VOG{{R z$VKkO<0E8)&oeN`o=?nHw$#uph4LBlxuXn}ah^n!R;JX@EQRtp?EWAFWtma8$Hjcl5^@Gkh#cg~fhdsvYhbgpz(q-y(rW8I$RjS^=7 z*V1w8b9fNzZWr}_4YI3fBlvvmKU_;oVR6XSfES5V_T}keoXFp~W=W8?CvwS^LJ;W_ zZ#ncjevRSx>qGD9AQi!U9cZ5(n?9Y6T_rTI9Cm%vu|rIEI&=I*73^fl}?52=oK6Eohmsg^>zTXz)v9n}$SVn(!vW;v8I z+!}t#(7cXb6SGdj>@ZL*h4cs+$1QSQ|1LU7+(o&Tw$eqqrO>jE#4ITfua2t|Gp@#z zOCesYbLP}*dB2alFS3^2X^TTC3HIy$D0{-pnOHUL_CDU}Vyl+5H2#KusLJ-cnF<=6 z&oy-OamUpb;Axpv}6&HTGM4z0D_gzdZ>~5JhItrPuo)(zv@LYiX-qq??P@vW`V+cBV;0aaJU2 zB~f~N`Xlru+2%urP3TxL>a5wa1I8@jrjY0LL#t!O$cz=NFfWVN+vCHUHa&z<$dAdo z@5)M<6*p4Ub8Xl|{*T(@!W@*<=_b0ko+N8&OKwvwh4finFTBRt6uR4-He+q{0RO`5 z!@HXjvGzy1DwE5xl!V{Ga;}iady#vr@@-0HWg|PVNoERi+swsk#lC!uI+BddNU|J8 z&$bt5%LY|Gb{$vjx=YMuJ+eHnEnV#WN7%_(eGcd3f4YXiEZnLgyg?jiM~fNNV9tX+ zCOl~sxfbMUr!A38cHAR=`X@iD3Syn1^GSKE%4#DIrE2(;l;jxxbymlIPOPwV^9(DD zQ>=4*gywECV$%fKf|kqb6S15237R6edwfq`r{ER1QD=gptfXPSh%z_aWM?_u!%0X^ z&JdBDxUwda+2_k7aZBM^`h007k(R;XS+LGQ^c`~1>pkhV64G%kEuE(AAwI#rcTHJ+ zgg2koJ!I-H=!yMB_Tc19m5J`qbG(Nq4yr)clW#jAAJ-nkMm)~VJh#o;lRr#Xc`=9n z$os9ADe!g?d!wwSHMU5%6xw6#-UYtcmwf>}F}ut`9@i>}+{z9by1dW50XKFj&TCHp zuH#XzG-4y#QkMps6VAb!DH|4}MR!v0Kkn>Rv zD>v%mvK~p8yXDIgcc3VXH8Z{_OU!3I((tZ7>>*EF)2BSvMDL4q#;@uDMme{&}XOJ4QNZT z$fJ}LJd20DPJi7Y7$H_zCuREdml$43hRxm?jP4Xr2CGw`We|>x-=$>W6r?-}!YW06 zF2=|dpCepLdxe&y&9`4K(mUVxAQ7tw>|ytlNS`M56G&Pj^5s3A`Cn-bvDz-XZQc86 zNBZ>OT3RD7L6OfNv*OXOp6TsBCq3B5;B>8zS;tnpOL7FvH=r#~6*Yazz7<(df~Na7 zbi04tcO6;n-buRq7xPCXi3<-1(g?4X6*0cnHPk9MOSrX{`1~a0x?WZLOd`d~c z2*>!tC*1gyp49VBFk5(9*Yx)AZ=QdQVO{c>CR^uPS}t;AweScr=s)wn&vCn9or+j^ z-(i#woJ&dCt|7`qztp^Vue-^RQO8|-GWHOXFuJfy%DOB$$oJGL_gfH@jcKpJRp{nS z=g@m}?rZmz0`=u)T*N+fwJ1={o6I3*9gFQgQ=q;aW-kIisea3_8y$D;-cq1g%I06d z@_w10N1hk!DOsM&R&-(o?o;ilJmE+?7qevv{jlmfhuz~^9;;^oC-AtBwTC~)N#yUa z&PMG{mZqJ%!yfAPbp1Kv5^K(!^I@;x4pG~GUW=BYJZm#)Osd(gmc`=gWIUf))m^6LtN`Z9rV$7+tfT=H0{!R z{R&yx4{pSsqWTkC2-nh?Z9v`7E`?eq4wy;ioHNrzKF+l?YE63`sDt*qEJU9uQ=BqB zYN5Rj)Is}QsP!o_HR~Dey)NsGZOS>`sLzzC*)!I(OYe2#FoD1{(`;QP$Ej@$ERA_~G4>H%n%=G9|z& z;;NOWF#W+f9`1tw?w%)Z)q}m5*so8d~04V;lbyZX>sA<sVru0tmxmXA?A=HG?CEG5c#ZI9#2ow{*k2VKMfEiLj>mZ zY=h}3cA~o;K#6tix3kMWTvwIZpW+K|d%eYZBr|J&&yY7{CT$I~8|U+DrUqkT)d|byL(m%$`m9`xW%_E$r|NHNZP)>DJNE6rIu72W73FhBVJr$Y)i#w5|@3tG*NG}Bk%3b@tpXMOG&Jp zSSU+3?@RQQIAf+PjNM;?R>E8Ha&!`B)0D%?rWfh1YEAx5EqD5`yC;z@AXi{c1eA{Wq zzL@8_G&$|1N&RdrCAK=HT9b_)rA%*xR%DQ zX_v(=Pk6Ae&xu4IyS_ziA*)DZ*R;!G=lktgkC%7B^PPCj@79s#`}yRSv(Ar!+lh0C zYyG5cb6ZtL?U6shV()P0dy1zczQGB`ugCTC?6?C@A%rha5v$B?!xDQuP+T16iNOJ%H literal 0 HcmV?d00001 diff --git a/desmume/src/cocoa/translations/Japanese.lproj/Localizable.strings b/desmume/src/cocoa/translations/Japanese.lproj/Localizable.strings index 539a0b88f837c8bf6810ca3ad1379cb1ec5513d0..bfdc411b0eca854168615d055d83279652e8d2e3 100644 GIT binary patch delta 83 zcmZ2sHA7;95aVPiCYi}{EE1eM4c;0YHaKCRFxix)adHHQ+T=H!PV62GnG7imsgpl) gDk8BZH^1Ru#Xk89r^x1KQYMU(TVygOzml;709sia>i_@% literal 7464 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 Hf1vmjTB2}q literal 0 HcmV?d00001 diff --git a/desmume/src/cocoa/translations/Norwegian.lproj/Localizable.strings b/desmume/src/cocoa/translations/Norwegian.lproj/Localizable.strings index 50e3f78fedb548b1e7f72dc57f5222d2da1893ec..ba442d002d897b3819b345cf7fb3915bdafa8701 100644 GIT binary patch delta 87 zcmbQ@Hc4iKDC1;#CYj0MEGs6nbE!>c=J8|qV8~=hVMv|K!J{Y(Wiu!+1T&N{Bm!|M jLotx&1Y{R&b`VzPoV;E{Y;(NA6voNPN?DUnD|rF{m6{dU literal 8980 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 TJZ0JWn0KqTO`nZ6phy1#=|M3c diff --git a/desmume/src/cocoa/translations/Norwegian.lproj/MainMenu (Legacy).strings b/desmume/src/cocoa/translations/Norwegian.lproj/MainMenu (Legacy).strings new file mode 100644 index 0000000000000000000000000000000000000000..6c681c9ea82bbbb872be53f4f4c49cc654b02dfd GIT binary patch literal 27936 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 literal 0 HcmV?d00001 diff --git a/desmume/src/cocoa/translations/Romanian.lproj/Localizable.strings b/desmume/src/cocoa/translations/Romanian.lproj/Localizable.strings index 8b4e1262adeb4c85df63c4ee06394b42cdac0b8b..f2f53d775cb5d2b830858cddc9d2a0699ef53181 100644 GIT binary patch literal 3682 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 z. +*/ + +#import + +#if MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 + #include "macosx_10_4_compat.h" +#endif + + +@class NintendoDS; +@class InputHandler; +@class VideoOutputWindow; +@compatibility_alias CocoaDSCore NintendoDS; +@compatibility_alias CocoaDSRom NintendoDS; + +#if MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_5 +@interface AppDelegate : NSObject +#else +@interface AppDelegate : NSObject +#endif +{ + IBOutlet NSWindow *mainWindow; + IBOutlet NSObjectController *aboutWindowController; + IBOutlet NSObjectController *emuWindowController; + IBOutlet NSObjectController *cdsCoreController; + IBOutlet NSObjectController *romInfoPanelController; + IBOutlet NSTextView *readMeTextView; + + IBOutlet NSMenu *mLoadStateSlot; + IBOutlet NSMenu *mSaveStateSlot; + + InputHandler *keyboardHandler; +} + +// Tools Menu +- (IBAction) showSupportFolderInFinder:(id)sender; + +// Help Menu +- (IBAction) launchWebsite:(id)sender; +- (IBAction) launchForums:(id)sender; +- (IBAction) bugReport:(id)sender; + +- (void) setupSlotMenuItems; +- (NSMenuItem *) addSlotMenuItem:(NSMenu *)menu slotNumber:(NSUInteger)slotNumber; + +@end + +#ifdef __cplusplus +extern "C" +{ +#endif + +void* createThread_gdb(void (*thread_function)( void *data),void *thread_data); +void joinThread_gdb(void *thread_handle); + +#ifdef __cplusplus + +} +#endif diff --git a/desmume/src/cocoa/userinterface/appDelegate_legacy.mm b/desmume/src/cocoa/userinterface/appDelegate_legacy.mm new file mode 100644 index 000000000..53f390291 --- /dev/null +++ b/desmume/src/cocoa/userinterface/appDelegate_legacy.mm @@ -0,0 +1,259 @@ +/* + Copyright (C) 2007 Jeff Bland + Copyright (C) 2012 DeSmuME team + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This file is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with the this software. If not, see . +*/ + +#import "appDelegate_legacy.h" +#import "emuWindowDelegate_legacy.h" +#import "cocoa_input.h" +#import "cocoa_file.h" +#import "cocoa_util.h" +#import "cocoa_globals.h" +#import "nds_control.h" +#import "input.h" +#import "preferences.h" +#include "sndOSX.h" + +#undef BOOL + +#ifdef GDB_STUB +#include +#endif + +#ifdef GDB_STUB +//GDB Stub implementation---------------------------------------------------------------------------- + +void* createThread_gdb(void (*thread_function)( void *data),void *thread_data) +{ + // Create the thread using POSIX routines. + pthread_attr_t attr; + pthread_t* posixThreadID = (pthread_t*)malloc(sizeof(pthread_t)); + + assert(!pthread_attr_init(&attr)); + assert(!pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE)); + + int threadError = pthread_create(posixThreadID, &attr, (void* (*)(void *))thread_function, thread_data); + + assert(!pthread_attr_destroy(&attr)); + + if (threadError != 0) + { + // Report an error. + return NULL; + } + else + { + return posixThreadID; + } +} + +void joinThread_gdb(void *thread_handle) +{ + pthread_join(*((pthread_t*)thread_handle), NULL); + free(thread_handle); +} + +#endif + +@implementation AppDelegate + +- (BOOL)application:(NSApplication *)sender openFile:(NSString *)filename +{ + BOOL result = NO; + NSURL *fileURL = [NSURL fileURLWithPath:filename]; + EmuWindowDelegate *mainWindowDelegate = [mainWindow delegate]; + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + + if (cdsCore == nil) + { + return result; + } + + NSString *fileKind = [CocoaDSFile fileKind:fileURL]; + if ([fileKind isEqualToString:@"DS ROM"] || [fileKind isEqualToString:@"GBA ROM"]) + { + result = [mainWindowDelegate handleLoadRom:fileURL]; + } + + return result; +} + +- (void)applicationWillFinishLaunching:(NSNotification *)notification +{ + EmuWindowDelegate *mainWindowDelegate = (EmuWindowDelegate *)[mainWindow delegate]; + + // Create the needed directories in Application Support if they haven't already + // been created. + if (![CocoaDSFile setupAllAppDirectories]) + { + [CocoaDSUtil quickDialogUsingTitle:NSLocalizedString(@"Error", nil) message:NSLocalizedString(@"Could not create the required directories in your Application Support folder. DeSmuME will now quit.", nil)]; + return; + } + + [CocoaDSFile setupAllFilePaths]; + + // Setup the About window. + NSMutableDictionary *aboutWindowProperties = [NSMutableDictionary dictionaryWithObjectsAndKeys: + [[NSBundle mainBundle] pathForResource:@FILENAME_README ofType:@""], @"readMePath", + [[NSBundle mainBundle] pathForResource:@FILENAME_COPYING ofType:@""], @"licensePath", + [[NSBundle mainBundle] pathForResource:@FILENAME_AUTHORS ofType:@""], @"authorsPath", + [[NSBundle mainBundle] pathForResource:@FILENAME_CHANGELOG ofType:@""], @"changeLogPath", + [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"], @"versionString", + @__DATE__, @"dateString", + nil]; + + [aboutWindowController setContent:aboutWindowProperties]; + + SNDOSXStartup(); + + //Set default values for all preferences + //(this wont override saved preferences as + //they work in different preference domains) + setAppDefaults(); + + // Setup the slot menu items. We set this up manually instead of through Interface + // Builder because we're assuming an arbitrary number of slot items. + [self setupSlotMenuItems]; + + // Setup the user interface controllers. + [romInfoPanelController setContent:[CocoaDSRom romNotLoadedBindings]]; + [emuWindowController setContent:[mainWindowDelegate bindings]]; + + // Init the DS emulation core. + CocoaDSCore *newCore = [[CocoaDSCore alloc] init]; + [newCore setVideoUpdateCallback:@selector(setScreenState:) withObject:[mainWindowDelegate displayView]]; + [newCore setErrorCallback:@selector(emulationError) withObject:[mainWindow delegate]]; + [cdsCoreController setContent:newCore]; + + // Init the DS controller. + CocoaDSController *newController = [[CocoaDSController alloc] init]; + [newCore setCdsController:newController]; + [[mainWindowDelegate displayView] setCdsController:newController]; + + keyboardHandler = [[InputHandler alloc] initWithCdsController:newController]; + NSResponder *mainNextResponder = [mainWindow nextResponder]; + [mainWindow setNextResponder:keyboardHandler]; + [keyboardHandler setNextResponder:mainNextResponder]; +} + +- (void)applicationDidFinishLaunching:(NSNotification *)notification +{ + EmuWindowDelegate *mainWindowDelegate = [mainWindow delegate]; + + //Bring the application to the front + [NSApp activateIgnoringOtherApps:TRUE]; + + //check if it should load something by default + if([[[NSUserDefaults standardUserDefaults] stringForKey:PREF_AFTER_LAUNCHED] compare:PREF_AFTER_LAUNCHED_OPTION_LAST_ROM]==NSOrderedSame) + { + NSArray *recent_documents = [[NSDocumentController sharedDocumentController] recentDocumentURLs]; + + if([recent_documents count] > 0) + { + NSURL *romURL = [recent_documents objectAtIndex:0]; + + [mainWindowDelegate loadRom:romURL]; + } + } +} + +- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender +{ + EmuWindowDelegate *mainWindowDelegate = [mainWindow delegate]; + + //Ask user about quitting if a rom is loaded (avoid accidentally quitting with unsaved progress) + if([mainWindowDelegate isRomLoaded]) + if(![CocoaDSUtil quickYesNoDialogUsingTitle:NSLocalizedString(@"DeSmuME Emulator", nil) message:NSLocalizedString(@"Are you sure you want to quit?", nil)]) + return NSTerminateCancel; + + return NSTerminateNow; +} + +- (void)applicationWillTerminate:(NSNotification*)notification +{ + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + [cdsCore pause]; + + [keyboardHandler release]; + [[cdsCore cdsController] release]; + + [cdsCore release]; + [cdsCoreController setContent:nil]; + + SNDOSXShutdown(); +} + +- (IBAction) showSupportFolderInFinder:(id)sender +{ + NSURL *folderURL = [CocoaDSFile getBaseURLUserAppSupport]; + + [[NSWorkspace sharedWorkspace] openFile:[folderURL path] withApplication:@"Finder"]; +} + +- (IBAction) launchWebsite:(id)sender +{ + [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@STRING_DESMUME_WEBSITE]]; +} + +- (IBAction) launchForums:(id)sender +{ + [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@STRING_DESMUME_FORUM_SITE]]; +} + +- (IBAction) bugReport:(id)sender +{ + [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@STRING_DESMUME_BUG_SITE]]; +} + +- (void) setupSlotMenuItems +{ + NSInteger i; + NSMenuItem *loadItem = nil; + NSMenuItem *saveItem = nil; + + for(i = 0; i < MAX_SAVESTATE_SLOTS; i++) + { + loadItem = [self addSlotMenuItem:mLoadStateSlot slotNumber:(NSUInteger)(i + 1)]; + [loadItem setKeyEquivalentModifierMask:0]; + [loadItem setTag:i]; + [loadItem setAction:@selector(loadEmuSaveStateSlot:)]; + + saveItem = [self addSlotMenuItem:mSaveStateSlot slotNumber:(NSUInteger)(i + 1)]; + [saveItem setKeyEquivalentModifierMask:NSShiftKeyMask]; + [saveItem setTag:i]; + [saveItem setAction:@selector(saveEmuSaveStateSlot:)]; + } +} + +- (NSMenuItem *) addSlotMenuItem:(NSMenu *)menu slotNumber:(NSUInteger)slotNumber +{ + NSUInteger slotNumberKey = slotNumber; + + if (slotNumber == 10) + { + slotNumberKey = 0; + } + + NSMenuItem *mItem = [menu addItemWithTitle:[NSString stringWithFormat:NSSTRING_TITLE_SLOT_NUMBER, slotNumber] + action:nil + keyEquivalent:[NSString stringWithFormat:@"%d", slotNumberKey]]; + + [mItem setTarget:[mainWindow delegate]]; + + return mItem; +} + +@end diff --git a/desmume/src/cocoa/userinterface/emuWindowDelegate_legacy.h b/desmume/src/cocoa/userinterface/emuWindowDelegate_legacy.h new file mode 100644 index 000000000..3d1c44ec1 --- /dev/null +++ b/desmume/src/cocoa/userinterface/emuWindowDelegate_legacy.h @@ -0,0 +1,123 @@ +/* + Copyright (C) 2007 Jeff Bland + Copyright (C) 2012 DeSmuME team + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This file is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with the this software. If not, see . +*/ + +#import + +#if MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 + #include "macosx_10_4_compat.h" +#endif + + +@class NintendoDS; +@class VideoOutputView; +@class InputHandler; +@compatibility_alias CocoaDSCore NintendoDS; +@compatibility_alias CocoaDSRom NintendoDS; +@compatibility_alias CocoaDisplayView VideoOutputView; + +#if MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_5 +@interface EmuWindowDelegate : NSObject +#else +@interface EmuWindowDelegate : NSObject +#endif +{ + NSMutableDictionary *bindings; + NSImage *iconVolumeFull; + NSImage *iconVolumeTwoThird; + NSImage *iconVolumeOneThird; + NSImage *iconVolumeMute; + NSImage *iconExecute; + NSImage *iconPause; + NSImage *iconSpeedNormal; + NSImage *iconSpeedDouble; + + IBOutlet NSWindow *window; + IBOutlet CocoaDisplayView *displayView; + IBOutlet NSView *saveScreenshotPanelAccessoryView; + IBOutlet NSObjectController *emuWindowController; + IBOutlet NSObjectController *cdsCoreController; + IBOutlet NSObjectController *romInfoPanelController; + + BOOL isRomLoading; + NSURL *currentEmuSaveStateURL; + NSUInteger statusBarHeight; + NSSize minDisplayViewSize; + BOOL isSmallestSizeNormal; + BOOL isShowingStatusBar; + NSBitmapImageFileType screenshotFileFormat; +} + +- (NSMutableDictionary *) bindings; +- (CocoaDisplayView *) displayView; +- (void) setContentScalar:(double)s; +- (void) setContentRotation:(double)angleDegrees; +- (double) resizeWithTransform:(NSSize)normalBounds scalar:(double)scalar rotation:(double)angleDegrees; +- (double) maxContentScalar:(NSSize)contentBounds; +- (void) setVolume:(float)vol; +- (float) volume; +- (void) setIsRomLoaded:(BOOL)theState; +- (BOOL) isRomLoaded; +- (void) setStatus:(NSString *)theString; +- (NSString *) status; +- (NSURL *) loadedRomURL; +- (void) emulationError; + +// File Menu +- (IBAction) openRom:(id)sender; +- (IBAction) closeRom:(id)sender; +- (IBAction) openEmuSaveState:(id)sender; +- (IBAction) saveEmuSaveState:(id)sender; +- (IBAction) saveEmuSaveStateAs:(id)sender; +- (IBAction) revertEmuSaveState:(id)sender; +- (IBAction) loadEmuSaveStateSlot:(id)sender; +- (IBAction) saveEmuSaveStateSlot:(id)sender; +- (IBAction) importRomSave:(id)sender; +- (IBAction) exportRomSave:(id)sender; + +// Edit Menu +- (IBAction) copy:(id)sender; + +// Emulation Menu +- (IBAction) speedLimitDisable:(id)sender; +- (IBAction) executeCoreToggle:(id)sender; +- (IBAction) resetCore:(id)sender; +- (IBAction) changeRomSaveType:(id)sender; + +// Window Elements +- (IBAction) changeCoreSpeed:(id)sender; +- (IBAction) changeVolume:(id)sender; +- (IBAction) changeScale:(id)sender; +- (IBAction) changeRotation:(id)sender; +- (IBAction) changeRotationRelative:(id)sender; +- (IBAction) toggleGPUState:(id)sender; + +- (IBAction) toggleMinSize:(id)sender; +- (IBAction) toggleStatusBar:(id)sender; +- (IBAction) changeScreenshotFileFormat:(id)sender; +- (IBAction) saveScreenshotAs:(id)sender; + +- (BOOL) handleLoadRom:(NSURL *)fileURL; +- (BOOL) handleUnloadRom:(NSInteger)reasonID romToLoad:(NSURL *)romURL; +- (BOOL) loadRom:(NSURL *)romURL; +- (BOOL) unloadRom; + +- (void) executeCore; +- (void) pauseCore; +- (void) restoreCoreState; + +@end diff --git a/desmume/src/cocoa/userinterface/emuWindowDelegate_legacy.mm b/desmume/src/cocoa/userinterface/emuWindowDelegate_legacy.mm new file mode 100644 index 000000000..7cb64cd76 --- /dev/null +++ b/desmume/src/cocoa/userinterface/emuWindowDelegate_legacy.mm @@ -0,0 +1,1329 @@ +/* + Copyright (C) 2007 Jeff Bland + Copyright (C) 2012 DeSmuME team + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This file is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with the this software. If not, see . +*/ + +#import "emuWindowDelegate_legacy.h" +#import "cocoa_file.h" +#import "cocoa_globals.h" +#import "cocoa_util.h" +#import "video_output_view.h" +#import "nds_control.h" +#import "input.h" + + +@implementation EmuWindowDelegate + +- (id)init +{ + self = [super init]; + if(self == nil) + { + return nil; + } + + bindings = [[NSMutableDictionary alloc] init]; + if (bindings == nil) + { + [self release]; + self = nil; + return self; + } + + iconVolumeFull = [[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_VolumeFull_16x16" ofType:@"png"]]; + iconVolumeTwoThird = [[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_VolumeTwoThird_16x16" ofType:@"png"]]; + iconVolumeOneThird = [[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_VolumeOneThird_16x16" ofType:@"png"]]; + iconVolumeMute = [[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_VolumeMute_16x16" ofType:@"png"]]; + iconExecute = [[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_Execute_420x420" ofType:@"png"]]; + iconPause = [[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_Pause_420x420" ofType:@"png"]]; + iconSpeedNormal = [[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_Speed1x_420x420" ofType:@"png"]]; + iconSpeedDouble = [[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_Speed2x_420x420" ofType:@"png"]]; + + isRomLoading = NO; + currentEmuSaveStateURL = nil; + statusBarHeight = WINDOW_STATUS_BAR_HEIGHT; + minDisplayViewSize = NSMakeSize(GPU_DISPLAY_WIDTH, GPU_DISPLAY_HEIGHT * 2); + isSmallestSizeNormal = YES; + isShowingStatusBar = YES; + screenshotFileFormat = NSTIFFFileType; + + [bindings setValue:[NSNumber numberWithBool:NO] forKey:@"isWorking"]; + [bindings setValue:[NSNumber numberWithBool:NO] forKey:@"isRomLoaded"]; + [bindings setValue:[NSNumber numberWithFloat:MAX_VOLUME] forKey:@"volume"]; + [bindings setObject:iconVolumeFull forKey:@"volumeIconImage"]; + [bindings setValue:NSSTRING_STATUS_READY forKey:@"status"]; + + return self; +} + +- (void)dealloc +{ + [iconVolumeFull release]; + [iconVolumeTwoThird release]; + [iconVolumeOneThird release]; + [iconVolumeMute release]; + [iconExecute release]; + [iconPause release]; + [iconSpeedNormal release]; + [iconSpeedDouble release]; + [bindings release]; + + [super dealloc]; +} + +- (NSMutableDictionary *) bindings +{ + return bindings; +} + +- (CocoaDisplayView *) displayView +{ + return displayView; +} + +- (void) setContentScalar:(double)s +{ + [displayView setScale:s]; + + // Resize the window when contentScalar changes. + NSSize drawBounds = [displayView normalSize]; + [self resizeWithTransform:drawBounds scalar:s rotation:[displayView rotation]]; +} + +- (void) setContentRotation:(double)angleDegrees +{ + double newAngleDegrees = fmod(angleDegrees, 360.0); + if (newAngleDegrees < 0.0) + { + newAngleDegrees = 360.0 + newAngleDegrees; + } + + if (newAngleDegrees == 360.0) + { + newAngleDegrees = 0.0; + } + + [displayView setRotation:newAngleDegrees]; + + // Set the minimum content size for the window, since this will change based on rotation. + NSSize drawBounds = minDisplayViewSize; + NSSize minContentSize = GetTransformedBounds(drawBounds, 1.0, CLOCKWISE_DEGREES(newAngleDegrees)); + minContentSize.height += statusBarHeight; + [window setContentMinSize:minContentSize]; + + // Resize the window. + NSSize oldBounds = [window frame].size; + [self resizeWithTransform:[displayView normalSize] scalar:[displayView scale] rotation:newAngleDegrees]; + NSSize newBounds = [window frame].size; + + // If the window size didn't change, it is possible that the old and new rotation angles + // are 180 degrees offset from each other. In this case, we'll need to force the + // display view to update itself. + if (oldBounds.width == newBounds.width && oldBounds.height == newBounds.height) + { + [displayView setFrame:[displayView frame]]; + } +} + +- (double) resizeWithTransform:(NSSize)normalBounds scalar:(double)scalar rotation:(double)angleDegrees +{ + // Convert angle to clockwise-direction degrees. + angleDegrees = CLOCKWISE_DEGREES(angleDegrees); + + // Get the maximum scalar size within drawBounds. Constrain scalar to maxScalar if necessary. + NSSize checkSize = GetTransformedBounds(normalBounds, 1.0, angleDegrees); + double maxScalar = [self maxContentScalar:checkSize]; + if (scalar > maxScalar) + { + scalar = maxScalar; + } + + // Get the new bounds for the window's content view based on the transformed draw bounds. + NSSize transformedBounds = GetTransformedBounds(normalBounds, scalar, angleDegrees); + + // Get the center of the content view in screen coordinates. + NSRect windowContentRect = [[window contentView] bounds]; + double translationX = (windowContentRect.size.width - transformedBounds.width) / 2.0; + double translationY = ((windowContentRect.size.height - statusBarHeight) - transformedBounds.height) / 2.0; + + // Resize the window. + NSRect windowFrame = [window frame]; + NSRect newFrame = [window frameRectForContentRect:NSMakeRect(windowFrame.origin.x + translationX, windowFrame.origin.y + translationY, transformedBounds.width, transformedBounds.height + statusBarHeight)]; + [window setFrame:newFrame display:YES animate:NO]; + + return scalar; +} + +- (double) maxContentScalar:(NSSize)contentBounds +{ + // Determine the maximum scale based on the visible screen size (which + // doesn't include the menu bar or dock). + NSRect screenFrame = [[NSScreen mainScreen] visibleFrame]; + NSRect windowFrame = [window frameRectForContentRect:NSMakeRect(0.0, 0.0, contentBounds.width, contentBounds.height + statusBarHeight)]; + + NSSize visibleScreenBounds = { (screenFrame.size.width - (windowFrame.size.width - contentBounds.width)), (screenFrame.size.height - (windowFrame.size.height - contentBounds.height)) }; + double maxS = GetMaxScalarInBounds(contentBounds.width, contentBounds.height, visibleScreenBounds.width, visibleScreenBounds.height); + + return maxS; +} + +- (void) setVolume:(float)vol +{ + [bindings setValue:[NSNumber numberWithFloat:vol] forKey:@"volume"]; + + // Update the icon. + NSImage *currentImage = [bindings valueForKey:@"volumeIconImage"]; + NSImage *newImage = nil; + if (vol <= 0.0f) + { + newImage = iconVolumeMute; + } + else if (vol > 0.0f && vol <= VOLUME_THRESHOLD_LOW) + { + newImage = iconVolumeOneThird; + } + else if (vol > VOLUME_THRESHOLD_LOW && vol <= VOLUME_THRESHOLD_HIGH) + { + newImage = iconVolumeTwoThird; + } + else + { + newImage = iconVolumeFull; + } + + if (newImage != currentImage) + { + [bindings setObject:newImage forKey:@"volumeIconImage"]; + } +} + +- (float) volume +{ + return [(NSNumber *)[bindings valueForKey:@"volume"] floatValue]; +} + +- (void) setIsRomLoaded:(BOOL)theState +{ + [bindings setValue:[NSNumber numberWithBool:theState] forKey:@"isRomLoaded"]; +} + +- (BOOL) isRomLoaded +{ + return [(NSNumber *)[bindings valueForKey:@"isRomLoaded"] boolValue]; +} + +- (void) setStatus:(NSString *)theString +{ + [bindings setValue:theString forKey:@"status"]; +} + +- (NSString *) status +{ + return (NSString *)[bindings valueForKey:@"status"]; +} + +- (NSURL *) loadedRomURL +{ + NSURL *romURL = nil; + + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + if (cdsCore != nil) + { + romURL = [cdsCore loadedRomURL]; + } + + return romURL; +} + +- (void) emulationError +{ + [CocoaDSUtil quickDialogUsingTitle:NSSTRING_ERROR_TITLE_LEGACY message:NSSTRING_ERROR_GENERIC_LEGACY]; +} + +- (IBAction) openRom:(id)sender +{ + if (isRomLoading) + { + return; + } + + NSURL *selectedFile = nil; + NSInteger buttonClicked = NSFileHandlingPanelCancelButton; + NSOpenPanel *panel = [NSOpenPanel openPanel]; + + [panel setCanChooseDirectories:NO]; + [panel setCanChooseFiles:YES]; + [panel setResolvesAliases:YES]; + [panel setAllowsMultipleSelection:NO]; + [panel setTitle:NSSTRING_TITLE_OPEN_ROM_PANEL]; + NSArray *fileTypes = [NSArray arrayWithObjects:@FILE_EXT_ROM_DS, @FILE_EXT_ROM_GBA, nil]; + + // The NSOpenPanel method -(NSInt)runModalForDirectory:file:types: + // is deprecated in Mac OS X v10.6. +#if MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_5 + [panel setAllowedFileTypes:fileTypes]; + buttonClicked = [panel runModal]; +#else + buttonClicked = [panel runModalForDirectory:nil file:nil types:fileTypes]; +#endif + + if (buttonClicked == NSFileHandlingPanelOKButton) + { + selectedFile = [[panel URLs] lastObject]; + if(selectedFile == nil) + { + return; + } + } + else + { + return; + } + + [self handleLoadRom:selectedFile]; +} + +- (IBAction) closeRom:(id)sender; +{ + BOOL willClose = [CocoaDSUtil quickYesNoDialogUsingTitle:NSSTRING_MESSAGE_TITLE_LEGACY message:NSSTRING_MESSAGE_ASK_CLOSE_LEGACY]; + if (willClose) + { + [self handleUnloadRom:REASONFORCLOSE_NORMAL romToLoad:nil]; + } +} + +- (IBAction) openEmuSaveState:(id)sender +{ + BOOL result = NO; + NSURL *selectedFile = nil; + NSInteger buttonClicked = NSFileHandlingPanelCancelButton; + NSOpenPanel *panel = [NSOpenPanel openPanel]; + + [panel setCanChooseDirectories:NO]; + [panel setCanChooseFiles:YES]; + [panel setResolvesAliases:YES]; + [panel setAllowsMultipleSelection:NO]; + [panel setTitle:NSSTRING_TITLE_OPEN_STATE_FILE_PANEL]; + NSArray *fileTypes = [NSArray arrayWithObjects:@FILE_EXT_SAVE_STATE, nil]; + + // The NSOpenPanel method -(NSInt)runModalForDirectory:file:types: + // is deprecated in Mac OS X v10.6. +#if MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_5 + [panel setAllowedFileTypes:fileTypes]; + buttonClicked = [panel runModal]; +#else + buttonClicked = [panel runModalForDirectory:nil file:nil types:fileTypes]; +#endif + + if (buttonClicked == NSFileHandlingPanelOKButton) + { + selectedFile = [[panel URLs] lastObject]; + if(selectedFile == nil) + { + return; + } + } + else + { + return; + } + + [self pauseCore]; + + result = [CocoaDSFile loadState:selectedFile]; + if (result == NO) + { + [self setStatus:NSSTRING_STATUS_SAVESTATE_LOADING_FAILED]; + [self restoreCoreState]; + return; + } + + currentEmuSaveStateURL = selectedFile; + [currentEmuSaveStateURL retain]; + [window setDocumentEdited:YES]; + + [self restoreCoreState]; + [self setStatus:NSSTRING_STATUS_SAVESTATE_LOADED]; +} + +- (IBAction) saveEmuSaveState:(id)sender +{ + BOOL result = NO; + + if ([window isDocumentEdited] && currentEmuSaveStateURL != nil) + { + [self pauseCore]; + + result = [CocoaDSFile saveState:currentEmuSaveStateURL]; + if (result == NO) + { + [self setStatus:NSSTRING_STATUS_SAVESTATE_SAVING_FAILED]; + return; + } + + [window setDocumentEdited:YES]; + + [self restoreCoreState]; + [self setStatus:NSSTRING_STATUS_SAVESTATE_SAVED]; + } + else + { + [self saveEmuSaveStateAs:sender]; + } +} + +- (IBAction) saveEmuSaveStateAs:(id)sender +{ + BOOL result = NO; + NSInteger buttonClicked = NSFileHandlingPanelCancelButton; + NSSavePanel *panel = [NSSavePanel savePanel]; + + [panel setCanCreateDirectories:YES]; + [panel setTitle:NSSTRING_TITLE_SAVE_STATE_FILE_PANEL]; + [panel setRequiredFileType:@FILE_EXT_SAVE_STATE]; + + buttonClicked = [panel runModal]; + if(buttonClicked == NSOKButton) + { + [self pauseCore]; + + NSURL *saveFileURL = [panel URL]; + + result = [CocoaDSFile saveState:saveFileURL]; + if (result == NO) + { + [self setStatus:NSSTRING_STATUS_SAVESTATE_SAVING_FAILED]; + return; + } + + currentEmuSaveStateURL = saveFileURL; + [currentEmuSaveStateURL retain]; + [window setDocumentEdited:YES]; + + [self restoreCoreState]; + [self setStatus:NSSTRING_STATUS_SAVESTATE_SAVED]; + } +} + +- (IBAction) revertEmuSaveState:(id)sender +{ + BOOL result = NO; + + if ([window isDocumentEdited] && currentEmuSaveStateURL != nil) + { + [self pauseCore]; + + result = [CocoaDSFile loadState:currentEmuSaveStateURL]; + if (result == NO) + { + [self setStatus:NSSTRING_STATUS_SAVESTATE_REVERTING_FAILED]; + return; + } + + [window setDocumentEdited:YES]; + + [self restoreCoreState]; + [self setStatus:NSSTRING_STATUS_SAVESTATE_REVERTED]; + } +} + +- (IBAction) loadEmuSaveStateSlot:(id)sender +{ + BOOL result = NO; + NSInteger i = [CocoaDSUtil getIBActionSenderTag:sender]; + + NSString *saveStatePath = [[CocoaDSFile saveStateURL] path]; + if (saveStatePath == nil) + { + return; + } + + if (i < 0 || i > MAX_SAVESTATE_SLOTS) + { + return; + } + + NSString *fileName = [CocoaDSFile getSaveSlotFileName:[self loadedRomURL] slotNumber:(NSUInteger)(i + 1)]; + if (fileName == nil) + { + return; + } + + [self pauseCore]; + + result = [CocoaDSFile loadState:[NSURL fileURLWithPath:[saveStatePath stringByAppendingPathComponent:fileName]]]; + if (result == NO) + { + [self setStatus:NSSTRING_STATUS_SAVESTATE_LOADING_FAILED]; + } + + [self restoreCoreState]; + [self setStatus:NSSTRING_STATUS_SAVESTATE_LOADED]; +} + +- (IBAction) saveEmuSaveStateSlot:(id)sender +{ + BOOL result = NO; + NSInteger i = [CocoaDSUtil getIBActionSenderTag:sender]; + + NSString *saveStatePath = [[CocoaDSFile saveStateURL] path]; + if (saveStatePath == nil) + { + [self setStatus:NSSTRING_STATUS_CANNOT_GENERATE_SAVE_PATH]; + return; + } + + result = [CocoaDSFile createUserAppSupportDirectory:@"States"]; + if (result == NO) + { + [self setStatus:NSSTRING_STATUS_CANNOT_CREATE_SAVE_DIRECTORY]; + return; + } + + if (i < 0 || i > MAX_SAVESTATE_SLOTS) + { + return; + } + + NSString *fileName = [CocoaDSFile getSaveSlotFileName:[self loadedRomURL] slotNumber:(NSUInteger)(i + 1)]; + if (fileName == nil) + { + return; + } + + [self pauseCore]; + + result = [CocoaDSFile saveState:[NSURL fileURLWithPath:[saveStatePath stringByAppendingPathComponent:fileName]]]; + if (result == NO) + { + [self setStatus:NSSTRING_STATUS_SAVESTATE_SAVING_FAILED]; + return; + } + + [self restoreCoreState]; + [self setStatus:NSSTRING_STATUS_SAVESTATE_SAVED]; +} + +- (IBAction) importRomSave:(id)sender +{ + NSURL *selectedFile = nil; + NSInteger buttonClicked = NSFileHandlingPanelCancelButton; + NSOpenPanel *panel = [NSOpenPanel openPanel]; + + [panel setCanChooseDirectories:NO]; + [panel setCanChooseFiles:YES]; + [panel setResolvesAliases:YES]; + [panel setAllowsMultipleSelection:NO]; + [panel setTitle:NSSTRING_TITLE_IMPORT_BACKUP_MEMORY_PANEL]; + NSArray *fileTypes = [NSArray arrayWithObjects:@FILE_EXT_ROM_DS, @FILE_EXT_ROM_GBA, nil]; + + // The NSOpenPanel method -(NSInt)runModalForDirectory:file:types: + // is deprecated in Mac OS X v10.6. +#if MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_5 + [panel setAllowedFileTypes:fileTypes]; + buttonClicked = [panel runModal]; +#else + buttonClicked = [panel runModalForDirectory:nil file:nil types:fileTypes]; +#endif + + if (buttonClicked == NSFileHandlingPanelOKButton) + { + selectedFile = [[panel URLs] lastObject]; + if(selectedFile == nil) + { + return; + } + } + else + { + return; + } + + BOOL result = [CocoaDSFile importRomSave:selectedFile]; + if (!result) + { + [self setStatus:NSSTRING_STATUS_BATTERY_IMPORT_FAILED]; + return; + } + + [self setStatus:NSSTRING_STATUS_BATTERY_IMPORTED]; +} + +- (IBAction) exportRomSave:(id)sender +{ + BOOL result = NO; + NSInteger buttonClicked; + NSSavePanel *panel = [NSSavePanel savePanel]; + [panel setTitle:NSSTRING_TITLE_EXPORT_BACKUP_MEMORY_PANEL]; + [panel setCanCreateDirectories:YES]; + [panel setRequiredFileType:@FILE_EXT_ROM_SAVE_NOGBA]; + + //save it + buttonClicked = [panel runModal]; + if(buttonClicked == NSOKButton) + { + [self pauseCore]; + + result = [CocoaDSFile exportRomSave:[panel URL]]; + if (result == NO) + { + [self setStatus:NSSTRING_STATUS_BATTERY_EXPORT_FAILED]; + return; + } + + [self restoreCoreState]; + [self setStatus:NSSTRING_STATUS_BATTERY_EXPORTED]; + } +} + +- (IBAction) copy:(id)sender +{ + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + + [cdsCore copyToPasteboard]; +} + +- (IBAction) executeCoreToggle:(id)sender +{ + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + + if ([cdsCore paused]) + { + if ([self isRomLoaded]) + { + [self executeCore]; + } + } + else + { + [self pauseCore]; + } +} + +- (IBAction) resetCore:(id)sender +{ + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + + if ([self isRomLoaded]) + { + [self setStatus:NSSTRING_STATUS_EMULATOR_RESETTING]; + [bindings setValue:[NSNumber numberWithBool:YES] forKey:@"isWorking"]; + [window displayIfNeeded]; + + [cdsCore reset]; + if ([cdsCore paused]) + { + [displayView setViewToWhite]; + } + + [self setStatus:NSSTRING_STATUS_EMULATOR_RESET_LEGACY]; + [bindings setValue:[NSNumber numberWithBool:NO] forKey:@"isWorking"]; + [window displayIfNeeded]; + } +} + +- (IBAction) speedLimitDisable:(id)sender +{ + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + + if ([cdsCore isSpeedLimitEnabled]) + { + [cdsCore setIsSpeedLimitEnabled:NO]; + [self setStatus:NSSTRING_STATUS_SPEED_LIMIT_DISABLED]; + } + else + { + [cdsCore setIsSpeedLimitEnabled:YES]; + [self setStatus:NSSTRING_STATUS_SPEED_LIMIT_ENABLED]; + } +} + +- (IBAction) changeRomSaveType:(id)sender +{ + if (![self isRomLoaded]) + { + return; + } + + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + [cdsCore setSaveType:[CocoaDSUtil getIBActionSenderTag:sender]]; +} + +- (IBAction) changeCoreSpeed:(id)sender +{ + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + + [cdsCore setSpeedScalar:(CGFloat)[CocoaDSUtil getIBActionSenderTag:sender] / 100.0f]; +} + +- (IBAction) changeVolume:(id)sender +{ + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + float vol = [self volume]; + + [self setVolume:vol]; + [self setStatus:[NSString stringWithFormat:NSSTRING_STATUS_VOLUME, vol]]; + [cdsCore setVolume:vol]; +} + +- (IBAction) changeScale:(id)sender +{ + [self setContentScalar:(double)[CocoaDSUtil getIBActionSenderTag:sender] / 100.0]; +} + +- (IBAction) changeRotation:(id)sender +{ + // Get the rotation value from the sender. + if ([sender isMemberOfClass:[NSSlider class]]) + { + [self setContentRotation:[(NSSlider *)sender doubleValue]]; + } + else + { + [self setContentRotation:(double)[CocoaDSUtil getIBActionSenderTag:sender]]; + } +} + +- (IBAction) changeRotationRelative:(id)sender +{ + double angleDegrees = [displayView rotation] + (double)[CocoaDSUtil getIBActionSenderTag:sender]; + [self setContentRotation:angleDegrees]; +} + +- (IBAction) toggleGPUState:(id)sender +{ + NSInteger i = [CocoaDSUtil getIBActionSenderTag:sender]; + UInt32 flags = [displayView gpuStateFlags]; + + flags ^= (1 << i); + + [displayView setGpuStateFlags:flags]; +} + +- (IBAction) toggleMinSize:(id)sender +{ + if (isSmallestSizeNormal) + { + minDisplayViewSize.width /= 4; + minDisplayViewSize.height /= 4; + isSmallestSizeNormal = NO; + } + else + { + minDisplayViewSize.width = GPU_DISPLAY_WIDTH; + minDisplayViewSize.height = GPU_DISPLAY_HEIGHT * 2; + isSmallestSizeNormal = YES; + } + + // Set the minimum content size, keeping the display rotation in mind. + NSSize transformedMinSize = GetTransformedBounds(minDisplayViewSize, 1.0, CLOCKWISE_DEGREES([displayView rotation])); + transformedMinSize.height += statusBarHeight; + [window setContentMinSize:transformedMinSize]; + + // Resize the window if it's smaller than the minimum content size. + NSRect windowContentRect = [window contentRectForFrameRect:[window frame]]; + if (windowContentRect.size.width < transformedMinSize.width || windowContentRect.size.height < transformedMinSize.height) + { + // Prepare to resize. + NSRect oldFrameRect = [window frame]; + windowContentRect.size = transformedMinSize; + NSRect newFrameRect = [window frameRectForContentRect:windowContentRect]; + + // Keep the window centered when expanding the size. + newFrameRect.origin.x = oldFrameRect.origin.x - ((newFrameRect.size.width - oldFrameRect.size.width) / 2); + newFrameRect.origin.y = oldFrameRect.origin.y - ((newFrameRect.size.height - oldFrameRect.size.height) / 2); + + // Set the window size. + [window setFrame:newFrameRect display:YES animate:NO]; + } +} + +- (IBAction) toggleStatusBar:(id)sender +{ + NSRect frameRect = [window frame]; + + if (isShowingStatusBar) + { + isShowingStatusBar = NO; + statusBarHeight = 0; + frameRect.origin.y += WINDOW_STATUS_BAR_HEIGHT; + frameRect.size.height -= WINDOW_STATUS_BAR_HEIGHT; + } + else + { + isShowingStatusBar = YES; + statusBarHeight = WINDOW_STATUS_BAR_HEIGHT; + frameRect.origin.y -= WINDOW_STATUS_BAR_HEIGHT; + frameRect.size.height += WINDOW_STATUS_BAR_HEIGHT; + } + + [window setFrame:frameRect display:YES animate:NO]; +} + +- (IBAction) changeScreenshotFileFormat:(id)sender +{ + screenshotFileFormat = (NSBitmapImageFileType)[CocoaDSUtil getIBActionSenderTag:sender]; +} + +- (IBAction) saveScreenshotAs:(id)sender +{ + [self pauseCore]; + + NSInteger buttonClicked = NSFileHandlingPanelCancelButton; + NSSavePanel *panel = [NSSavePanel savePanel]; + + [panel setCanCreateDirectories:YES]; + [panel setTitle:@"Save Screenshot As"]; + [panel setAccessoryView:saveScreenshotPanelAccessoryView]; + + buttonClicked = [panel runModal]; + if(buttonClicked == NSOKButton) + { + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + + BOOL fileSaved = [CocoaDSFile saveScreenshot:[panel URL] bitmapData:[cdsCore bitmapImageRep] fileType:screenshotFileFormat]; + if (!fileSaved) + { + [CocoaDSUtil quickDialogUsingTitle:NSSTRING_ERROR_TITLE_LEGACY message:NSSTRING_ERROR_SCREENSHOT_FAILED_LEGACY]; + } + } + + [self restoreCoreState]; +} + +- (BOOL) handleLoadRom:(NSURL *)fileURL +{ + BOOL result = NO; + + if (isRomLoading) + { + return result; + } + + result = [self loadRom:fileURL]; + + return result; +} + +- (BOOL) handleUnloadRom:(NSInteger)reasonID romToLoad:(NSURL *)romURL +{ + BOOL result = NO; + + if (isRomLoading || ![self isRomLoaded]) + { + return result; + } + + [self pauseCore]; + result = [self unloadRom]; + + return result; +} + +- (BOOL) loadRom:(NSURL *)romURL +{ + BOOL romLoaded = NO; + + if (romURL == nil) + { + return romLoaded; + } + + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + + [self setStatus:NSSTRING_STATUS_ROM_LOADING]; + [bindings setValue:[NSNumber numberWithBool:YES] forKey:@"isWorking"]; + [window displayIfNeeded]; + + // Need to pause the core before loading the ROM. + [self pauseCore]; + + // Load the ROM. + isRomLoading = YES; + romLoaded = [cdsCore loadRom:romURL]; + if (!romLoaded) + { + // If ROM loading fails, restore the core state, but only if a ROM is already loaded. + if([self isRomLoaded]) + { + [self restoreCoreState]; + } + + [self setStatus:NSSTRING_STATUS_ROM_LOADING_FAILED_LEGACY]; + [bindings setValue:[NSNumber numberWithBool:NO] forKey:@"isWorking"]; + + isRomLoading = NO; + return romLoaded; + } + + [romInfoPanelController setContent:[cdsCore romInfoBindings]]; + + // After the ROM loading is complete, send an execute message to the Cocoa DS per + // user preferences. + if ([[NSUserDefaults standardUserDefaults] boolForKey:@"ExecuteROMOnLoad"]) + { + [self executeCore]; + } + + // Add the last loaded ROM to the Recent ROMs list. + [[NSDocumentController sharedDocumentController] noteNewRecentDocumentURL:[cdsCore loadedRomURL]]; + + // Update the UI to indicate that a ROM has indeed been loaded. + [displayView setViewToWhite]; + [self setStatus:NSSTRING_STATUS_ROM_LOADED_LEGACY]; + [bindings setValue:[NSNumber numberWithBool:NO] forKey:@"isWorking"]; + [self setIsRomLoaded:YES]; + [window displayIfNeeded]; + isRomLoading = NO; + + romLoaded = YES; + + return romLoaded; +} + +- (BOOL) unloadRom +{ + BOOL result = NO; + + [currentEmuSaveStateURL release]; + currentEmuSaveStateURL = nil; + [window setDocumentEdited:NO]; + + // Update the UI to indicate that the ROM has started the process of unloading. + [self setStatus:NSSTRING_STATUS_ROM_UNLOADING]; + [romInfoPanelController setContent:[CocoaDSRom romNotLoadedBindings]]; + + [bindings setValue:[NSNumber numberWithBool:YES] forKey:@"isWorking"]; + [window displayIfNeeded]; + + // Unload the ROM. + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + [cdsCore closeROM]; + + // Update the UI to indicate that the ROM has finished unloading. + [displayView setViewToBlack]; + [self setStatus:NSSTRING_STATUS_ROM_UNLOADED_LEGACY]; + [bindings setValue:[NSNumber numberWithBool:NO] forKey:@"isWorking"]; + [self setIsRomLoaded:NO]; + [window displayIfNeeded]; + + result = YES; + + return result; +} + +- (void) executeCore +{ + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + [cdsCore setCoreState:CORESTATE_EXECUTE]; + [self setStatus:NSSTRING_STATUS_EMULATOR_EXECUTING_LEGACY]; +} + +- (void) pauseCore +{ + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + [cdsCore setCoreState:CORESTATE_PAUSE]; + [self setStatus:NSSTRING_STATUS_EMULATOR_PAUSED_LEGACY]; +} + +- (void) restoreCoreState +{ + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + [cdsCore restoreCoreState]; +} + +- (BOOL)windowShouldClose:(id)sender +{ + BOOL shouldClose = YES; + + // If no ROM is loaded, terminate the application. + if (![self isRomLoaded]) + { + [NSApp terminate:sender]; + } + // If a ROM is loaded, just close the ROM, but don't terminate. + else + { + shouldClose = NO; + [self closeRom:nil]; + } + + return shouldClose; +} + +- (void)windowDidResize:(NSNotification *)notification +{ + if (displayView == nil) + { + return; + } + + NSSize normalBounds = [displayView normalSize]; + double r = [displayView rotation]; + + // Get the max scalar within the window's current content bounds. + NSSize checkSize = GetTransformedBounds(normalBounds, 1.0, r); + NSSize contentBounds = [[window contentView] bounds].size; + contentBounds.height -= statusBarHeight; + double maxS = GetMaxScalarInBounds(checkSize.width, checkSize.height, contentBounds.width, contentBounds.height); + + // Set the display view's properties. + [displayView setScale:maxS]; + + // Resize the view. + NSRect newContentFrame = [[window contentView] bounds]; + newContentFrame.origin.y = statusBarHeight; + newContentFrame.size.height -= statusBarHeight; + [displayView setFrame:newContentFrame]; +} + +- (NSSize)windowWillResize:(NSWindow *)sender toSize:(NSSize)frameSize +{ + NSSize finalSize = frameSize; + const NSSize normalBounds = [displayView normalSize]; + + // Get a content Rect so that we can make our comparison. + // This will be based on the proposed frameSize. + const NSRect frameRect = NSMakeRect(0.0f, 0.0f, frameSize.width, frameSize.height); + const NSRect contentRect = [sender contentRectForFrameRect:frameRect]; + + // Find the maximum scalar we can use for the display view, bounded by the + // content Rect. + const NSSize checkSize = GetTransformedBounds(normalBounds, 1.0, [displayView rotation]); + const NSSize contentBounds = NSMakeSize(contentRect.size.width, contentRect.size.height - statusBarHeight); + const double maxS = GetMaxScalarInBounds(checkSize.width, checkSize.height, contentBounds.width, contentBounds.height); + [displayView setScale:maxS]; + + // Make a new content Rect with our max scalar, and convert it back to a frame Rect. + NSRect finalContentRect = NSMakeRect(0.0f, 0.0f, checkSize.width * maxS, (checkSize.height * maxS) + statusBarHeight); + NSRect finalFrameRect = [sender frameRectForContentRect:finalContentRect]; + + // Set the final size based on our new frame Rect. + finalSize.width = finalFrameRect.size.width; + finalSize.height = finalFrameRect.size.height; + + return finalSize; +} + +- (void)windowDidBecomeMain:(NSNotification *)notification +{ + [emuWindowController setContent:bindings]; +} + +- (BOOL)validateUserInterfaceItem:(id )theItem +{ + BOOL enable = YES; + SEL theAction = [theItem action]; + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + + if (theAction == @selector(importRomSave:) || + theAction == @selector(exportRomSave:)) + { + if (![self isRomLoaded]) + { + enable = NO; + } + } + else if (theAction == @selector(executeCoreToggle:)) + { + if (![self isRomLoaded] || + ![cdsCore masterExecute]) + { + enable = NO; + } + + if ([(id)theItem isMemberOfClass:[NSMenuItem class]]) + { + if ([cdsCore paused]) + { + [(NSMenuItem*)theItem setTitle:NSSTRING_TITLE_EXECUTE_CONTROL]; + } + else + { + [(NSMenuItem*)theItem setTitle:NSSTRING_TITLE_PAUSE_CONTROL]; + } + } + else if ([(id)theItem isMemberOfClass:[NSToolbarItem class]]) + { + if ([cdsCore paused]) + { + [(NSToolbarItem*)theItem setLabel:NSSTRING_TITLE_EXECUTE_CONTROL]; + [(NSToolbarItem*)theItem setImage:iconExecute]; + } + else + { + [(NSToolbarItem*)theItem setLabel:NSSTRING_TITLE_PAUSE_CONTROL]; + [(NSToolbarItem*)theItem setImage:iconPause]; + } + } + } + else if (theAction == @selector(executeCore) || + theAction == @selector(pauseCore)) + { + if (![self isRomLoaded] || + ![cdsCore masterExecute]) + { + enable = NO; + } + } + else if (theAction == @selector(resetCore:)) + { + if (![self isRomLoaded]) + { + enable = NO; + } + } + else if (theAction == @selector(openRom:)) + { + if (isRomLoading) + { + enable = NO; + } + } + else if (theAction == @selector(closeRom:)) + { + if (![self isRomLoaded] || isRomLoading) + { + enable = NO; + } + } + else if (theAction == @selector(loadEmuSaveStateSlot:)) + { + if (![self isRomLoaded]) + { + enable = NO; + } + else if (![CocoaDSFile saveStateExistsForSlot:[self loadedRomURL] slotNumber:[theItem tag] + 1]) + { + enable = NO; + } + } + else if (theAction == @selector(saveEmuSaveStateSlot:)) + { + if (![self isRomLoaded]) + { + enable = NO; + } + + if ([(id)theItem isMemberOfClass:[NSMenuItem class]]) + { + if ([CocoaDSFile saveStateExistsForSlot:[self loadedRomURL] slotNumber:[theItem tag] + 1]) + { + [(NSMenuItem*)theItem setState:NSOnState]; + } + else + { + [(NSMenuItem*)theItem setState:NSOffState]; + } + } + } + else if (theAction == @selector(changeCoreSpeed:)) + { + NSInteger speedScalar = (NSInteger)([cdsCore speedScalar] * 100.0); + + if ([(id)theItem isMemberOfClass:[NSMenuItem class]]) + { + if ([theItem tag] == -1) + { + if (speedScalar == (NSInteger)(SPEED_SCALAR_QUARTER * 100.0) || + speedScalar == (NSInteger)(SPEED_SCALAR_HALF * 100.0) || + speedScalar == (NSInteger)(SPEED_SCALAR_NORMAL * 100.0) || + speedScalar == (NSInteger)(SPEED_SCALAR_THREE_QUARTER * 100.0) || + speedScalar == (NSInteger)(SPEED_SCALAR_DOUBLE * 100.0)) + { + [(NSMenuItem*)theItem setState:NSOffState]; + } + else + { + [(NSMenuItem*)theItem setState:NSOnState]; + } + } + else if (speedScalar == [theItem tag]) + { + [(NSMenuItem*)theItem setState:NSOnState]; + } + else + { + [(NSMenuItem*)theItem setState:NSOffState]; + } + } + else if ([(id)theItem isMemberOfClass:[NSToolbarItem class]]) + { + if (speedScalar == (NSInteger)(SPEED_SCALAR_DOUBLE * 100.0)) + { + [(NSToolbarItem*)theItem setLabel:NSSTRING_TITLE_SPEED_1X]; + [(NSToolbarItem*)theItem setTag:100]; + [(NSToolbarItem*)theItem setImage:iconSpeedNormal]; + } + else + { + [(NSToolbarItem*)theItem setLabel:NSSTRING_TITLE_SPEED_2X]; + [(NSToolbarItem*)theItem setTag:200]; + [(NSToolbarItem*)theItem setImage:iconSpeedDouble]; + } + } + } + else if (theAction == @selector(speedLimitDisable:)) + { + if ([(id)theItem isMemberOfClass:[NSMenuItem class]]) + { + if ([cdsCore isSpeedLimitEnabled]) + { + [(NSMenuItem*)theItem setTitle:NSSTRING_TITLE_DISABLE_SPEED_LIMIT]; + } + else + { + [(NSMenuItem*)theItem setTitle:NSSTRING_TITLE_ENABLE_SPEED_LIMIT]; + } + } + } + else if (theAction == @selector(changeRomSaveType:)) + { + if ([(id)theItem isMemberOfClass:[NSMenuItem class]]) + { + if ([cdsCore saveType] == [theItem tag]) + { + [(NSMenuItem*)theItem setState:NSOnState]; + } + else + { + [(NSMenuItem*)theItem setState:NSOffState]; + } + } + } + else if (theAction == @selector(changeScale:)) + { + NSInteger viewScale = (NSInteger)([displayView scale] * 100.0); + + if ([(id)theItem isMemberOfClass:[NSMenuItem class]]) + { + if (viewScale == [theItem tag]) + { + [(NSMenuItem*)theItem setState:NSOnState]; + } + else + { + [(NSMenuItem*)theItem setState:NSOffState]; + } + } + } + else if (theAction == @selector(changeRotation:)) + { + NSInteger viewRotation = (NSInteger)([displayView rotation]); + + if ([(id)theItem isMemberOfClass:[NSMenuItem class]]) + { + if ([theItem tag] == -1) + { + if (viewRotation == 0 || + viewRotation == 90 || + viewRotation == 180 || + viewRotation == 270) + { + [(NSMenuItem*)theItem setState:NSOffState]; + } + else + { + [(NSMenuItem*)theItem setState:NSOnState]; + } + } + else if (viewRotation == [theItem tag]) + { + [(NSMenuItem*)theItem setState:NSOnState]; + } + else + { + [(NSMenuItem*)theItem setState:NSOffState]; + } + } + } + else if (theAction == @selector(changeDisplayMode:)) + { + if ([(id)theItem isMemberOfClass:[NSMenuItem class]]) + { + if ([displayView displayMode] == [theItem tag]) + { + [(NSMenuItem*)theItem setState:NSOnState]; + } + else + { + [(NSMenuItem*)theItem setState:NSOffState]; + } + } + } + else if (theAction == @selector(openEmuSaveState:) || + theAction == @selector(saveEmuSaveState:) || + theAction == @selector(saveEmuSaveStateAs:)) + { + if (![self isRomLoaded]) + { + enable = NO; + } + } + else if (theAction == @selector(revertEmuSaveState:)) + { + if (![self isRomLoaded] || currentEmuSaveStateURL == nil) + { + enable = NO; + } + } + else if (theAction == @selector(toggleGPUState:)) + { + if ([(id)theItem isMemberOfClass:[NSMenuItem class]]) + { + if ([displayView gpuStateByBit:[theItem tag]]) + { + [(NSMenuItem*)theItem setState:NSOnState]; + } + else + { + [(NSMenuItem*)theItem setState:NSOffState]; + } + } + } + else if (theAction == @selector(toggleStatusBar:)) + { + if ([(id)theItem isMemberOfClass:[NSMenuItem class]]) + { + if (isShowingStatusBar) + { + [(NSMenuItem*)theItem setTitle:NSSTRING_TITLE_HIDE_STATUS_BAR]; + } + else + { + [(NSMenuItem*)theItem setTitle:NSSTRING_TITLE_SHOW_STATUS_BAR]; + } + } + } + else if (theAction == @selector(toggleMinSize:)) + { + if ([(id)theItem isMemberOfClass:[NSMenuItem class]]) + { + if (isSmallestSizeNormal) + { + [(NSMenuItem*)theItem setState:NSOnState]; + } + else + { + [(NSMenuItem*)theItem setState:NSOffState]; + } + } + } + + return enable; +} + +@end diff --git a/desmume/src/cocoa/video_output_view.h b/desmume/src/cocoa/video_output_view.h index 8bfed3239..469a60dc5 100644 --- a/desmume/src/cocoa/video_output_view.h +++ b/desmume/src/cocoa/video_output_view.h @@ -19,10 +19,15 @@ #import +#if MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 + #include "macosx_10_4_compat.h" +#endif + //This class uses OpenGL for drawing for speed //if opengl is not available it uses NSImage @class ScreenState; +@class CocoaDSController; @interface VideoOutputView : #ifdef HAVE_OPENGL @@ -35,6 +40,12 @@ NSImageView NSOpenGLContext* context; #endif ScreenState *screen_buffer; + double viewScale; + double viewRotation; + NSInteger displayMode; + UInt32 gpuStateFlags; + + CocoaDSController *cdsController; } //init - (id)initWithFrame:(NSRect)frame; @@ -46,5 +57,36 @@ NSImageView //size in pixels of screen display (disreguarding rotation of the view) - (float)screenHeight; - (float)screenWidth; + +- (NSSize) normalSize; +- (void) setScale:(double)scalar; +- (double) scale; +- (void) setRotation:(double)angleDegrees; +- (double) rotation; +- (void) setDisplayMode:(NSInteger)theMode; +- (NSInteger) displayMode; +- (void) setGpuStateFlags:(UInt32)flags; +- (UInt32) gpuStateFlags; +- (void) setCdsController:(CocoaDSController *)theController; +- (CocoaDSController*) cdsController; + +- (void) setViewToBlack; +- (void) setViewToWhite; +- (BOOL) gpuStateByBit:(UInt32)stateBit; +- (NSPoint) convertPointToDS:(NSPoint)touchLoc; + @end +#ifdef __cplusplus +extern "C" +{ +#endif + +void SetGPULayerState(int displayType, unsigned int i, bool state); +bool GetGPULayerState(int displayType, unsigned int i); +void SetGPUDisplayState(int displayType, bool state); +bool GetGPUDisplayState(int displayType); + +#ifdef __cplusplus +} +#endif diff --git a/desmume/src/cocoa/video_output_view.mm b/desmume/src/cocoa/video_output_view.mm index ca9960d95..81b3bc4fa 100644 --- a/desmume/src/cocoa/video_output_view.mm +++ b/desmume/src/cocoa/video_output_view.mm @@ -19,8 +19,16 @@ #import "video_output_view.h" #import "nds_control.h" +#import "input.h" +#import "cocoa_input.h" +#import "cocoa_globals.h" #import "cocoa_util.h" +#import "preferences.h" #import "screen_state.h" +#include "../GPU.h" +#include "../NDSSystem.h" + +#undef BOOL #define HORIZONTAL(angle) ((angle) == -90 || (angle) == -270) #define VERTICAL(angle) ((angle) == 0 || (angle) == -180) @@ -52,6 +60,21 @@ } screen_buffer = nil; + viewScale = 1.0; + viewRotation = 0.0; + displayMode = DS_DISPLAY_TYPE_COMBO; + gpuStateFlags = GPUSTATE_MAIN_GPU_MASK | + GPUSTATE_MAIN_BG0_MASK | + GPUSTATE_MAIN_BG1_MASK | + GPUSTATE_MAIN_BG2_MASK | + GPUSTATE_MAIN_BG3_MASK | + GPUSTATE_MAIN_OBJ_MASK | + GPUSTATE_SUB_GPU_MASK | + GPUSTATE_SUB_BG0_MASK | + GPUSTATE_SUB_BG1_MASK | + GPUSTATE_SUB_BG2_MASK | + GPUSTATE_SUB_BG3_MASK | + GPUSTATE_SUB_OBJ_MASK; //Initialize image view if for displaying the screen ---------------------------------------- #ifndef HAVE_OPENGL @@ -98,7 +121,9 @@ //init screen buffer [self setScreenState:[ScreenState blackScreenState]]; - + + cdsController = nil; + return self; } @@ -160,6 +185,193 @@ return DS_SCREEN_HEIGHT*2; } +- (NSSize) normalSize +{ + return [ScreenState size]; +} + +- (void) setScale:(double)scalar +{ + viewScale = scalar; +} + +- (double) scale +{ + return viewScale; +} + +- (void) setRotation:(double)angleDegrees +{ + viewRotation = angleDegrees; + [self setBoundsRotation:-angleDegrees]; +} + +- (double) rotation +{ + return viewRotation; +} + +- (void) setDisplayMode:(NSInteger)theMode +{ + // Do nothing. This is a stub function only. +} + +- (NSInteger) displayMode +{ + return displayMode; +} + +- (void) setGpuStateFlags:(UInt32)flags +{ + gpuStateFlags = flags; + + if (flags & GPUSTATE_MAIN_GPU_MASK) + { + SetGPUDisplayState(DS_GPU_TYPE_MAIN, true); + } + else + { + SetGPUDisplayState(DS_GPU_TYPE_MAIN, false); + } + + if (flags & GPUSTATE_MAIN_BG0_MASK) + { + SetGPULayerState(DS_GPU_TYPE_MAIN, 0, true); + } + else + { + SetGPULayerState(DS_GPU_TYPE_MAIN, 0, false); + } + + if (flags & GPUSTATE_MAIN_BG1_MASK) + { + SetGPULayerState(DS_GPU_TYPE_MAIN, 1, true); + } + else + { + SetGPULayerState(DS_GPU_TYPE_MAIN, 1, false); + } + + if (flags & GPUSTATE_MAIN_BG2_MASK) + { + SetGPULayerState(DS_GPU_TYPE_MAIN, 2, true); + } + else + { + SetGPULayerState(DS_GPU_TYPE_MAIN, 2, false); + } + + if (flags & GPUSTATE_MAIN_BG3_MASK) + { + SetGPULayerState(DS_GPU_TYPE_MAIN, 3, true); + } + else + { + SetGPULayerState(DS_GPU_TYPE_MAIN, 3, false); + } + + if (flags & GPUSTATE_MAIN_OBJ_MASK) + { + SetGPULayerState(DS_GPU_TYPE_MAIN, 4, true); + } + else + { + SetGPULayerState(DS_GPU_TYPE_MAIN, 4, false); + } + + if (flags & GPUSTATE_SUB_GPU_MASK) + { + SetGPUDisplayState(DS_GPU_TYPE_SUB, true); + } + else + { + SetGPUDisplayState(DS_GPU_TYPE_SUB, false); + } + + if (flags & GPUSTATE_SUB_BG0_MASK) + { + SetGPULayerState(DS_GPU_TYPE_SUB, 0, true); + } + else + { + SetGPULayerState(DS_GPU_TYPE_SUB, 0, false); + } + + if (flags & GPUSTATE_SUB_BG1_MASK) + { + SetGPULayerState(DS_GPU_TYPE_SUB, 1, true); + } + else + { + SetGPULayerState(DS_GPU_TYPE_SUB, 1, false); + } + + if (flags & GPUSTATE_SUB_BG2_MASK) + { + SetGPULayerState(DS_GPU_TYPE_SUB, 2, true); + } + else + { + SetGPULayerState(DS_GPU_TYPE_SUB, 2, false); + } + + if (flags & GPUSTATE_SUB_BG3_MASK) + { + SetGPULayerState(DS_GPU_TYPE_SUB, 3, true); + } + else + { + SetGPULayerState(DS_GPU_TYPE_SUB, 3, false); + } + + if (flags & GPUSTATE_SUB_OBJ_MASK) + { + SetGPULayerState(DS_GPU_TYPE_SUB, 4, true); + } + else + { + SetGPULayerState(DS_GPU_TYPE_SUB, 4, false); + } +} + +- (UInt32) gpuStateFlags +{ + return gpuStateFlags; +} + +- (void) setCdsController:(CocoaDSController *)theController +{ + cdsController = theController; +} + +- (CocoaDSController*) cdsController +{ + return cdsController; +} + +- (void) setViewToBlack +{ + [self setScreenState:[ScreenState blackScreenState]]; +} + +- (void) setViewToWhite +{ + [self setScreenState:[ScreenState whiteScreenState]]; +} + +- (BOOL) gpuStateByBit:(UInt32)stateBit +{ + BOOL result = NO; + UInt32 flags = [self gpuStateFlags]; + + if (flags & (1 << stateBit)) + { + result = YES; + } + + return result; +} + #ifdef HAVE_OPENGL - (void)viewDidMoveToWindow {//if the view moves to another window we need to update the drawable object @@ -250,41 +462,133 @@ #ifdef HAVE_OPENGL - (void)setBoundsRotation:(CGFloat)angle { - float old_angle = [self boundsRotation]; + int angleInt = (int)angle; + int old_angle = (int)[self boundsRotation]; - [super setBoundsRotation:angle]; + [super setBoundsRotation:angleInt]; [context makeCurrentContext]; NSSize size = [self frame].size; - if(angle == 0) + if(angleInt == 0) { glRasterPos2f(-1, 1); glPixelZoom(((float)size.width) / ((float)DS_SCREEN_WIDTH), -((float)size.height) / ((float)DS_SCREEN_HEIGHT*2)); - } else if(angle == -90) + } else if(angleInt == -90) { glRasterPos2f(-1, 1); glPixelZoom(((float)size.width) / ((float)DS_SCREEN_HEIGHT*2), -((float)size.height) / ((float)DS_SCREEN_WIDTH)); - } else if (angle == -180) + } else if (angleInt == -180) { glRasterPos2f(1, -1); glPixelZoom(-((float)size.width) / ((float)DS_SCREEN_WIDTH), ((float)size.height) / ((float)DS_SCREEN_HEIGHT*2)); - } else if (angle == -270) + } else if (angleInt == -270) { glRasterPos2f(1, -1); glPixelZoom(-((float)size.width) / ((float)DS_SCREEN_HEIGHT*2), ((float)size.height) / ((float)DS_SCREEN_WIDTH)); } //Rotate the screen buffer - if(HORIZONTAL(angle) && VERTICAL(old_angle)) + if(HORIZONTAL(angleInt) && VERTICAL(old_angle)) [screen_buffer rotateTo90]; - if(VERTICAL(angle) && HORIZONTAL(old_angle)) + if(VERTICAL(angleInt) && HORIZONTAL(old_angle)) [screen_buffer rotateTo0]; } #endif +- (NSPoint) convertPointToDS:(NSPoint)touchLoc +{ + const CGFloat doubleDisplayHeight = (CGFloat)(GPU_DISPLAY_HEIGHT * 2); + const NSInteger rotation = (NSInteger)[self boundsRotation]; + const CGFloat frameWidth = [self frame].size.width; + const CGFloat frameHeight = [self frame].size.height; + + if(rotation == 0) + { + // Scale + touchLoc.x *= (CGFloat)GPU_DISPLAY_WIDTH / frameWidth; + touchLoc.y *= doubleDisplayHeight / frameHeight; + } + else if(rotation == -90) + { + // Normalize + touchLoc.x += frameHeight; + + // Scale + touchLoc.x *= doubleDisplayHeight / frameWidth; + touchLoc.y *= (CGFloat)GPU_DISPLAY_WIDTH / frameHeight; + } + else if(rotation == -180) + { + // Normalize + touchLoc.x += frameWidth; + touchLoc.y += frameHeight; + + // Scale + touchLoc.x *= (CGFloat)GPU_DISPLAY_WIDTH / frameWidth; + touchLoc.y *= doubleDisplayHeight / frameHeight; + } + else if(rotation == -270) + { + // Normalize + touchLoc.y += frameWidth; + + // Scale + touchLoc.x *= doubleDisplayHeight / frameWidth; + touchLoc.y *= (CGFloat)GPU_DISPLAY_WIDTH / frameHeight; + } + + // Normalize the y-coordinate to the DS. + touchLoc.y = GPU_DISPLAY_HEIGHT - touchLoc.y; + + // Constrain the touch point to the DS dimensions. + if (touchLoc.x < 0) + { + touchLoc.x = 0; + } + else if (touchLoc.x > (GPU_DISPLAY_WIDTH - 1)) + { + touchLoc.x = (GPU_DISPLAY_WIDTH - 1); + } + + if (touchLoc.y < 0) + { + touchLoc.y = 0; + } + else if (touchLoc.y > (GPU_DISPLAY_HEIGHT - 1)) + { + touchLoc.y = (GPU_DISPLAY_HEIGHT - 1); + } + + return touchLoc; +} + +- (void)mouseDown:(NSEvent*)event +{ + // Convert the clicked location from window coordinates, to view coordinates, + // and finally to DS touchscreen coordinates. + NSPoint touchLoc = [event locationInWindow]; + touchLoc = [self convertPoint:touchLoc fromView:nil]; + touchLoc = [self convertPointToDS:touchLoc]; + + if(touchLoc.x >= 0 && touchLoc.y >= 0) + { + [cdsController touch:touchLoc]; + } +} + +- (void)mouseDragged:(NSEvent*)event +{ + [self mouseDown:event]; +} + +- (void)mouseUp:(NSEvent*)event +{ + [cdsController releaseTouch]; +} + @end #ifdef HAVE_OPENGL @@ -323,3 +627,131 @@ @end #endif +void SetGPULayerState(int displayType, unsigned int i, bool state) +{ + GPU *theGpu = NULL; + + // Check bounds on the layer index. + if(i > 4) + { + return; + } + + switch (displayType) + { + case DS_GPU_TYPE_MAIN: + theGpu = SubScreen.gpu; + break; + + case DS_GPU_TYPE_SUB: + theGpu = MainScreen.gpu; + break; + + case DS_GPU_TYPE_COMBO: + SetGPULayerState(DS_GPU_TYPE_SUB, i, state); // Recursive call + theGpu = MainScreen.gpu; + break; + + default: + break; + } + + if (theGpu != NULL) + { + if (state) + { + GPU_addBack(theGpu, i); + } + else + { + GPU_remove(theGpu, i); + } + } +} + +bool GetGPULayerState(int displayType, unsigned int i) +{ + bool result = false; + + // Check bounds on the layer index. + if(i > 4) + { + return result; + } + + switch (displayType) + { + case DS_GPU_TYPE_MAIN: + if (SubScreen.gpu != nil) + { + result = CommonSettings.dispLayers[SubScreen.gpu->core][i]; + } + break; + + case DS_GPU_TYPE_SUB: + if (MainScreen.gpu != nil) + { + result = CommonSettings.dispLayers[MainScreen.gpu->core][i]; + } + break; + + case DS_GPU_TYPE_COMBO: + if (SubScreen.gpu != nil && MainScreen.gpu != nil) + { + result = (CommonSettings.dispLayers[SubScreen.gpu->core][i] && CommonSettings.dispLayers[MainScreen.gpu->core][i]); + } + break; + + default: + break; + } + + return result; +} + +void SetGPUDisplayState(int displayType, bool state) +{ + switch (displayType) + { + case DS_GPU_TYPE_MAIN: + CommonSettings.showGpu.sub = state; + break; + + case DS_GPU_TYPE_SUB: + CommonSettings.showGpu.main = state; + break; + + case DS_GPU_TYPE_COMBO: + CommonSettings.showGpu.sub = state; + CommonSettings.showGpu.main = state; + break; + + default: + break; + } +} + +bool GetGPUDisplayState(int displayType) +{ + bool result = false; + + switch (displayType) + { + case DS_GPU_TYPE_MAIN: + result = CommonSettings.showGpu.sub; + break; + + case DS_GPU_TYPE_SUB: + result = CommonSettings.showGpu.main; + break; + + case DS_GPU_TYPE_COMBO: + result = (CommonSettings.showGpu.sub && CommonSettings.showGpu.main); + break; + + default: + break; + } + + return result; +}