From 7fa5f7763e8754964d0cafd8a6a400e340998734 Mon Sep 17 00:00:00 2001 From: rogerman Date: Fri, 31 Jan 2014 01:30:52 +0000 Subject: [PATCH] Cocoa Port: - The input handler now supports autohold. - NDS inputs in the input handler now support turbo. --- .../project.pbxproj | 24 + .../project.pbxproj | 12 + .../project.pbxproj | 12 + desmume/src/cocoa/DefaultKeyMappings.plist | 30 + desmume/src/cocoa/DefaultUserPrefs.plist | 568 +++++++++--------- desmume/src/cocoa/cocoa_input.h | 16 +- desmume/src/cocoa/cocoa_input.mm | 102 +++- .../images/Icon_AutoholdClear_420x420.png | Bin 0 -> 45772 bytes .../cocoa/images/Icon_AutoholdSet_420x420.png | Bin 0 -> 45687 bytes .../English.lproj/MainMenu.strings | Bin 310146 -> 311214 bytes .../translations/English.lproj/MainMenu.xib | 410 ++++++++++++- .../userinterface/EmuControllerDelegate.h | 5 + .../userinterface/EmuControllerDelegate.mm | 145 +++-- .../src/cocoa/userinterface/InputManager.h | 2 +- .../src/cocoa/userinterface/InputManager.mm | 168 ++++-- .../src/cocoa/userinterface/inputPrefsView.h | 2 + .../src/cocoa/userinterface/inputPrefsView.mm | 13 + 17 files changed, 1108 insertions(+), 401 deletions(-) create mode 100644 desmume/src/cocoa/images/Icon_AutoholdClear_420x420.png create mode 100644 desmume/src/cocoa/images/Icon_AutoholdSet_420x420.png diff --git a/desmume/src/cocoa/DeSmuME (XCode 3).xcodeproj/project.pbxproj b/desmume/src/cocoa/DeSmuME (XCode 3).xcodeproj/project.pbxproj index 6c2e994fc..ec39aae33 100644 --- a/desmume/src/cocoa/DeSmuME (XCode 3).xcodeproj/project.pbxproj +++ b/desmume/src/cocoa/DeSmuME (XCode 3).xcodeproj/project.pbxproj @@ -868,6 +868,16 @@ AB7DDA6E173DC399004F3D07 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ABB6AD5C173A3F2B00EC2E8D /* Carbon.framework */; }; AB7DDA6F173DC39E004F3D07 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ABB6AD5C173A3F2B00EC2E8D /* Carbon.framework */; }; AB7DDA70173DC3A3004F3D07 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ABB6AD5C173A3F2B00EC2E8D /* Carbon.framework */; }; + AB851D2A189B2C9A007363CC /* Icon_AutoholdClear_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB851D28189B2C9A007363CC /* Icon_AutoholdClear_420x420.png */; }; + AB851D2B189B2C9A007363CC /* Icon_AutoholdSet_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB851D29189B2C9A007363CC /* Icon_AutoholdSet_420x420.png */; }; + AB851D2C189B2C9A007363CC /* Icon_AutoholdClear_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB851D28189B2C9A007363CC /* Icon_AutoholdClear_420x420.png */; }; + AB851D2D189B2C9A007363CC /* Icon_AutoholdSet_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB851D29189B2C9A007363CC /* Icon_AutoholdSet_420x420.png */; }; + AB851D2E189B2C9A007363CC /* Icon_AutoholdClear_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB851D28189B2C9A007363CC /* Icon_AutoholdClear_420x420.png */; }; + AB851D2F189B2C9A007363CC /* Icon_AutoholdSet_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB851D29189B2C9A007363CC /* Icon_AutoholdSet_420x420.png */; }; + AB851D30189B2C9A007363CC /* Icon_AutoholdClear_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB851D28189B2C9A007363CC /* Icon_AutoholdClear_420x420.png */; }; + AB851D31189B2C9A007363CC /* Icon_AutoholdSet_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB851D29189B2C9A007363CC /* Icon_AutoholdSet_420x420.png */; }; + AB851D32189B2C9A007363CC /* Icon_AutoholdClear_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB851D28189B2C9A007363CC /* Icon_AutoholdClear_420x420.png */; }; + AB851D33189B2C9A007363CC /* Icon_AutoholdSet_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB851D29189B2C9A007363CC /* Icon_AutoholdSet_420x420.png */; }; AB8C6CBF186A950C00E3EC64 /* Image_PassME.png in Resources */ = {isa = PBXBuildFile; fileRef = AB8C6CBE186A950C00E3EC64 /* Image_PassME.png */; }; AB8C6CC0186A950C00E3EC64 /* Image_PassME.png in Resources */ = {isa = PBXBuildFile; fileRef = AB8C6CBE186A950C00E3EC64 /* Image_PassME.png */; }; AB8C6CC1186A950C00E3EC64 /* Image_PassME.png in Resources */ = {isa = PBXBuildFile; fileRef = AB8C6CBE186A950C00E3EC64 /* Image_PassME.png */; }; @@ -1368,6 +1378,8 @@ AB80E050142BC4FA00A52038 /* cocoa_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cocoa_util.h; sourceTree = ""; }; AB817A34143EE2DB00A7DFE9 /* videofilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = videofilter.h; sourceTree = ""; }; AB817A35143EE2DB00A7DFE9 /* videofilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = videofilter.cpp; sourceTree = ""; }; + AB851D28189B2C9A007363CC /* Icon_AutoholdClear_420x420.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_AutoholdClear_420x420.png; path = images/Icon_AutoholdClear_420x420.png; sourceTree = ""; }; + AB851D29189B2C9A007363CC /* Icon_AutoholdSet_420x420.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_AutoholdSet_420x420.png; path = images/Icon_AutoholdSet_420x420.png; sourceTree = ""; }; AB8C6CBE186A950C00E3EC64 /* Image_PassME.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Image_PassME.png; path = images/Image_PassME.png; sourceTree = ""; }; AB8C6E56186CD07E00E3EC64 /* ForceFeedback.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ForceFeedback.framework; path = System/Library/Frameworks/ForceFeedback.framework; sourceTree = SDKROOT; }; AB8FFE491872032B00C10085 /* Image_PaddleController.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Image_PaddleController.png; path = images/Image_PaddleController.png; sourceTree = ""; }; @@ -2008,6 +2020,8 @@ AB0F298914BE71E0009ABC6F /* Icon_ArrowLeft_420x420.png */, AB0F298A14BE71E0009ABC6F /* Icon_ArrowRight_420x420.png */, AB0F298B14BE71E0009ABC6F /* Icon_ArrowUp_420x420.png */, + AB851D28189B2C9A007363CC /* Icon_AutoholdClear_420x420.png */, + AB851D29189B2C9A007363CC /* Icon_AutoholdSet_420x420.png */, AB0F296C14BE705D009ABC6F /* Icon_CodeBreaker_128x128.png */, ABB97874144E89CC00793FA3 /* Icon_CodeBreaker_32x32.png */, ABB97875144E89CC00793FA3 /* Icon_DeSmuME_32x32.png */, @@ -2677,6 +2691,8 @@ ABBFDFAB1898EE3200A3FFA5 /* Icon_DisplayToggle_420x420.png in Resources */, ABBFDFB61898EE4B00A3FFA5 /* Icon_FrameAdvance_420x420.png in Resources */, ABBFDFB71898EE4B00A3FFA5 /* Icon_FrameJump_420x420.png in Resources */, + AB851D32189B2C9A007363CC /* Icon_AutoholdClear_420x420.png in Resources */, + AB851D33189B2C9A007363CC /* Icon_AutoholdSet_420x420.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2770,6 +2786,8 @@ ABBFDFA81898EE3200A3FFA5 /* Icon_DisplayToggle_420x420.png in Resources */, ABBFDFB01898EE4B00A3FFA5 /* Icon_FrameAdvance_420x420.png in Resources */, ABBFDFB11898EE4B00A3FFA5 /* Icon_FrameJump_420x420.png in Resources */, + AB851D2C189B2C9A007363CC /* Icon_AutoholdClear_420x420.png in Resources */, + AB851D2D189B2C9A007363CC /* Icon_AutoholdSet_420x420.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2863,6 +2881,8 @@ ABBFDFA71898EE3200A3FFA5 /* Icon_DisplayToggle_420x420.png in Resources */, ABBFDFAE1898EE4B00A3FFA5 /* Icon_FrameAdvance_420x420.png in Resources */, ABBFDFAF1898EE4B00A3FFA5 /* Icon_FrameJump_420x420.png in Resources */, + AB851D2A189B2C9A007363CC /* Icon_AutoholdClear_420x420.png in Resources */, + AB851D2B189B2C9A007363CC /* Icon_AutoholdSet_420x420.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2956,6 +2976,8 @@ ABBFDFAA1898EE3200A3FFA5 /* Icon_DisplayToggle_420x420.png in Resources */, ABBFDFB41898EE4B00A3FFA5 /* Icon_FrameAdvance_420x420.png in Resources */, ABBFDFB51898EE4B00A3FFA5 /* Icon_FrameJump_420x420.png in Resources */, + AB851D30189B2C9A007363CC /* Icon_AutoholdClear_420x420.png in Resources */, + AB851D31189B2C9A007363CC /* Icon_AutoholdSet_420x420.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3049,6 +3071,8 @@ ABBFDFA91898EE3200A3FFA5 /* Icon_DisplayToggle_420x420.png in Resources */, ABBFDFB21898EE4B00A3FFA5 /* Icon_FrameAdvance_420x420.png in Resources */, ABBFDFB31898EE4B00A3FFA5 /* Icon_FrameJump_420x420.png in Resources */, + AB851D2E189B2C9A007363CC /* Icon_AutoholdClear_420x420.png in Resources */, + AB851D2F189B2C9A007363CC /* Icon_AutoholdSet_420x420.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/desmume/src/cocoa/DeSmuME (XCode 4).xcodeproj/project.pbxproj b/desmume/src/cocoa/DeSmuME (XCode 4).xcodeproj/project.pbxproj index f48a1056b..9f7d60bfc 100644 --- a/desmume/src/cocoa/DeSmuME (XCode 4).xcodeproj/project.pbxproj +++ b/desmume/src/cocoa/DeSmuME (XCode 4).xcodeproj/project.pbxproj @@ -398,6 +398,10 @@ AB796D6A15CDCBA200C59155 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB350BA41478AC96007165AC /* IOKit.framework */; }; AB796D6B15CDCBA200C59155 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ABC570D4134431DA00E7B0B1 /* OpenGL.framework */; }; AB796D6C15CDCBA200C59155 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AB0A0D1914AACA9600E83E91 /* libz.dylib */; }; + AB7EC7FA189B2CBA009D198A /* Icon_AutoholdClear_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB7EC7F8189B2CBA009D198A /* Icon_AutoholdClear_420x420.png */; }; + AB7EC7FB189B2CBA009D198A /* Icon_AutoholdClear_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB7EC7F8189B2CBA009D198A /* Icon_AutoholdClear_420x420.png */; }; + AB7EC7FC189B2CBA009D198A /* Icon_AutoholdSet_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB7EC7F9189B2CBA009D198A /* Icon_AutoholdSet_420x420.png */; }; + AB7EC7FD189B2CBA009D198A /* Icon_AutoholdSet_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB7EC7F9189B2CBA009D198A /* Icon_AutoholdSet_420x420.png */; }; AB80E04D142BC4A800A52038 /* cocoa_util.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB80E04C142BC4A800A52038 /* cocoa_util.mm */; }; AB82445B1704AE9A00B8EE20 /* utilities.c in Sources */ = {isa = PBXBuildFile; fileRef = AB82445A1704AE9A00B8EE20 /* utilities.c */; }; AB82445C1704AE9A00B8EE20 /* utilities.c in Sources */ = {isa = PBXBuildFile; fileRef = AB82445A1704AE9A00B8EE20 /* utilities.c */; }; @@ -878,6 +882,8 @@ AB796CA215CDCB6B00C59155 /* instruction_attributes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = instruction_attributes.h; path = ../instruction_attributes.h; sourceTree = ""; }; AB796CA315CDCB6B00C59155 /* instructions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = instructions.h; path = ../instructions.h; sourceTree = ""; }; AB796D7015CDCBA200C59155 /* DeSmuME (Debug).app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "DeSmuME (Debug).app"; sourceTree = BUILT_PRODUCTS_DIR; }; + AB7EC7F8189B2CBA009D198A /* Icon_AutoholdClear_420x420.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_AutoholdClear_420x420.png; path = ../../../../../../../Volumes/rogerman/desmume/trunk/desmume/src/cocoa/images/Icon_AutoholdClear_420x420.png; sourceTree = ""; }; + AB7EC7F9189B2CBA009D198A /* Icon_AutoholdSet_420x420.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_AutoholdSet_420x420.png; path = ../../../../../../../Volumes/rogerman/desmume/trunk/desmume/src/cocoa/images/Icon_AutoholdSet_420x420.png; sourceTree = ""; }; AB80E04C142BC4A800A52038 /* cocoa_util.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = cocoa_util.mm; sourceTree = ""; }; AB80E050142BC4FA00A52038 /* cocoa_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cocoa_util.h; sourceTree = ""; }; AB817A34143EE2DB00A7DFE9 /* videofilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = videofilter.h; sourceTree = ""; }; @@ -1545,6 +1551,8 @@ AB0F298914BE71E0009ABC6F /* Icon_ArrowLeft_420x420.png */, AB0F298A14BE71E0009ABC6F /* Icon_ArrowRight_420x420.png */, AB0F298B14BE71E0009ABC6F /* Icon_ArrowUp_420x420.png */, + AB7EC7F8189B2CBA009D198A /* Icon_AutoholdClear_420x420.png */, + AB7EC7F9189B2CBA009D198A /* Icon_AutoholdSet_420x420.png */, AB0F296C14BE705D009ABC6F /* Icon_CodeBreaker_128x128.png */, ABB97874144E89CC00793FA3 /* Icon_CodeBreaker_32x32.png */, ABB97875144E89CC00793FA3 /* Icon_DeSmuME_32x32.png */, @@ -2064,6 +2072,7 @@ AB0F29A814BE7213009ABC6F /* Icon_DSButtonB_420x420.png in Resources */, AB0F29A914BE7213009ABC6F /* Icon_DSButtonL_420x420.png in Resources */, AB0F29AA14BE7213009ABC6F /* Icon_DSButtonR_420x420.png in Resources */, + AB7EC7FB189B2CBA009D198A /* Icon_AutoholdClear_420x420.png in Resources */, AB9A1F921898F0E7000DF924 /* Icon_DisplayToggle_420x420.png in Resources */, AB0F29AB14BE7213009ABC6F /* Icon_DSButtonSelect_420x420.png in Resources */, AB0F29AC14BE7213009ABC6F /* Icon_DSButtonStart_420x420.png in Resources */, @@ -2080,6 +2089,7 @@ AB0F29B614BE7213009ABC6F /* Icon_ShowHUD_420x420.png in Resources */, AB0F29B714BE7213009ABC6F /* Icon_Speaker_420x420.png in Resources */, AB3ACC3E14C24D5400D7D192 /* AUTHORS in Resources */, + AB7EC7FD189B2CBA009D198A /* Icon_AutoholdSet_420x420.png in Resources */, AB3ACC3F14C24D5400D7D192 /* ChangeLog in Resources */, AB3ACC4014C24D5400D7D192 /* COPYING in Resources */, AB3ACC4114C24D5400D7D192 /* README in Resources */, @@ -2157,6 +2167,7 @@ AB796CD815CDCBA200C59155 /* Icon_DSButtonB_420x420.png in Resources */, AB796CD915CDCBA200C59155 /* Icon_DSButtonL_420x420.png in Resources */, AB796CDA15CDCBA200C59155 /* Icon_DSButtonR_420x420.png in Resources */, + AB7EC7FA189B2CBA009D198A /* Icon_AutoholdClear_420x420.png in Resources */, AB9A1F911898F0E7000DF924 /* Icon_DisplayToggle_420x420.png in Resources */, AB796CDB15CDCBA200C59155 /* Icon_DSButtonSelect_420x420.png in Resources */, AB796CDC15CDCBA200C59155 /* Icon_DSButtonStart_420x420.png in Resources */, @@ -2173,6 +2184,7 @@ AB796CE615CDCBA200C59155 /* Icon_ShowHUD_420x420.png in Resources */, AB796CE715CDCBA200C59155 /* Icon_Speaker_420x420.png in Resources */, AB796CE815CDCBA200C59155 /* AUTHORS in Resources */, + AB7EC7FC189B2CBA009D198A /* Icon_AutoholdSet_420x420.png in Resources */, AB796CE915CDCBA200C59155 /* ChangeLog in Resources */, AB796CEA15CDCBA200C59155 /* COPYING in Resources */, AB796CEB15CDCBA200C59155 /* README in Resources */, diff --git a/desmume/src/cocoa/DeSmuME (Xcode 5).xcodeproj/project.pbxproj b/desmume/src/cocoa/DeSmuME (Xcode 5).xcodeproj/project.pbxproj index 6cd5f8b3e..5fc90e20f 100644 --- a/desmume/src/cocoa/DeSmuME (Xcode 5).xcodeproj/project.pbxproj +++ b/desmume/src/cocoa/DeSmuME (Xcode 5).xcodeproj/project.pbxproj @@ -425,6 +425,10 @@ AB796D6A15CDCBA200C59155 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB350BA41478AC96007165AC /* IOKit.framework */; }; AB796D6B15CDCBA200C59155 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ABC570D4134431DA00E7B0B1 /* OpenGL.framework */; }; AB796D6C15CDCBA200C59155 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AB0A0D1914AACA9600E83E91 /* libz.dylib */; }; + AB7EC7F4189B2B92009D198A /* Icon_AutoholdClear_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB7EC7F2189B2B92009D198A /* Icon_AutoholdClear_420x420.png */; }; + AB7EC7F5189B2B92009D198A /* Icon_AutoholdClear_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB7EC7F2189B2B92009D198A /* Icon_AutoholdClear_420x420.png */; }; + AB7EC7F6189B2B92009D198A /* Icon_AutoholdSet_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB7EC7F3189B2B92009D198A /* Icon_AutoholdSet_420x420.png */; }; + AB7EC7F7189B2B92009D198A /* Icon_AutoholdSet_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB7EC7F3189B2B92009D198A /* Icon_AutoholdSet_420x420.png */; }; AB80E04D142BC4A800A52038 /* cocoa_util.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB80E04C142BC4A800A52038 /* cocoa_util.mm */; }; AB82445B1704AE9A00B8EE20 /* utilities.c in Sources */ = {isa = PBXBuildFile; fileRef = AB82445A1704AE9A00B8EE20 /* utilities.c */; }; AB82445C1704AE9A00B8EE20 /* utilities.c in Sources */ = {isa = PBXBuildFile; fileRef = AB82445A1704AE9A00B8EE20 /* utilities.c */; }; @@ -893,6 +897,8 @@ AB796CA215CDCB6B00C59155 /* instruction_attributes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = instruction_attributes.h; path = ../instruction_attributes.h; sourceTree = ""; }; AB796CA315CDCB6B00C59155 /* instructions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = instructions.h; path = ../instructions.h; sourceTree = ""; }; AB796D7015CDCBA200C59155 /* DeSmuME (Debug).app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "DeSmuME (Debug).app"; sourceTree = BUILT_PRODUCTS_DIR; }; + AB7EC7F2189B2B92009D198A /* Icon_AutoholdClear_420x420.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_AutoholdClear_420x420.png; path = images/Icon_AutoholdClear_420x420.png; sourceTree = ""; }; + AB7EC7F3189B2B92009D198A /* Icon_AutoholdSet_420x420.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_AutoholdSet_420x420.png; path = images/Icon_AutoholdSet_420x420.png; sourceTree = ""; }; AB80E04C142BC4A800A52038 /* cocoa_util.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = cocoa_util.mm; sourceTree = ""; }; AB80E050142BC4FA00A52038 /* cocoa_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cocoa_util.h; sourceTree = ""; }; AB817A34143EE2DB00A7DFE9 /* videofilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = videofilter.h; sourceTree = ""; }; @@ -1545,6 +1551,8 @@ AB0F298914BE71E0009ABC6F /* Icon_ArrowLeft_420x420.png */, AB0F298A14BE71E0009ABC6F /* Icon_ArrowRight_420x420.png */, AB0F298B14BE71E0009ABC6F /* Icon_ArrowUp_420x420.png */, + AB7EC7F2189B2B92009D198A /* Icon_AutoholdClear_420x420.png */, + AB7EC7F3189B2B92009D198A /* Icon_AutoholdSet_420x420.png */, AB0F296C14BE705D009ABC6F /* Icon_CodeBreaker_128x128.png */, ABB97874144E89CC00793FA3 /* Icon_CodeBreaker_32x32.png */, ABB97875144E89CC00793FA3 /* Icon_DeSmuME_32x32.png */, @@ -2064,6 +2072,7 @@ AB0F298C14BE71E0009ABC6F /* Icon_ArrowDown_420x420.png in Resources */, AB0F298D14BE71E0009ABC6F /* Icon_ArrowLeft_420x420.png in Resources */, AB0F298E14BE71E0009ABC6F /* Icon_ArrowRight_420x420.png in Resources */, + AB7EC7F5189B2B92009D198A /* Icon_AutoholdClear_420x420.png in Resources */, ABDDF7C61898F024007583C1 /* Icon_DisplayToggle_420x420.png in Resources */, AB0F298F14BE71E0009ABC6F /* Icon_ArrowUp_420x420.png in Resources */, AB0F29A614BE7213009ABC6F /* Icon_DoubleSpeed_420x420.png in Resources */, @@ -2080,6 +2089,7 @@ AB0F29AE14BE7213009ABC6F /* Icon_DSButtonY_420x420.png in Resources */, AB0F29AF14BE7213009ABC6F /* Icon_Emulation_420x420.png in Resources */, AB0F29B014BE7213009ABC6F /* Icon_Input_420x420.png in Resources */, + AB7EC7F7189B2B92009D198A /* Icon_AutoholdSet_420x420.png in Resources */, AB0F29B114BE7213009ABC6F /* Icon_Microphone_420x420.png in Resources */, AB0F29B214BE7213009ABC6F /* Icon_OpenROM_420x420.png in Resources */, AB0F29B314BE7213009ABC6F /* Icon_Reset_420x420.png in Resources */, @@ -2157,6 +2167,7 @@ AB796CD215CDCBA200C59155 /* Icon_ArrowDown_420x420.png in Resources */, AB796CD315CDCBA200C59155 /* Icon_ArrowLeft_420x420.png in Resources */, AB796CD415CDCBA200C59155 /* Icon_ArrowRight_420x420.png in Resources */, + AB7EC7F4189B2B92009D198A /* Icon_AutoholdClear_420x420.png in Resources */, ABDDF7C51898F024007583C1 /* Icon_DisplayToggle_420x420.png in Resources */, AB796CD515CDCBA200C59155 /* Icon_ArrowUp_420x420.png in Resources */, AB796CD615CDCBA200C59155 /* Icon_DoubleSpeed_420x420.png in Resources */, @@ -2173,6 +2184,7 @@ AB796CDE15CDCBA200C59155 /* Icon_DSButtonY_420x420.png in Resources */, AB796CDF15CDCBA200C59155 /* Icon_Emulation_420x420.png in Resources */, AB796CE015CDCBA200C59155 /* Icon_Input_420x420.png in Resources */, + AB7EC7F6189B2B92009D198A /* Icon_AutoholdSet_420x420.png in Resources */, AB796CE115CDCBA200C59155 /* Icon_Microphone_420x420.png in Resources */, AB796CE215CDCBA200C59155 /* Icon_OpenROM_420x420.png in Resources */, AB796CE315CDCBA200C59155 /* Icon_Reset_420x420.png in Resources */, diff --git a/desmume/src/cocoa/DefaultKeyMappings.plist b/desmume/src/cocoa/DefaultKeyMappings.plist index 5f5056ce2..57d1be6e2 100644 --- a/desmume/src/cocoa/DefaultKeyMappings.plist +++ b/desmume/src/cocoa/DefaultKeyMappings.plist @@ -38,6 +38,8 @@ Piano: B Piano: High C Paddle + Autohold - Set + Autohold - Clear Execute/Pause Frame Advance Frame Jump @@ -77,6 +79,8 @@ 126 elementName Up Arrow + intValue1 + Down @@ -92,6 +96,8 @@ 125 elementName Down Arrow + intValue1 + Left @@ -107,6 +113,8 @@ 123 elementName Left Arrow + intValue1 + Right @@ -122,6 +130,8 @@ 124 elementName Right Arrow + intValue1 + A @@ -137,6 +147,8 @@ 7 elementName X + intValue1 + B @@ -152,6 +164,8 @@ 6 elementName Z + intValue1 + X @@ -167,6 +181,8 @@ 1 elementName S + intValue1 + Y @@ -182,6 +198,8 @@ 0 elementName A + intValue1 + L @@ -197,6 +215,8 @@ 12 elementName Q + intValue1 + R @@ -212,6 +232,8 @@ 13 elementName W + intValue1 + Start @@ -227,6 +249,8 @@ 36 elementName Return + intValue1 + Select @@ -242,6 +266,8 @@ 48 elementName Tab + intValue1 + Touch @@ -595,6 +621,10 @@ 5 + Autohold - Set + + Autohold - Clear + HUD diff --git a/desmume/src/cocoa/DefaultUserPrefs.plist b/desmume/src/cocoa/DefaultUserPrefs.plist index ded56e410..8c72a93f1 100644 --- a/desmume/src/cocoa/DefaultUserPrefs.plist +++ b/desmume/src/cocoa/DefaultUserPrefs.plist @@ -100,6 +100,58 @@ 1 Input_ControllerMappings + Up + + + deviceCode + NSEventKeyboard + deviceName + Keyboard + elementCode + 126 + elementName + Up Arrow + + + Down + + + deviceCode + NSEventKeyboard + deviceName + Keyboard + elementCode + 125 + elementName + Down Arrow + + + Left + + + deviceCode + NSEventKeyboard + deviceName + Keyboard + elementCode + 123 + elementName + Left Arrow + + + Right + + + deviceCode + NSEventKeyboard + deviceName + Keyboard + elementCode + 124 + elementName + Right Arrow + + A @@ -126,61 +178,129 @@ Z - Copy Screen - + X + + + deviceCode + NSEventKeyboard + deviceName + Keyboard + elementCode + 1 + elementName + S + + + Y + + + deviceCode + NSEventKeyboard + deviceName + Keyboard + elementCode + 0 + elementName + A + + + L + + + deviceCode + NSEventKeyboard + deviceName + Keyboard + elementCode + 12 + elementName + Q + + + R + + + deviceCode + NSEventKeyboard + deviceName + Keyboard + elementCode + 13 + elementName + W + + + Start + + + deviceCode + NSEventKeyboard + deviceName + Keyboard + elementCode + 36 + elementName + Return + + + Select + + + deviceCode + NSEventKeyboard + deviceName + Keyboard + elementCode + 48 + elementName + Tab + + + Touch + + + deviceCode + NSEventMouse + deviceName + Mouse + elementCode + 0 + elementName + Primary Button + useInputForIntCoord + + + + Microphone + + + deviceCode + NSEventKeyboard + deviceName + Keyboard + elementCode + 50 + elementName + ` (Accent) + intValue1 + 1 + + + Lid + + + deviceCode + NSEventKeyboard + deviceName + Keyboard + elementCode + 51 + elementName + Delete (Backspace) + + Debug - Down - - - deviceCode - NSEventKeyboard - deviceName - Keyboard - elementCode - 125 - elementName - Down Arrow - - - Enable/Disable Auto Frame Skip - - Enable/Disable Cheats - - Enable/Disable GPU State - - Enable/Disable Speed Limiter - - Execute/Pause - - - deviceCode - NSEventKeyboard - deviceName - Keyboard - elementCode - 117 - elementName - Forward Delete - - - Frame Advance - - Frame Jump - - Guitar Grip: Blue - - - deviceCode - NSEventKeyboard - deviceName - Keyboard - elementCode - 16 - elementName - Y - - Guitar Grip: Green @@ -220,7 +340,7 @@ T - HUD + Guitar Grip: Blue deviceCode @@ -228,137 +348,9 @@ deviceName Keyboard elementCode - 4 + 16 elementName - H - - - L - - - deviceCode - NSEventKeyboard - deviceName - Keyboard - elementCode - 12 - elementName - Q - - - Left - - - deviceCode - NSEventKeyboard - deviceName - Keyboard - elementCode - 123 - elementName - Left Arrow - - - Lid - - - deviceCode - NSEventKeyboard - deviceName - Keyboard - elementCode - 51 - elementName - Delete (Backspace) - - - Load State Slot - - Microphone - - - deviceCode - NSEventKeyboard - deviceName - Keyboard - elementCode - 50 - elementName - ` (Accent) - intValue1 - 1 - - - Mute/Unmute - - Paddle - - - deviceCode - NSEventKeyboard - deviceName - Keyboard - elementCode - 31 - elementName - O - intValue1 - -5 - isInputAnalog - - - - deviceCode - NSEventKeyboard - deviceName - Keyboard - elementCode - 35 - elementName - P - intValue1 - 5 - isInputAnalog - - - - Piano: A - - - deviceCode - NSEventKeyboard - deviceName - Keyboard - elementCode - 43 - elementName - , (Comma) - - - Piano: A# - - - deviceCode - NSEventKeyboard - deviceName - Keyboard - elementCode - 37 - elementName - L - - - Piano: B - - - deviceCode - NSEventKeyboard - deviceName - Keyboard - elementCode - 47 - elementName - . (Period) + Y Piano: C @@ -478,6 +470,45 @@ K + Piano: A + + + deviceCode + NSEventKeyboard + deviceName + Keyboard + elementCode + 43 + elementName + , (Comma) + + + Piano: A# + + + deviceCode + NSEventKeyboard + deviceName + Keyboard + elementCode + 37 + elementName + L + + + Piano: B + + + deviceCode + NSEventKeyboard + deviceName + Keyboard + elementCode + 47 + elementName + . (Period) + + Piano: High C @@ -491,7 +522,7 @@ / - R + Paddle deviceCode @@ -499,11 +530,63 @@ deviceName Keyboard elementCode - 13 + 31 elementName - W + O + intValue1 + -5 + isInputAnalog + + + + deviceCode + NSEventKeyboard + deviceName + Keyboard + elementCode + 35 + elementName + P + intValue1 + 5 + isInputAnalog + + Autohold - Set + + Autohold - Clear + + HUD + + + deviceCode + NSEventKeyboard + deviceName + Keyboard + elementCode + 4 + elementName + H + + + Execute/Pause + + + deviceCode + NSEventKeyboard + deviceName + Keyboard + elementCode + 117 + elementName + Forward Delete + + + Frame Advance + + Frame Jump + Reset @@ -517,19 +600,14 @@ Page Down - Right - - - deviceCode - NSEventKeyboard - deviceName - Keyboard - elementCode - 124 - elementName - Right Arrow - - + Mute/Unmute + + Load State Slot + + Save State Slot + + Copy Screen + Rotate Display Left @@ -560,21 +638,8 @@ 90 - Save State Slot + Toggle All Displays - Select - - - deviceCode - NSEventKeyboard - deviceName - Keyboard - elementCode - 48 - elementName - Tab - - Set Speed @@ -602,75 +667,14 @@ 2 - Start - - - deviceCode - NSEventKeyboard - deviceName - Keyboard - elementCode - 36 - elementName - Return - - - Toggle All Displays + Enable/Disable Speed Limiter + + Enable/Disable Auto Frame Skip + + Enable/Disable Cheats + + Enable/Disable GPU State - Touch - - - deviceCode - NSEventMouse - deviceName - Mouse - elementCode - 0 - elementName - Primary Button - useInputForIntCoord - - - - Up - - - deviceCode - NSEventKeyboard - deviceName - Keyboard - elementCode - 126 - elementName - Up Arrow - - - X - - - deviceCode - NSEventKeyboard - deviceName - Keyboard - elementCode - 1 - elementName - S - - - Y - - - deviceCode - NSEventKeyboard - deviceName - Keyboard - elementCode - 0 - elementName - A - - Input_SavedDeviceProperties diff --git a/desmume/src/cocoa/cocoa_input.h b/desmume/src/cocoa/cocoa_input.h index 8e5f8906d..2648dd0dc 100644 --- a/desmume/src/cocoa/cocoa_input.h +++ b/desmume/src/cocoa/cocoa_input.h @@ -63,25 +63,39 @@ enum DSControllerState_StatesCount }; +typedef struct +{ + bool state; + bool turbo; + bool autohold; + uint16_t turboPattern; +} NDSInput; + @interface CocoaDSController : NSObject { + BOOL autohold; + BOOL isAutoholdCleared; NSInteger micMode; NSPoint touchLocation; - bool controllerState[DSControllerState_StatesCount]; + + NDSInput ndsInput[DSControllerState_StatesCount]; AudioSampleBlockGenerator *selectedAudioFileGenerator; NSInteger paddleAdjust; OSSpinLock spinlockControllerState; } +@property (assign) BOOL autohold; @property (assign) NSInteger micMode; @property (assign) AudioSampleBlockGenerator *selectedAudioFileGenerator; @property (assign) NSInteger paddleAdjust; - (void) setControllerState:(BOOL)theState controlID:(const NSUInteger)controlID; +- (void) setControllerState:(BOOL)theState controlID:(const NSUInteger)controlID turbo:(const BOOL)isTurboEnabled; - (void) setTouchState:(BOOL)theState location:(const NSPoint)theLocation; - (void) setMicrophoneState:(BOOL)theState inputMode:(const NSInteger)inputMode; - (void) setSineWaveGeneratorFrequency:(const double)freq; +- (void) clearAutohold; - (void) flush; - (void) flushEmpty; diff --git a/desmume/src/cocoa/cocoa_input.mm b/desmume/src/cocoa/cocoa_input.mm index 5022bc85a..0e197b8d6 100644 --- a/desmume/src/cocoa/cocoa_input.mm +++ b/desmume/src/cocoa/cocoa_input.mm @@ -26,6 +26,7 @@ @implementation CocoaDSController +@dynamic autohold; @synthesize micMode; @synthesize selectedAudioFileGenerator; @synthesize paddleAdjust; @@ -40,10 +41,16 @@ for (size_t i = 0; i < DSControllerState_StatesCount; i++) { - controllerState[i] = false; + ndsInput[i].state = false; + ndsInput[i].turbo = false; + ndsInput[i].turboPattern = false; + ndsInput[i].autohold = false; } spinlockControllerState = OS_SPINLOCK_INIT; + autohold = NO; + isAutoholdCleared = YES; + micMode = MICMODE_NONE; selectedAudioFileGenerator = NULL; touchLocation = NSMakePoint(0.0f, 0.0f); @@ -57,7 +64,43 @@ [super dealloc]; } -- (void) setControllerState:(BOOL)theState controlID:(const NSUInteger)controlID +- (void) setAutohold:(BOOL)theState +{ + OSSpinLockLock(&spinlockControllerState); + + autohold = theState; + + if (autohold && isAutoholdCleared) + { + memset(ndsInput, 0, sizeof(ndsInput)); + isAutoholdCleared = NO; + } + + if (!autohold) + { + for (size_t i = 0; i < DSControllerState_StatesCount; i++) + { + ndsInput[i].state = ndsInput[i].autohold; + } + } + + OSSpinLockUnlock(&spinlockControllerState); +} + +- (BOOL) autohold +{ + OSSpinLockLock(&spinlockControllerState); + const BOOL theState = autohold; + OSSpinLockUnlock(&spinlockControllerState); + return theState; +} + +- (void) setControllerState:(BOOL)theState controlID:(const NSUInteger)controlID +{ + [self setControllerState:theState controlID:controlID turbo:NO]; +} + +- (void) setControllerState:(BOOL)theState controlID:(const NSUInteger)controlID turbo:(const BOOL)isTurboEnabled { if (controlID >= DSControllerState_StatesCount) { @@ -65,14 +108,30 @@ } OSSpinLockLock(&spinlockControllerState); - controllerState[controlID] = (theState) ? true : false; + + if (autohold) + { + if (theState) + { + ndsInput[controlID].turbo = (isTurboEnabled) ? true : false; + ndsInput[controlID].turboPattern = (ndsInput[controlID].turbo) ? 0x5555 : 0; + ndsInput[controlID].autohold = true; + } + } + else + { + ndsInput[controlID].state = (theState || ndsInput[controlID].autohold); + ndsInput[controlID].turbo = (isTurboEnabled && ndsInput[controlID].state); + ndsInput[controlID].turboPattern = (ndsInput[controlID].turbo) ? 0x5555 : 0; + } + OSSpinLockUnlock(&spinlockControllerState); } - (void) setTouchState:(BOOL)theState location:(const NSPoint)theLocation { OSSpinLockLock(&spinlockControllerState); - controllerState[DSControllerState_Touch] = (theState) ? true : false; + ndsInput[DSControllerState_Touch].state = (theState) ? true : false; touchLocation = theLocation; OSSpinLockUnlock(&spinlockControllerState); } @@ -80,7 +139,7 @@ - (void) setMicrophoneState:(BOOL)theState inputMode:(const NSInteger)inputMode { OSSpinLockLock(&spinlockControllerState); - controllerState[DSControllerState_Microphone] = (theState) ? true : false; + ndsInput[DSControllerState_Microphone].state = (theState) ? true : false; micMode = inputMode; OSSpinLockUnlock(&spinlockControllerState); } @@ -90,6 +149,20 @@ sineWaveGenerator.setFrequency(freq); } +- (void) clearAutohold +{ + [self setAutohold:NO]; + OSSpinLockLock(&spinlockControllerState); + + if (!isAutoholdCleared) + { + memset(ndsInput, 0, sizeof(ndsInput)); + isAutoholdCleared = YES; + } + + OSSpinLockUnlock(&spinlockControllerState); +} + - (void) flush { OSSpinLockLock(&spinlockControllerState); @@ -98,9 +171,24 @@ const NSInteger theMicMode = micMode; static bool flushedStates[DSControllerState_StatesCount] = {0}; - for (size_t i = 0; i < DSControllerState_StatesCount; i++) + if (!autohold) { - flushedStates[i] = controllerState[i]; + for (size_t i = 0; i < DSControllerState_StatesCount; i++) + { + flushedStates[i] = (ndsInput[i].state || ndsInput[i].autohold); + + if (ndsInput[i].turbo) + { + const bool turboState = ndsInput[i].turboPattern & 0x0001; + flushedStates[i] = (flushedStates[i] && turboState); + ndsInput[i].turboPattern >>= 1; + ndsInput[i].turboPattern |= (turboState) ? 0x8000 : 0x0000; + } + else + { + flushedStates[i] = ndsInput[i].state; + } + } } OSSpinLockUnlock(&spinlockControllerState); diff --git a/desmume/src/cocoa/images/Icon_AutoholdClear_420x420.png b/desmume/src/cocoa/images/Icon_AutoholdClear_420x420.png new file mode 100644 index 0000000000000000000000000000000000000000..1ac88a1d42f2e785b7540a1f81bd462f90be7ecc GIT binary patch literal 45772 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%0DCe$i|>t&CMF0g%HDfF1R8HgUIfdE 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 O)JIiG3s$XQ75YDf4Y7X! literal 0 HcmV?d00001 diff --git a/desmume/src/cocoa/images/Icon_AutoholdSet_420x420.png b/desmume/src/cocoa/images/Icon_AutoholdSet_420x420.png new file mode 100644 index 0000000000000000000000000000000000000000..548bbce0618b21131e592b638efb3bc138f73034 GIT binary patch literal 45687 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

$ZL)* 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 YES + - YES @@ -8478,6 +8478,116 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {1.7976931348623157e+308, 1.7976931348623157e+308} YES + + 1 + 2 + {{157, 353}, {300, 108}} + 1685586944 + InputSettingsNDSInput + NSWindow + + + + + 256 + + YES + + + 268 + {{17, 71}, {266, 17}} + + YES + + 70254657 + 272634880 + + + Device Info Summary + + + + + NO + 1 + + + + 268 + {{18, 47}, {63, 18}} + + _NS:682 + YES + + -2080374784 + 0 + Turbo + + _NS:682 + + 1211912448 + 2 + + + + + 200 + 25 + + NO + + + + 268 + {{190, 12}, {96, 32}} + + 1 + YES + + 67108864 + 134217728 + OK + + + -2038284288 + 129 + + DQ + 200 + 25 + + NO + + + + 268 + {{94, 12}, {96, 32}} + + YES + + 67108864 + 134217728 + Cancel + + + -2038284288 + 129 + + Gw + 200 + 25 + + NO + + + {300, 108} + + _NS:122 + + {{0, 0}, {1440, 878}} + {1.7976931348623157e+308, 1.7976931348623157e+308} + NO + 1 2 @@ -8489,7 +8599,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {1.7976931348623157e+308, 1.7976931348623157e+308} - + 256 YES @@ -8508,6 +8618,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{18, 14}, {190, 126}} + YES NO 4 @@ -8781,6 +8892,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{130, 18}, {224, 21}} + YES 612368448 @@ -8801,6 +8913,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{476, 11}, {96, 32}} + YES 67108864 @@ -8822,6 +8935,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{128, 47}, {348, 26}} + YES -2080112384 @@ -8844,6 +8958,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{479, 56}, {90, 17}} + YES 68157504 @@ -8922,6 +9037,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{356, 11}, {124, 32}} + YES 67108864 @@ -8941,10 +9057,12 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {{1, 1}, {584, 150}} + {{17, 56}, {586, 166}} + {0, 0} 67108864 @@ -8968,6 +9086,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{510, 12}, {96, 32}} + 1 YES @@ -8990,6 +9109,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{414, 12}, {96, 32}} + YES 67108864 @@ -9011,6 +9131,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{17, 230}, {586, 17}} + YES 70254657 @@ -9027,6 +9148,8 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {620, 267} + + {{0, 0}, {1920, 1178}} {1.7976931348623157e+308, 1.7976931348623157e+308} @@ -14882,7 +15005,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {1.7976931348623157e+308, 1.7976931348623157e+308} - + 256 YES @@ -14891,6 +15014,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{14, 12}, {168, 32}} + YES 67108864 @@ -14912,6 +15036,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{181, 22}, {105, 17}} + YES 68157504 @@ -14930,6 +15055,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 12 {{12, 51}, {616, 5}} + {0, 0} 67108864 @@ -14952,6 +15078,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{288, 22}, {330, 17}} + YES 70254657 @@ -14981,6 +15108,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{18, 14}, {260, 128}} + YES NO 5 @@ -15266,6 +15394,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{85, 15}, {409, 21}} + YES 78643265 @@ -15286,6 +15415,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{496, 8}, {96, 32}} + YES 67108864 @@ -15307,6 +15437,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{15, 150}, {482, 28}} + YES 67108864 @@ -15328,6 +15459,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{496, 146}, {96, 32}} + YES 67108864 @@ -15347,10 +15479,12 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {{1, 1}, {604, 188}} + {{17, 140}, {606, 204}} + {0, 0} 67108864 @@ -15396,6 +15530,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {{18, 16}, {30, 30}} + YES 134217728 @@ -15414,6 +15549,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 265 {{50, 18}, {168, 28}} + YES 69206017 @@ -15432,6 +15568,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 1292 {{18, 14}, {32, 32}} + 28682 100 @@ -15440,6 +15577,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{220, 17}, {201, 26}} + YES -2076180416 @@ -15547,10 +15685,12 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {{1, 1}, {604, 56}} + {{17, 64}, {606, 72}} + {0, 0} 67108864 @@ -15571,6 +15711,8 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {640, 355} + + {{0, 0}, {1920, 1178}} {1.7976931348623157e+308, 1.7976931348623157e+308} @@ -15588,7 +15730,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {1.7976931348623157e+308, 1.7976931348623157e+308} - + 256 YES @@ -15607,6 +15749,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 256 {188, 304} + _NS:1843 YES NO @@ -15616,6 +15759,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 256 {188, 17} + @@ -15673,6 +15817,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {{1, 17}, {188, 304}} + _NS:1841 @@ -15684,6 +15829,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 -2147483392 {{224, 17}, {15, 102}} + _NS:1860 NO @@ -15695,6 +15841,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 -2147483392 {{1, 306}, {188.95703125, 15}} + _NS:1862 NO 1 @@ -15711,6 +15858,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {{1, 0}, {188, 17}} + @@ -15719,6 +15867,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {{20, 106}, {190, 322}} + _NS:1839 133682 @@ -15746,17 +15895,20 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{3, 4}, {400, 320}} + _NS:1109 NSView {{1, 1}, {406, 326}} + _NS:21 {{215, 102}, {408, 328}} + _NS:18 {0, 0} @@ -15781,6 +15933,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{530, 12}, {96, 32}} + _NS:610 YES @@ -15814,6 +15967,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{15, 14}, {482, 42}} + _NS:3939 YES @@ -15833,11 +15987,13 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {{1, 1}, {512, 66}} + _NS:21 {{17, 16}, {514, 82}} + _NS:18 {0, 0} @@ -15859,6 +16015,8 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {640, 448} + + _NS:122 {{0, 0}, {1920, 1178}} @@ -18529,6 +18687,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{0, 230}, {32, 32}} + _NS:2530 YES @@ -18556,6 +18715,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{32, 230}, {32, 32}} + _NS:2530 YES @@ -18583,6 +18743,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{64, 230}, {32, 32}} + _NS:2530 YES @@ -18610,6 +18771,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{222, 230}, {32, 32}} + _NS:2530 YES @@ -18637,6 +18799,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{96, 230}, {32, 32}} + _NS:2530 YES @@ -18677,6 +18840,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {{176, 53}, {64, 19}} + _NS:817 YES @@ -18756,6 +18920,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {{176, 33}, {64, 19}} + _NS:817 YES @@ -18825,6 +18990,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{18, 14}, {150, 58}} + _NS:736 YES NO @@ -19117,11 +19283,13 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {{1, 1}, {258, 82}} + _NS:21 {{-3, 124}, {260, 98}} + _NS:18 {0, 0} @@ -19156,6 +19324,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{18, 30}, {222, 16}} + YES -2080112384 @@ -19178,6 +19347,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{219, 45}, {28, 11}} + YES @@ -19197,6 +19367,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{52, 45}, {28, 11}} + YES @@ -19216,6 +19387,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{94, 45}, {28, 11}} + YES @@ -19235,6 +19407,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{136, 45}, {28, 11}} + YES @@ -19254,6 +19427,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{178, 45}, {28, 11}} + YES @@ -19273,6 +19447,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{151, 62}, {89, 17}} + 100 YES @@ -19295,6 +19470,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{15, 14}, {133, 14}} + YES @@ -19314,6 +19490,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{150, 14}, {93, 14}} + YES 68157504 @@ -19332,6 +19509,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{15, 62}, {98, 18}} + YES @@ -19356,6 +19534,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{9, 45}, {28, 11}} + YES @@ -19373,11 +19552,13 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {{1, 1}, {258, 88}} + _NS:21 {{-3, 16}, {260, 104}} + _NS:18 {0, 0} @@ -19402,6 +19583,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{4, 4}, {42, 14}} + _NS:4068 YES @@ -19422,6 +19604,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{48, 4}, {189, 14}} + _NS:4068 YES @@ -19441,6 +19624,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {254, 262} + _NS:103 {{0, 0}, {1440, 878}} @@ -37797,6 +37981,62 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 9103 + + + value: selection.deviceInfoSummary + + + + + + value: selection.deviceInfoSummary + value + selection.deviceInfoSummary + 2 + + + 9108 + + + + inputSettingsNDSInput + + + + 9111 + + + + closeSettingsSheet: + + + + 9116 + + + + closeSettingsSheet: + + + + 9117 + + + + value: selection.intValue1 + + + + + + value: selection.intValue1 + value + selection.intValue1 + 2 + + + 9119 + @@ -45944,9 +46184,9 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 YES - + @@ -50967,6 +51207,83 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 + + 9104 + + + YES + + + + + + 9105 + + + YES + + + + + + + + + 9106 + + + YES + + + + + + 9107 + + + + + 9109 + + + YES + + + + + + 9110 + + + + + 9112 + + + YES + + + + + + 9113 + + + YES + + + + + + 9114 + + + + + 9115 + + + @@ -52338,6 +52655,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 7295.IBNumberFormatterLocalizesFormatMetadataKey 7295.IBPluginDependency 7301.IBPluginDependency + 7301.IBViewBoundsToFrameTransform 7302.IBPluginDependency 7305.IBPluginDependency 7305.IBViewBoundsToFrameTransform @@ -52355,6 +52673,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 7358.IBViewBoundsToFrameTransform 7359.IBPluginDependency 7392.IBPluginDependency + 7392.IBViewBoundsToFrameTransform 7393.IBPluginDependency 7395.IBPluginDependency 7395.IBViewBoundsToFrameTransform @@ -52373,6 +52692,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 7439.IBPluginDependency 7440.IBPluginDependency 7442.IBPluginDependency + 7442.IBViewBoundsToFrameTransform 7443.IBPluginDependency 7445.IBPluginDependency 7445.IBViewBoundsToFrameTransform @@ -53151,7 +53471,24 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 9095.IBNumberFormatterLocalizesFormatMetadataKey 9095.IBPluginDependency 910.IBPluginDependency + 9104.IBEditorWindowLastContentRect + 9104.IBPluginDependency + 9104.IBWindowTemplateEditedContentRect + 9104.NSWindowTemplate.visibleAtLaunch + 9105.IBPluginDependency + 9106.IBPluginDependency + 9106.IBViewBoundsToFrameTransform + 9107.IBPluginDependency + 9109.IBPluginDependency + 9109.IBViewBoundsToFrameTransform 911.IBPluginDependency + 9110.IBPluginDependency + 9112.IBPluginDependency + 9112.IBViewBoundsToFrameTransform + 9113.IBPluginDependency + 9113.IBViewBoundsToFrameTransform + 9114.IBPluginDependency + 9115.IBPluginDependency 912.IBPluginDependency 913.IBPluginDependency 914.IBPluginDependency @@ -53748,7 +54085,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{295, 836}, {512, 20}} + {{331, 836}, {512, 20}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -53757,7 +54094,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{569, 543}, {315, 293}} + {{605, 543}, {315, 293}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -54921,7 +55258,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{483, 463}, {257, 373}} + {{519, 463}, {257, 373}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -54936,7 +55273,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{619, 783}, {196, 53}} + {{655, 783}, {196, 53}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -55281,9 +55618,9 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {{84, 906}, {350, 125}} com.apple.InterfaceBuilder.CocoaPlugin - {{42, 810}, {620, 267}} + {{310, 589}, {620, 267}} com.apple.InterfaceBuilder.CocoaPlugin - {{42, 810}, {620, 267}} + {{310, 589}, {620, 267}} com.apple.InterfaceBuilder.CocoaPlugin {{789, 354}, {516, 283}} @@ -55404,6 +55741,9 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABD/wAAwigAAA + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -55425,6 +55765,9 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABDzwAAwigAAA + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -55445,6 +55788,9 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABBiAAAw3UAAA + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -55704,9 +56050,9 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{626, 692}, {640, 355}} + {{511, 501}, {640, 355}} com.apple.InterfaceBuilder.CocoaPlugin - {{626, 692}, {640, 355}} + {{511, 501}, {640, 355}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -55988,9 +56334,9 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{658, 408}, {640, 448}} + {{509, 91}, {640, 448}} com.apple.InterfaceBuilder.CocoaPlugin - {{658, 408}, {640, 448}} + {{509, 91}, {640, 448}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -56579,6 +56925,31 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + {{820, 748}, {300, 108}} + com.apple.InterfaceBuilder.CocoaPlugin + {{820, 748}, {300, 108}} + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABBiAAAw3gAAA + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABBkAAAwggAAA + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABDDwAAwr4AAA + + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABCPAAAwr4AAA + + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -56654,7 +57025,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 - 9103 + 9119 @@ -58116,6 +58487,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 inputSettingsGPUState inputSettingsLoadStateSlot inputSettingsMicrophone + inputSettingsNDSInput inputSettingsPaddleController inputSettingsSaveStateSlot inputSettingsSetSpeedLimit @@ -58141,6 +58513,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 NSWindow NSWindow NSWindow + NSWindow @@ -58159,6 +58532,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 inputSettingsGPUState inputSettingsLoadStateSlot inputSettingsMicrophone + inputSettingsNDSInput inputSettingsPaddleController inputSettingsSaveStateSlot inputSettingsSetSpeedLimit @@ -58215,6 +58589,10 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 inputSettingsMicrophone NSWindow + + inputSettingsNDSInput + NSWindow + inputSettingsPaddleController NSWindow diff --git a/desmume/src/cocoa/userinterface/EmuControllerDelegate.h b/desmume/src/cocoa/userinterface/EmuControllerDelegate.h index 07a8a36b5..b56473742 100644 --- a/desmume/src/cocoa/userinterface/EmuControllerDelegate.h +++ b/desmume/src/cocoa/userinterface/EmuControllerDelegate.h @@ -184,6 +184,7 @@ class AudioSampleBlockGenerator; - (IBAction) toggleAllDisplays:(id)sender; // Tools Menu +- (IBAction) autoholdSet:(id)sender; - (IBAction) toggleGPUState:(id)sender; - (IBAction) changeCoreSpeed:(id)sender; @@ -208,6 +209,10 @@ class AudioSampleBlockGenerator; - (IBAction) closeSheet:(id)sender; - (void) cmdUpdateDSController:(NSValue *)cmdAttrValue; +- (void) cmdUpdateDSControllerWithTurbo:(NSValue *)cmdAttrValue; +- (void) cmdUpdateDSTouch:(NSValue *)cmdAttrValue; +- (void) cmdUpdateDSMicrophone:(NSValue *)cmdAttrValue; +- (void) cmdUpdateDSPaddle:(NSValue *)cmdAttrValue; - (void) cmdLoadEmuSaveStateSlot:(NSValue *)cmdAttrValue; - (void) cmdSaveEmuSaveStateSlot:(NSValue *)cmdAttrValue; diff --git a/desmume/src/cocoa/userinterface/EmuControllerDelegate.mm b/desmume/src/cocoa/userinterface/EmuControllerDelegate.mm index 9a373f466..23dc8564e 100644 --- a/desmume/src/cocoa/userinterface/EmuControllerDelegate.mm +++ b/desmume/src/cocoa/userinterface/EmuControllerDelegate.mm @@ -881,6 +881,16 @@ [inputManager dispatchCommandUsingIBAction:_cmd sender:sender]; } +- (IBAction) autoholdSet:(id)sender +{ + [inputManager dispatchCommandUsingIBAction:_cmd sender:sender]; +} + +- (IBAction) autoholdClear:(id)sender +{ + [inputManager dispatchCommandUsingIBAction:_cmd sender:sender]; +} + - (IBAction) chooseSlot1R4Directory:(id)sender { NSOpenPanel *panel = [NSOpenPanel openPanel]; @@ -993,66 +1003,117 @@ { CommandAttributes cmdAttr; [cmdAttrValue getValue:&cmdAttr]; + const BOOL theState = (cmdAttr.input.state == INPUT_ATTRIBUTE_STATE_ON) ? YES : NO; + const NSUInteger controlID = cmdAttr.intValue[0]; CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + [[cdsCore cdsController] setControllerState:theState controlID:controlID]; +} + +- (void) cmdUpdateDSControllerWithTurbo:(NSValue *)cmdAttrValue +{ + CommandAttributes cmdAttr; + [cmdAttrValue getValue:&cmdAttr]; + const BOOL theState = (cmdAttr.input.state == INPUT_ATTRIBUTE_STATE_ON) ? YES : NO; const NSUInteger controlID = cmdAttr.intValue[0]; + const BOOL isTurboEnabled = (BOOL)cmdAttr.intValue[1]; + + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + [[cdsCore cdsController] setControllerState:theState controlID:controlID turbo:isTurboEnabled]; +} + +- (void) cmdUpdateDSTouch:(NSValue *)cmdAttrValue +{ + CommandAttributes cmdAttr; + [cmdAttrValue getValue:&cmdAttr]; const BOOL theState = (cmdAttr.input.state == INPUT_ATTRIBUTE_STATE_ON) ? YES : NO; - if (controlID == DSControllerState_Touch) + const NSPoint touchLoc = (cmdAttr.useInputForIntCoord) ? NSMakePoint(cmdAttr.input.intCoordX, cmdAttr.input.intCoordY) : NSMakePoint(cmdAttr.intValue[1], cmdAttr.intValue[2]); + if (touchLoc.x >= 0.0 && touchLoc.y >= 0.0) { - const NSPoint touchLoc = (cmdAttr.useInputForIntCoord) ? NSMakePoint(cmdAttr.input.intCoordX, cmdAttr.input.intCoordY) : NSMakePoint(cmdAttr.intValue[1], cmdAttr.intValue[2]); - if (touchLoc.x >= 0.0 && touchLoc.y >= 0.0) - { - [[cdsCore cdsController] setTouchState:theState location:touchLoc]; - } + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + [[cdsCore cdsController] setTouchState:theState location:touchLoc]; } - else if (controlID == DSControllerState_Microphone) +} + +- (void) cmdUpdateDSMicrophone:(NSValue *)cmdAttrValue +{ + CommandAttributes cmdAttr; + [cmdAttrValue getValue:&cmdAttr]; + const BOOL theState = (cmdAttr.input.state == INPUT_ATTRIBUTE_STATE_ON) ? YES : NO; + + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + + const NSInteger micMode = cmdAttr.intValue[1]; + [[cdsCore cdsController] setMicrophoneState:theState inputMode:micMode]; + + const float sineWaveFrequency = cmdAttr.floatValue[0]; + [[cdsCore cdsController] setSineWaveGeneratorFrequency:sineWaveFrequency]; + + NSString *audioFilePath = cmdAttr.object[0]; + [[cdsCore cdsController] setSelectedAudioFileGenerator:[inputManager audioFileGeneratorFromFilePath:audioFilePath]]; +} + +- (void) cmdUpdateDSPaddle:(NSValue *)cmdAttrValue +{ + CommandAttributes cmdAttr; + [cmdAttrValue getValue:&cmdAttr]; + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + + if (cmdAttr.input.isAnalog) { - const NSInteger micMode = cmdAttr.intValue[1]; - [[cdsCore cdsController] setMicrophoneState:theState inputMode:micMode]; + const NSInteger paddleSensitivity = cmdAttr.floatValue[0]; + const float paddleScalar = cmdAttr.input.scalar; + float paddleAdjust = (paddleScalar * 2.0f) - 1.0f; - const float sineWaveFrequency = cmdAttr.floatValue[0]; - [[cdsCore cdsController] setSineWaveGeneratorFrequency:sineWaveFrequency]; + // Clamp the paddle value. + if (paddleAdjust < -1.0f) + { + paddleAdjust = -1.0f; + } - NSString *audioFilePath = cmdAttr.object[0]; - [[cdsCore cdsController] setSelectedAudioFileGenerator:[inputManager audioFileGeneratorFromFilePath:audioFilePath]]; - } - else if (controlID == DSControllerState_Paddle) - { - if (cmdAttr.input.isAnalog) + if (paddleAdjust > 1.0f) { - const NSInteger paddleSensitivity = cmdAttr.floatValue[0]; - const float paddleScalar = cmdAttr.input.scalar; - - float paddleAdjust = (paddleScalar * 2.0f) - 1.0f; - - // Clamp the paddle value. - if (paddleAdjust < -1.0f) - { - paddleAdjust = -1.0f; - } - - if (paddleAdjust > 1.0f) - { - paddleAdjust = 1.0f; - } - - // Normalize the input value for the paddle. - paddleAdjust *= (float)paddleSensitivity; - [[cdsCore cdsController] setPaddleAdjust:paddleAdjust]; - } - else - { - const NSInteger paddleAdjust = (theState) ? cmdAttr.intValue[1] : 0; - [[cdsCore cdsController] setPaddleAdjust:paddleAdjust]; + paddleAdjust = 1.0f; } + + // Normalize the input value for the paddle. + paddleAdjust *= (float)paddleSensitivity; + [[cdsCore cdsController] setPaddleAdjust:paddleAdjust]; } else { - [[cdsCore cdsController] setControllerState:theState controlID:controlID]; + const BOOL theState = (cmdAttr.input.state == INPUT_ATTRIBUTE_STATE_ON) ? YES : NO; + const NSInteger paddleAdjust = (theState) ? cmdAttr.intValue[1] : 0; + [[cdsCore cdsController] setPaddleAdjust:paddleAdjust]; } } +- (void) cmdAutoholdSet:(NSValue *)cmdAttrValue +{ + CommandAttributes cmdAttr; + [cmdAttrValue getValue:&cmdAttr]; + const BOOL theState = (cmdAttr.input.state == INPUT_ATTRIBUTE_STATE_ON) ? YES : NO; + + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + [[cdsCore cdsController] setAutohold:theState]; +} + +- (void) cmdAutoholdClear:(NSValue *)cmdAttrValue +{ + CommandAttributes cmdAttr; + [cmdAttrValue getValue:&cmdAttr]; + + if (cmdAttr.input.state == INPUT_ATTRIBUTE_STATE_OFF) + { + return; + } + + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + [[cdsCore cdsController] clearAutohold]; + +} + - (void) cmdLoadEmuSaveStateSlot:(NSValue *)cmdAttrValue { CommandAttributes cmdAttr; diff --git a/desmume/src/cocoa/userinterface/InputManager.h b/desmume/src/cocoa/userinterface/InputManager.h index f03777ca7..672073614 100644 --- a/desmume/src/cocoa/userinterface/InputManager.h +++ b/desmume/src/cocoa/userinterface/InputManager.h @@ -231,7 +231,7 @@ void HandleDeviceRemovalCallback(void *inContext, IOReturn inResult, void *inSen CommandAttributes NewDefaultCommandAttributes(const char *commandTag); CommandAttributes NewCommandAttributesForSelector(const char *commandTag, const SEL theSelector); -CommandAttributes NewCommandAttributesForDSControl(const char *commandTag, const NSUInteger controlID); +CommandAttributes NewCommandAttributesForDSControl(const char *commandTag, const NSUInteger controlID, const bool supportTurbo); void UpdateCommandAttributesWithDeviceInfoDictionary(CommandAttributes *cmdAttr, NSDictionary *deviceInfo); NSMutableDictionary* DeviceInfoDictionaryWithCommandAttributes(const CommandAttributes *cmdAttr, diff --git a/desmume/src/cocoa/userinterface/InputManager.mm b/desmume/src/cocoa/userinterface/InputManager.mm index 84c40f4f3..e70056587 100644 --- a/desmume/src/cocoa/userinterface/InputManager.mm +++ b/desmume/src/cocoa/userinterface/InputManager.mm @@ -1044,6 +1044,8 @@ static std::tr1::unordered_map keyboardNameTable; / [[[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_Piano_256x256" ofType:@"png"]] autorelease], @"Piano: B", [[[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_Piano_256x256" ofType:@"png"]] autorelease], @"Piano: High C", [[[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_PaddleKnob_256x256" ofType:@"png"]] autorelease], @"Paddle", + [[[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_AutoholdSet_420x420" ofType:@"png"]] autorelease], @"Autohold - Set", + [[[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_AutoholdClear_420x420" ofType:@"png"]] autorelease], @"Autohold - Clear", [[[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_DisplayToggle_420x420" ofType:@"png"]] autorelease], @"Toggle All Displays", [[[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_RotateCCW_420x420" ofType:@"png"]] autorelease], @"Rotate Display Left", [[[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_RotateCW_420x420" ofType:@"png"]] autorelease], @"Rotate Display Right", @@ -1051,26 +1053,28 @@ static std::tr1::unordered_map keyboardNameTable; / [[[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_Execute_420x420" ofType:@"png"]] autorelease], @"Execute", [[[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_Pause_420x420" ofType:@"png"]] autorelease], @"Pause", [[[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_Execute_420x420" ofType:@"png"]] autorelease], @"Execute/Pause", + [[[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_FrameAdvance_420x420" ofType:@"png"]] autorelease], @"Frame Advance", + [[[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_FrameJump_420x420" ofType:@"png"]] autorelease], @"Frame Jump", [[[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_Reset_420x420" ofType:@"png"]] autorelease], @"Reset", [[[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_DSButtonSelect_420x420" ofType:@"png"]] autorelease], @"Touch", [[[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_VolumeMute_16x16" ofType:@"png"]] autorelease], @"Mute/Unmute", nil]; // Initialize the selectors used for each command tag. (Do this in code rather than in an external file.) - commandSelector["Up"] = @selector(cmdUpdateDSController:); - commandSelector["Down"] = @selector(cmdUpdateDSController:); - commandSelector["Right"] = @selector(cmdUpdateDSController:); - commandSelector["Left"] = @selector(cmdUpdateDSController:); - commandSelector["A"] = @selector(cmdUpdateDSController:); - commandSelector["B"] = @selector(cmdUpdateDSController:); - commandSelector["X"] = @selector(cmdUpdateDSController:); - commandSelector["Y"] = @selector(cmdUpdateDSController:); - commandSelector["L"] = @selector(cmdUpdateDSController:); - commandSelector["R"] = @selector(cmdUpdateDSController:); - commandSelector["Start"] = @selector(cmdUpdateDSController:); - commandSelector["Select"] = @selector(cmdUpdateDSController:); - commandSelector["Touch"] = @selector(cmdUpdateDSController:); - commandSelector["Microphone"] = @selector(cmdUpdateDSController:); + commandSelector["Up"] = @selector(cmdUpdateDSControllerWithTurbo:); + commandSelector["Down"] = @selector(cmdUpdateDSControllerWithTurbo:); + commandSelector["Right"] = @selector(cmdUpdateDSControllerWithTurbo:); + commandSelector["Left"] = @selector(cmdUpdateDSControllerWithTurbo:); + commandSelector["A"] = @selector(cmdUpdateDSControllerWithTurbo:); + commandSelector["B"] = @selector(cmdUpdateDSControllerWithTurbo:); + commandSelector["X"] = @selector(cmdUpdateDSControllerWithTurbo:); + commandSelector["Y"] = @selector(cmdUpdateDSControllerWithTurbo:); + commandSelector["L"] = @selector(cmdUpdateDSControllerWithTurbo:); + commandSelector["R"] = @selector(cmdUpdateDSControllerWithTurbo:); + commandSelector["Start"] = @selector(cmdUpdateDSControllerWithTurbo:); + commandSelector["Select"] = @selector(cmdUpdateDSControllerWithTurbo:); + commandSelector["Touch"] = @selector(cmdUpdateDSTouch:); + commandSelector["Microphone"] = @selector(cmdUpdateDSMicrophone:); commandSelector["Debug"] = @selector(cmdUpdateDSController:); commandSelector["Lid"] = @selector(cmdUpdateDSController:); @@ -1091,8 +1095,10 @@ static std::tr1::unordered_map keyboardNameTable; / commandSelector["Piano: A#"] = @selector(cmdUpdateDSController:); commandSelector["Piano: B"] = @selector(cmdUpdateDSController:); commandSelector["Piano: High C"] = @selector(cmdUpdateDSController:); - commandSelector["Paddle"] = @selector(cmdUpdateDSController:); + commandSelector["Paddle"] = @selector(cmdUpdateDSPaddle:); + commandSelector["Autohold - Set"] = @selector(cmdAutoholdSet:); + commandSelector["Autohold - Clear"] = @selector(cmdAutoholdClear:); commandSelector["Load State Slot"] = @selector(cmdLoadEmuSaveStateSlot:); commandSelector["Save State Slot"] = @selector(cmdSaveEmuSaveStateSlot:); commandSelector["Copy Screen"] = @selector(cmdCopyScreen:); @@ -1112,51 +1118,53 @@ static std::tr1::unordered_map keyboardNameTable; / commandSelector["Enable/Disable GPU State"] = @selector(cmdToggleGPUState:); // Generate the default command attributes for each command tag. (Do this in code rather than in an external file.) - CommandAttributes cmdDSControlRight = NewCommandAttributesForDSControl("Right", DSControllerState_Right); - CommandAttributes cmdDSControlLeft = NewCommandAttributesForDSControl("Left", DSControllerState_Left); - CommandAttributes cmdDSControlDown = NewCommandAttributesForDSControl("Down", DSControllerState_Down); - CommandAttributes cmdDSControlUp = NewCommandAttributesForDSControl("Up", DSControllerState_Up); - CommandAttributes cmdDSControlSelect = NewCommandAttributesForDSControl("Select", DSControllerState_Select); - CommandAttributes cmdDSControlStart = NewCommandAttributesForDSControl("Start", DSControllerState_Start); - CommandAttributes cmdDSControlB = NewCommandAttributesForDSControl("B", DSControllerState_B); - CommandAttributes cmdDSControlA = NewCommandAttributesForDSControl("A", DSControllerState_A); - CommandAttributes cmdDSControlY = NewCommandAttributesForDSControl("Y", DSControllerState_Y); - CommandAttributes cmdDSControlX = NewCommandAttributesForDSControl("X", DSControllerState_X); - CommandAttributes cmdDSControlL = NewCommandAttributesForDSControl("L", DSControllerState_L); - CommandAttributes cmdDSControlR = NewCommandAttributesForDSControl("R", DSControllerState_R); - CommandAttributes cmdDSControlDebug = NewCommandAttributesForDSControl("Debug", DSControllerState_Debug); - CommandAttributes cmdDSControlLid = NewCommandAttributesForDSControl("Lid", DSControllerState_Lid); + CommandAttributes cmdDSControlRight = NewCommandAttributesForDSControl("Right", DSControllerState_Right, true); + CommandAttributes cmdDSControlLeft = NewCommandAttributesForDSControl("Left", DSControllerState_Left, true); + CommandAttributes cmdDSControlDown = NewCommandAttributesForDSControl("Down", DSControllerState_Down, true); + CommandAttributes cmdDSControlUp = NewCommandAttributesForDSControl("Up", DSControllerState_Up, true); + CommandAttributes cmdDSControlSelect = NewCommandAttributesForDSControl("Select", DSControllerState_Select, true); + CommandAttributes cmdDSControlStart = NewCommandAttributesForDSControl("Start", DSControllerState_Start, true); + CommandAttributes cmdDSControlB = NewCommandAttributesForDSControl("B", DSControllerState_B, true); + CommandAttributes cmdDSControlA = NewCommandAttributesForDSControl("A", DSControllerState_A, true); + CommandAttributes cmdDSControlY = NewCommandAttributesForDSControl("Y", DSControllerState_Y, true); + CommandAttributes cmdDSControlX = NewCommandAttributesForDSControl("X", DSControllerState_X, true); + CommandAttributes cmdDSControlL = NewCommandAttributesForDSControl("L", DSControllerState_L, true); + CommandAttributes cmdDSControlR = NewCommandAttributesForDSControl("R", DSControllerState_R, true); + CommandAttributes cmdDSControlDebug = NewCommandAttributesForDSControl("Debug", DSControllerState_Debug, false); + CommandAttributes cmdDSControlLid = NewCommandAttributesForDSControl("Lid", DSControllerState_Lid, false); - CommandAttributes cmdDSControlTouch = NewCommandAttributesForDSControl("Touch", DSControllerState_Touch); + CommandAttributes cmdDSControlTouch = NewCommandAttributesForDSControl("Touch", DSControllerState_Touch, false); cmdDSControlTouch.useInputForIntCoord = true; - CommandAttributes cmdDSControlMic = NewCommandAttributesForDSControl("Microphone", DSControllerState_Microphone); + CommandAttributes cmdDSControlMic = NewCommandAttributesForDSControl("Microphone", DSControllerState_Microphone, false); cmdDSControlMic.intValue[1] = MICMODE_INTERNAL_NOISE; cmdDSControlMic.floatValue[0] = 250.0f; - CommandAttributes cmdGuitarGripGreen = NewCommandAttributesForDSControl("Guitar Grip: Green", DSControllerState_GuitarGrip_Green); - CommandAttributes cmdGuitarGripRed = NewCommandAttributesForDSControl("Guitar Grip: Red", DSControllerState_GuitarGrip_Red); - CommandAttributes cmdGuitarGripYellow = NewCommandAttributesForDSControl("Guitar Grip: Yellow", DSControllerState_GuitarGrip_Yellow); - CommandAttributes cmdGuitarGripBlue = NewCommandAttributesForDSControl("Guitar Grip: Blue", DSControllerState_GuitarGrip_Blue); - CommandAttributes cmdPianoC = NewCommandAttributesForDSControl("Piano: C", DSControllerState_Piano_C); - CommandAttributes cmdPianoCSharp = NewCommandAttributesForDSControl("Piano: C#", DSControllerState_Piano_CSharp); - CommandAttributes cmdPianoD = NewCommandAttributesForDSControl("Piano: D", DSControllerState_Piano_D); - CommandAttributes cmdPianoDSharp = NewCommandAttributesForDSControl("Piano: D#", DSControllerState_Piano_DSharp); - CommandAttributes cmdPianoE = NewCommandAttributesForDSControl("Piano: E", DSControllerState_Piano_E); - CommandAttributes cmdPianoF = NewCommandAttributesForDSControl("Piano: F", DSControllerState_Piano_F); - CommandAttributes cmdPianoFSharp = NewCommandAttributesForDSControl("Piano: F#", DSControllerState_Piano_FSharp); - CommandAttributes cmdPianoG = NewCommandAttributesForDSControl("Piano: G", DSControllerState_Piano_G); - CommandAttributes cmdPianoGSharp = NewCommandAttributesForDSControl("Piano: G#", DSControllerState_Piano_GSharp); - CommandAttributes cmdPianoA = NewCommandAttributesForDSControl("Piano: A", DSControllerState_Piano_A); - CommandAttributes cmdPianoASharp = NewCommandAttributesForDSControl("Piano: A#", DSControllerState_Piano_ASharp); - CommandAttributes cmdPianoB = NewCommandAttributesForDSControl("Piano: B", DSControllerState_Piano_B); - CommandAttributes cmdPianoHighC = NewCommandAttributesForDSControl("Piano: High C", DSControllerState_Piano_HighC); + CommandAttributes cmdGuitarGripGreen = NewCommandAttributesForDSControl("Guitar Grip: Green", DSControllerState_GuitarGrip_Green, false); + CommandAttributes cmdGuitarGripRed = NewCommandAttributesForDSControl("Guitar Grip: Red", DSControllerState_GuitarGrip_Red, false); + CommandAttributes cmdGuitarGripYellow = NewCommandAttributesForDSControl("Guitar Grip: Yellow", DSControllerState_GuitarGrip_Yellow, false); + CommandAttributes cmdGuitarGripBlue = NewCommandAttributesForDSControl("Guitar Grip: Blue", DSControllerState_GuitarGrip_Blue, false); + CommandAttributes cmdPianoC = NewCommandAttributesForDSControl("Piano: C", DSControllerState_Piano_C, false); + CommandAttributes cmdPianoCSharp = NewCommandAttributesForDSControl("Piano: C#", DSControllerState_Piano_CSharp, false); + CommandAttributes cmdPianoD = NewCommandAttributesForDSControl("Piano: D", DSControllerState_Piano_D, false); + CommandAttributes cmdPianoDSharp = NewCommandAttributesForDSControl("Piano: D#", DSControllerState_Piano_DSharp, false); + CommandAttributes cmdPianoE = NewCommandAttributesForDSControl("Piano: E", DSControllerState_Piano_E, false); + CommandAttributes cmdPianoF = NewCommandAttributesForDSControl("Piano: F", DSControllerState_Piano_F, false); + CommandAttributes cmdPianoFSharp = NewCommandAttributesForDSControl("Piano: F#", DSControllerState_Piano_FSharp, false); + CommandAttributes cmdPianoG = NewCommandAttributesForDSControl("Piano: G", DSControllerState_Piano_G, false); + CommandAttributes cmdPianoGSharp = NewCommandAttributesForDSControl("Piano: G#", DSControllerState_Piano_GSharp, false); + CommandAttributes cmdPianoA = NewCommandAttributesForDSControl("Piano: A", DSControllerState_Piano_A, false); + CommandAttributes cmdPianoASharp = NewCommandAttributesForDSControl("Piano: A#", DSControllerState_Piano_ASharp, false); + CommandAttributes cmdPianoB = NewCommandAttributesForDSControl("Piano: B", DSControllerState_Piano_B, false); + CommandAttributes cmdPianoHighC = NewCommandAttributesForDSControl("Piano: High C", DSControllerState_Piano_HighC, false); - CommandAttributes cmdPaddle = NewCommandAttributesForDSControl("Paddle", DSControllerState_Paddle); + CommandAttributes cmdPaddle = NewCommandAttributesForDSControl("Paddle", DSControllerState_Paddle, false); cmdPaddle.allowAnalogInput = true; cmdPaddle.intValue[1] = 0; cmdPaddle.floatValue[0] = 10.0f; + CommandAttributes cmdAutoholdSet = NewCommandAttributesForSelector("Autohold - Set", commandSelector["Autohold - Set"]); + CommandAttributes cmdAutoholdClear = NewCommandAttributesForSelector("Autohold - Clear", commandSelector["Autohold - Clear"]); CommandAttributes cmdLoadEmuSaveStateSlot = NewCommandAttributesForSelector("Load State Slot", commandSelector["Load State Slot"]); CommandAttributes cmdSaveEmuSaveStateSlot = NewCommandAttributesForSelector("Save State Slot", commandSelector["Save State Slot"]); CommandAttributes cmdCopyScreen = NewCommandAttributesForSelector("Copy Screen", commandSelector["Copy Screen"]); @@ -1223,6 +1231,8 @@ static std::tr1::unordered_map keyboardNameTable; / defaultCommandAttributes["Piano: High C"] = cmdPianoHighC; defaultCommandAttributes["Paddle"] = cmdPaddle; + defaultCommandAttributes["Autohold - Set"] = cmdAutoholdSet; + defaultCommandAttributes["Autohold - Clear"] = cmdAutoholdClear; defaultCommandAttributes["Load State Slot"] = cmdLoadEmuSaveStateSlot; defaultCommandAttributes["Save State Slot"] = cmdSaveEmuSaveStateSlot; defaultCommandAttributes["Copy Screen"] = cmdCopyScreen; @@ -1243,6 +1253,8 @@ static std::tr1::unordered_map keyboardNameTable; / defaultCommandAttributes["Enable/Disable GPU State"] = cmdToggleGPUState; // Map all IBActions (the target object is an EmuControllerDelegate) + [self addMappingForIBAction:@selector(autoholdSet:) commandAttributes:&cmdAutoholdSet]; + [self addMappingForIBAction:@selector(autoholdClear:) commandAttributes:&cmdAutoholdClear]; [self addMappingForIBAction:@selector(loadEmuSaveStateSlot:) commandAttributes:&cmdLoadEmuSaveStateSlot]; [self addMappingForIBAction:@selector(saveEmuSaveStateSlot:) commandAttributes:&cmdSaveEmuSaveStateSlot]; [self addMappingForIBAction:@selector(copy:) commandAttributes:&cmdCopyScreen]; @@ -1316,7 +1328,8 @@ static std::tr1::unordered_map keyboardNameTable; / // Force DS control commands to use IDs from code instead of from the file. // (In other words, we can't trust an external file with this information since // IDs might desync if the DS Control ID enumeration changes.) - if (cmdAttr.selector == @selector(cmdUpdateDSController:)) + if (cmdAttr.selector == @selector(cmdUpdateDSController:) || + cmdAttr.selector == @selector(cmdUpdateDSControllerWithTurbo:)) { cmdAttr.intValue[0] = defaultCommandAttributes[cmdTag].intValue[0]; } @@ -1623,7 +1636,23 @@ static std::tr1::unordered_map keyboardNameTable; / { NSString *inputSummary = nil; - if (strncmp(commandTag, "Touch", INPUT_HANDLER_STRING_LENGTH) == 0) + if ((strncmp(commandTag, "Up", INPUT_HANDLER_STRING_LENGTH) == 0) || + (strncmp(commandTag, "Down", INPUT_HANDLER_STRING_LENGTH) == 0) || + (strncmp(commandTag, "Left", INPUT_HANDLER_STRING_LENGTH) == 0) || + (strncmp(commandTag, "Right", INPUT_HANDLER_STRING_LENGTH) == 0) || + (strncmp(commandTag, "A", INPUT_HANDLER_STRING_LENGTH) == 0) || + (strncmp(commandTag, "B", INPUT_HANDLER_STRING_LENGTH) == 0) || + (strncmp(commandTag, "X", INPUT_HANDLER_STRING_LENGTH) == 0) || + (strncmp(commandTag, "Y", INPUT_HANDLER_STRING_LENGTH) == 0) || + (strncmp(commandTag, "L", INPUT_HANDLER_STRING_LENGTH) == 0) || + (strncmp(commandTag, "R", INPUT_HANDLER_STRING_LENGTH) == 0) || + (strncmp(commandTag, "Start", INPUT_HANDLER_STRING_LENGTH) == 0) || + (strncmp(commandTag, "Select", INPUT_HANDLER_STRING_LENGTH) == 0)) + { + const BOOL isTurbo = [(NSNumber *)[deviceInfo valueForKey:@"intValue1"] boolValue]; + inputSummary = [NSString stringWithFormat:@"Turbo: %@", (isTurbo) ? @"Yes" : @"No"]; + } + else if (strncmp(commandTag, "Touch", INPUT_HANDLER_STRING_LENGTH) == 0) { const BOOL useInputForIntCoord = [(NSNumber *)[deviceInfo valueForKey:@"useInputForIntCoord"] boolValue]; if (useInputForIntCoord) @@ -1980,10 +2009,45 @@ CommandAttributes NewCommandAttributesForSelector(const char *commandTag, const return cmdAttr; } -CommandAttributes NewCommandAttributesForDSControl(const char *commandTag, const NSUInteger controlID) +CommandAttributes NewCommandAttributesForDSControl(const char *commandTag, const NSUInteger controlID, const bool supportTurbo) { CommandAttributes cmdAttr = NewCommandAttributesForSelector(commandTag, @selector(cmdUpdateDSController:)); + + switch (controlID) + { + case DSControllerState_Right: + case DSControllerState_Left: + case DSControllerState_Down: + case DSControllerState_Up: + case DSControllerState_Select: + case DSControllerState_Start: + case DSControllerState_B: + case DSControllerState_A: + case DSControllerState_Y: + case DSControllerState_X: + case DSControllerState_L: + case DSControllerState_R: + cmdAttr.selector = @selector(cmdUpdateDSControllerWithTurbo:); + break; + + case DSControllerState_Touch: + cmdAttr.selector = @selector(cmdUpdateDSTouch:); + break; + + case DSControllerState_Microphone: + cmdAttr.selector = @selector(cmdUpdateDSMicrophone:); + break; + + case DSControllerState_Paddle: + cmdAttr.selector = @selector(cmdUpdateDSPaddle:); + break; + + default: + break; + } + cmdAttr.intValue[0] = controlID; + cmdAttr.intValue[1] = NO; return cmdAttr; } diff --git a/desmume/src/cocoa/userinterface/inputPrefsView.h b/desmume/src/cocoa/userinterface/inputPrefsView.h index c815a0f22..aa0b6d713 100644 --- a/desmume/src/cocoa/userinterface/inputPrefsView.h +++ b/desmume/src/cocoa/userinterface/inputPrefsView.h @@ -39,6 +39,7 @@ NSWindow *inputProfileSheet; NSWindow *inputProfileRenameSheet; + NSWindow *inputSettingsNDSInput; NSWindow *inputSettingsMicrophone; NSWindow *inputSettingsTouch; NSWindow *inputSettingsLoadStateSlot; @@ -70,6 +71,7 @@ @property (readonly) IBOutlet NSWindow *inputProfileSheet; @property (readonly) IBOutlet NSWindow *inputProfileRenameSheet; +@property (readonly) IBOutlet NSWindow *inputSettingsNDSInput; @property (readonly) IBOutlet NSWindow *inputSettingsMicrophone; @property (readonly) IBOutlet NSWindow *inputSettingsTouch; @property (readonly) IBOutlet NSWindow *inputSettingsLoadStateSlot; diff --git a/desmume/src/cocoa/userinterface/inputPrefsView.mm b/desmume/src/cocoa/userinterface/inputPrefsView.mm index 3eab004d2..ebaf8a4f6 100644 --- a/desmume/src/cocoa/userinterface/inputPrefsView.mm +++ b/desmume/src/cocoa/userinterface/inputPrefsView.mm @@ -36,6 +36,7 @@ @synthesize inputPrefOutlineView; @synthesize inputSettingsController; @synthesize inputProfileController; +@synthesize inputSettingsNDSInput; @synthesize inputSettingsMicrophone; @synthesize inputSettingsTouch; @synthesize inputSettingsLoadStateSlot; @@ -168,6 +169,18 @@ - (void) initSettingsSheets { inputSettingsMappings = [[NSDictionary alloc] initWithObjectsAndKeys: + inputSettingsNDSInput, @"Up", + inputSettingsNDSInput, @"Down", + inputSettingsNDSInput, @"Right", + inputSettingsNDSInput, @"Left", + inputSettingsNDSInput, @"A", + inputSettingsNDSInput, @"B", + inputSettingsNDSInput, @"X", + inputSettingsNDSInput, @"Y", + inputSettingsNDSInput, @"L", + inputSettingsNDSInput, @"R", + inputSettingsNDSInput, @"Start", + inputSettingsNDSInput, @"Select", inputSettingsMicrophone, @"Microphone", inputSettingsTouch, @"Touch", inputSettingsLoadStateSlot, @"Load State Slot",