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 000000000..1ac88a1d4 Binary files /dev/null and b/desmume/src/cocoa/images/Icon_AutoholdClear_420x420.png differ 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 000000000..548bbce06 Binary files /dev/null and b/desmume/src/cocoa/images/Icon_AutoholdSet_420x420.png differ diff --git a/desmume/src/cocoa/translations/English.lproj/MainMenu.strings b/desmume/src/cocoa/translations/English.lproj/MainMenu.strings index ce7dfbf68..b226c6ab8 100644 Binary files a/desmume/src/cocoa/translations/English.lproj/MainMenu.strings and b/desmume/src/cocoa/translations/English.lproj/MainMenu.strings differ diff --git a/desmume/src/cocoa/translations/English.lproj/MainMenu.xib b/desmume/src/cocoa/translations/English.lproj/MainMenu.xib index c4ae70573..3bf17437e 100644 --- a/desmume/src/cocoa/translations/English.lproj/MainMenu.xib +++ b/desmume/src/cocoa/translations/English.lproj/MainMenu.xib @@ -12,8 +12,8 @@ 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",