Cocoa Port:

- Add preliminary support for SLOT-2 devices. (Guitar Grip and Piano remain unsupported, but all other devices work.) Happy New Year, folks!
This commit is contained in:
rogerman 2014-01-02 03:13:44 +00:00
parent e568f8c4fd
commit ac146b26d2
27 changed files with 7255 additions and 294 deletions

View File

@ -57,6 +57,11 @@
AB126D09182ECB9500EBCF22 /* slot2_passme.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB126D06182ECB9500EBCF22 /* slot2_passme.cpp */; };
AB126D0A182ECB9500EBCF22 /* slot2_passme.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB126D06182ECB9500EBCF22 /* slot2_passme.cpp */; };
AB126D0B182ECB9500EBCF22 /* slot2_passme.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB126D06182ECB9500EBCF22 /* slot2_passme.cpp */; };
AB142026186E2CD80015D52F /* Image_MemoryExpansionPak.png in Resources */ = {isa = PBXBuildFile; fileRef = AB142025186E2CD80015D52F /* Image_MemoryExpansionPak.png */; };
AB142027186E2CD80015D52F /* Image_MemoryExpansionPak.png in Resources */ = {isa = PBXBuildFile; fileRef = AB142025186E2CD80015D52F /* Image_MemoryExpansionPak.png */; };
AB142028186E2CD80015D52F /* Image_MemoryExpansionPak.png in Resources */ = {isa = PBXBuildFile; fileRef = AB142025186E2CD80015D52F /* Image_MemoryExpansionPak.png */; };
AB142029186E2CD80015D52F /* Image_MemoryExpansionPak.png in Resources */ = {isa = PBXBuildFile; fileRef = AB142025186E2CD80015D52F /* Image_MemoryExpansionPak.png */; };
AB14202A186E2CD80015D52F /* Image_MemoryExpansionPak.png in Resources */ = {isa = PBXBuildFile; fileRef = AB142025186E2CD80015D52F /* Image_MemoryExpansionPak.png */; };
AB213D45170CB141006DDB0F /* InputProfileController.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB213D44170CB141006DDB0F /* InputProfileController.mm */; };
AB213D46170CB141006DDB0F /* InputProfileController.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB213D44170CB141006DDB0F /* InputProfileController.mm */; };
AB213D47170CB141006DDB0F /* InputProfileController.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB213D44170CB141006DDB0F /* InputProfileController.mm */; };
@ -622,7 +627,6 @@
AB711F251481C35F009011C8 /* slot2_expMemory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF031345AC9B00AF11D1 /* slot2_expMemory.cpp */; };
AB711F261481C35F009011C8 /* slot2_gbagame.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF041345AC9B00AF11D1 /* slot2_gbagame.cpp */; };
AB711F271481C35F009011C8 /* slot2_guitarGrip.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF051345AC9B00AF11D1 /* slot2_guitarGrip.cpp */; };
AB711F281481C35F009011C8 /* slot2_mpcf.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF061345AC9B00AF11D1 /* slot2_mpcf.cpp */; };
AB711F291481C35F009011C8 /* slot2_none.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF071345AC9C00AF11D1 /* slot2_none.cpp */; };
AB711F2A1481C35F009011C8 /* slot2_paddle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF081345AC9C00AF11D1 /* slot2_paddle.cpp */; };
AB711F2B1481C35F009011C8 /* slot2_piano.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF091345AC9C00AF11D1 /* slot2_piano.cpp */; };
@ -864,6 +868,18 @@
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 */; };
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 */; };
AB8C6CC2186A950C00E3EC64 /* Image_PassME.png in Resources */ = {isa = PBXBuildFile; fileRef = AB8C6CBE186A950C00E3EC64 /* Image_PassME.png */; };
AB8C6CC3186A950C00E3EC64 /* Image_PassME.png in Resources */ = {isa = PBXBuildFile; fileRef = AB8C6CBE186A950C00E3EC64 /* Image_PassME.png */; };
AB8C6E57186CD07E00E3EC64 /* ForceFeedback.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB8C6E56186CD07E00E3EC64 /* ForceFeedback.framework */; };
AB8FFCB4186F8E5400C10085 /* slot2_mpcf.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF061345AC9B00AF11D1 /* slot2_mpcf.cpp */; };
AB8FFE4A1872032B00C10085 /* Image_PaddleController.png in Resources */ = {isa = PBXBuildFile; fileRef = AB8FFE491872032B00C10085 /* Image_PaddleController.png */; };
AB8FFE4B1872032B00C10085 /* Image_PaddleController.png in Resources */ = {isa = PBXBuildFile; fileRef = AB8FFE491872032B00C10085 /* Image_PaddleController.png */; };
AB8FFE4C1872032B00C10085 /* Image_PaddleController.png in Resources */ = {isa = PBXBuildFile; fileRef = AB8FFE491872032B00C10085 /* Image_PaddleController.png */; };
AB8FFE4D1872032B00C10085 /* Image_PaddleController.png in Resources */ = {isa = PBXBuildFile; fileRef = AB8FFE491872032B00C10085 /* Image_PaddleController.png */; };
AB8FFE4E1872032B00C10085 /* Image_PaddleController.png in Resources */ = {isa = PBXBuildFile; fileRef = AB8FFE491872032B00C10085 /* Image_PaddleController.png */; };
AB97C554169646D1002AC11B /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB97C553169646D1002AC11B /* Accelerate.framework */; };
AB97D5E516964F3B002AC11B /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB97C553169646D1002AC11B /* Accelerate.framework */; };
AB97D60916964F48002AC11B /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB97C553169646D1002AC11B /* Accelerate.framework */; };
@ -1061,6 +1077,21 @@
ABAD104315ACE7A00000EC47 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB350BA41478AC96007165AC /* IOKit.framework */; };
ABAD104415ACE7A00000EC47 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ABC570D4134431DA00E7B0B1 /* OpenGL.framework */; };
ABAD104515ACE7A00000EC47 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AB0A0D1914AACA9600E83E91 /* libz.dylib */; };
ABAE2F7B18682B6C00C92F4F /* Slot2WindowDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABAE2F7A18682B6C00C92F4F /* Slot2WindowDelegate.mm */; };
ABAE2F7C18682B6C00C92F4F /* Slot2WindowDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABAE2F7A18682B6C00C92F4F /* Slot2WindowDelegate.mm */; };
ABAE2F7D18682B6C00C92F4F /* Slot2WindowDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABAE2F7A18682B6C00C92F4F /* Slot2WindowDelegate.mm */; };
ABAE2F7E18682B6C00C92F4F /* Slot2WindowDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABAE2F7A18682B6C00C92F4F /* Slot2WindowDelegate.mm */; };
ABAE2F7F18682B6C00C92F4F /* Slot2WindowDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABAE2F7A18682B6C00C92F4F /* Slot2WindowDelegate.mm */; };
ABAE2F8418682B8F00C92F4F /* cocoa_slot2.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABAE2F8318682B8F00C92F4F /* cocoa_slot2.mm */; };
ABAE2F8518682B8F00C92F4F /* cocoa_slot2.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABAE2F8318682B8F00C92F4F /* cocoa_slot2.mm */; };
ABAE2F8618682B8F00C92F4F /* cocoa_slot2.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABAE2F8318682B8F00C92F4F /* cocoa_slot2.mm */; };
ABAE2F8718682B8F00C92F4F /* cocoa_slot2.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABAE2F8318682B8F00C92F4F /* cocoa_slot2.mm */; };
ABAE2F8818682B8F00C92F4F /* cocoa_slot2.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABAE2F8318682B8F00C92F4F /* cocoa_slot2.mm */; };
ABAE30BB1869484F00C92F4F /* Image_Piano.png in Resources */ = {isa = PBXBuildFile; fileRef = ABAE30BA1869484F00C92F4F /* Image_Piano.png */; };
ABAE30BC1869484F00C92F4F /* Image_Piano.png in Resources */ = {isa = PBXBuildFile; fileRef = ABAE30BA1869484F00C92F4F /* Image_Piano.png */; };
ABAE30BD1869484F00C92F4F /* Image_Piano.png in Resources */ = {isa = PBXBuildFile; fileRef = ABAE30BA1869484F00C92F4F /* Image_Piano.png */; };
ABAE30BE1869484F00C92F4F /* Image_Piano.png in Resources */ = {isa = PBXBuildFile; fileRef = ABAE30BA1869484F00C92F4F /* Image_Piano.png */; };
ABAE30BF1869484F00C92F4F /* Image_Piano.png in Resources */ = {isa = PBXBuildFile; fileRef = ABAE30BA1869484F00C92F4F /* Image_Piano.png */; };
ABB6AD5D173A3F2B00EC2E8D /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ABB6AD5C173A3F2B00EC2E8D /* Carbon.framework */; };
ABB9212117CEB4110049D4C5 /* slot1comp_protocol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABB9212017CEB4110049D4C5 /* slot1comp_protocol.cpp */; };
ABB9212217CEB4110049D4C5 /* slot1comp_protocol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABB9212017CEB4110049D4C5 /* slot1comp_protocol.cpp */; };
@ -1077,6 +1108,10 @@
ABC3AFCF14B8D16700D5B13D /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AB0A0D1914AACA9600E83E91 /* libz.dylib */; };
ABD0A53A1501AA5A0074A094 /* coreaudiosound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD0A5341501AA5A0074A094 /* coreaudiosound.cpp */; };
ABD0A53B1501AA5A0074A094 /* ringbuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD0A5351501AA5A0074A094 /* ringbuffer.cpp */; };
ABEF84721873576300E99ADC /* ForceFeedback.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB8C6E56186CD07E00E3EC64 /* ForceFeedback.framework */; };
ABEF84831873578F00E99ADC /* ForceFeedback.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB8C6E56186CD07E00E3EC64 /* ForceFeedback.framework */; };
ABEF84841873579400E99ADC /* ForceFeedback.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB8C6E56186CD07E00E3EC64 /* ForceFeedback.framework */; };
ABEF84851873579700E99ADC /* ForceFeedback.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB8C6E56186CD07E00E3EC64 /* ForceFeedback.framework */; };
ABF50ABA169F5FDA0018C08D /* assembler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABF50A7B169F5FDA0018C08D /* assembler.cpp */; };
ABF50ABB169F5FDA0018C08D /* assert.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABF50A7D169F5FDA0018C08D /* assert.cpp */; };
ABF50ABC169F5FDA0018C08D /* buffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABF50A7F169F5FDA0018C08D /* buffer.cpp */; };
@ -1201,6 +1236,7 @@
AB0F29A414BE7213009ABC6F /* Icon_ShowHUD_420x420.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_ShowHUD_420x420.png; path = images/Icon_ShowHUD_420x420.png; sourceTree = "<group>"; };
AB0F29A514BE7213009ABC6F /* Icon_Speaker_420x420.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_Speaker_420x420.png; path = images/Icon_Speaker_420x420.png; sourceTree = "<group>"; };
AB126D06182ECB9500EBCF22 /* slot2_passme.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = slot2_passme.cpp; sourceTree = "<group>"; };
AB142025186E2CD80015D52F /* Image_MemoryExpansionPak.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Image_MemoryExpansionPak.png; path = images/Image_MemoryExpansionPak.png; sourceTree = "<group>"; };
AB213D43170CB141006DDB0F /* InputProfileController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InputProfileController.h; sourceTree = "<group>"; };
AB213D44170CB141006DDB0F /* InputProfileController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = InputProfileController.mm; sourceTree = "<group>"; };
AB213E981710D074006DDB0F /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; };
@ -1282,6 +1318,9 @@
AB80E050142BC4FA00A52038 /* cocoa_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cocoa_util.h; sourceTree = "<group>"; };
AB817A34143EE2DB00A7DFE9 /* videofilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = videofilter.h; sourceTree = "<group>"; };
AB817A35143EE2DB00A7DFE9 /* videofilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = videofilter.cpp; sourceTree = "<group>"; };
AB8C6CBE186A950C00E3EC64 /* Image_PassME.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Image_PassME.png; path = images/Image_PassME.png; sourceTree = "<group>"; };
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 = "<group>"; };
AB901BDF1420706B00348EEC /* Japanese */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = Japanese; path = translations/Japanese.lproj/Localizable.strings; sourceTree = "<group>"; };
AB901BE01420706F00348EEC /* French */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = French; path = translations/French.lproj/Localizable.strings; sourceTree = "<group>"; };
AB901BE11420707400348EEC /* Italian */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = Italian; path = translations/Italian.lproj/Localizable.strings; sourceTree = "<group>"; };
@ -1299,6 +1338,11 @@
ABAAFBE8172122B6005DDDBE /* FileMigrationDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FileMigrationDelegate.h; sourceTree = "<group>"; };
ABAAFBE9172122B6005DDDBE /* FileMigrationDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = FileMigrationDelegate.mm; sourceTree = "<group>"; };
ABAD104915ACE7A00000EC47 /* DeSmuME (PPC).app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "DeSmuME (PPC).app"; sourceTree = BUILT_PRODUCTS_DIR; };
ABAE2F7918682B6C00C92F4F /* Slot2WindowDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Slot2WindowDelegate.h; sourceTree = "<group>"; };
ABAE2F7A18682B6C00C92F4F /* Slot2WindowDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = Slot2WindowDelegate.mm; sourceTree = "<group>"; };
ABAE2F8218682B8F00C92F4F /* cocoa_slot2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cocoa_slot2.h; sourceTree = "<group>"; };
ABAE2F8318682B8F00C92F4F /* cocoa_slot2.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = cocoa_slot2.mm; sourceTree = "<group>"; };
ABAE30BA1869484F00C92F4F /* Image_Piano.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Image_Piano.png; path = images/Image_Piano.png; sourceTree = "<group>"; };
ABB6AD5C173A3F2B00EC2E8D /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = System/Library/Frameworks/Carbon.framework; sourceTree = SDKROOT; };
ABB9211F17CEB4110049D4C5 /* slot1comp_protocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = slot1comp_protocol.h; sourceTree = "<group>"; };
ABB9212017CEB4110049D4C5 /* slot1comp_protocol.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = slot1comp_protocol.cpp; sourceTree = "<group>"; };
@ -1601,14 +1645,15 @@
files = (
AB2A9A6D1725F00F0062C1A1 /* Accelerate.framework in Frameworks */,
AB2A9A6E1725F00F0062C1A1 /* AppKit.framework in Frameworks */,
AB2A9A751725F00F0062C1A1 /* AudioToolbox.framework in Frameworks */,
AB2A9A6F1725F00F0062C1A1 /* AudioUnit.framework in Frameworks */,
ABB6AD5D173A3F2B00EC2E8D /* Carbon.framework in Frameworks */,
AB2A9A701725F00F0062C1A1 /* Cocoa.framework in Frameworks */,
AB2A9A711725F00F0062C1A1 /* Foundation.framework in Frameworks */,
ABEF84851873579700E99ADC /* ForceFeedback.framework in Frameworks */,
AB2A9A721725F00F0062C1A1 /* IOKit.framework in Frameworks */,
AB2A9A731725F00F0062C1A1 /* OpenGL.framework in Frameworks */,
AB2A9A741725F00F0062C1A1 /* libz.dylib in Frameworks */,
AB2A9A751725F00F0062C1A1 /* AudioToolbox.framework in Frameworks */,
ABB6AD5D173A3F2B00EC2E8D /* Carbon.framework in Frameworks */,
AB2A9A731725F00F0062C1A1 /* OpenGL.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -1618,14 +1663,15 @@
files = (
AB97D60C16964F54002AC11B /* Accelerate.framework in Frameworks */,
AB2F3C3B15CF9C6000858373 /* AppKit.framework in Frameworks */,
AB213EC41710D0A0006DDB0F /* AudioToolbox.framework in Frameworks */,
AB2F3C3C15CF9C6000858373 /* AudioUnit.framework in Frameworks */,
AB7DDA70173DC3A3004F3D07 /* Carbon.framework in Frameworks */,
AB2F3C3D15CF9C6000858373 /* Cocoa.framework in Frameworks */,
AB2F3C3E15CF9C6000858373 /* Foundation.framework in Frameworks */,
ABEF84841873579400E99ADC /* ForceFeedback.framework in Frameworks */,
AB2F3C3F15CF9C6000858373 /* IOKit.framework in Frameworks */,
AB2F3C4015CF9C6000858373 /* OpenGL.framework in Frameworks */,
AB2F3C4115CF9C6000858373 /* libz.dylib in Frameworks */,
AB213EC41710D0A0006DDB0F /* AudioToolbox.framework in Frameworks */,
AB7DDA70173DC3A3004F3D07 /* Carbon.framework in Frameworks */,
AB2F3C4015CF9C6000858373 /* OpenGL.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -1635,14 +1681,15 @@
files = (
AB97C554169646D1002AC11B /* Accelerate.framework in Frameworks */,
AB711F771481C35F009011C8 /* AppKit.framework in Frameworks */,
AB213E991710D074006DDB0F /* AudioToolbox.framework in Frameworks */,
AB711F751481C35F009011C8 /* AudioUnit.framework in Frameworks */,
AB7DDA6D173DC38F004F3D07 /* Carbon.framework in Frameworks */,
AB711F741481C35F009011C8 /* Cocoa.framework in Frameworks */,
AB8C6E57186CD07E00E3EC64 /* ForceFeedback.framework in Frameworks */,
AB711F781481C35F009011C8 /* Foundation.framework in Frameworks */,
AB711F7B1481C35F009011C8 /* IOKit.framework in Frameworks */,
AB711F761481C35F009011C8 /* OpenGL.framework in Frameworks */,
ABC3AFCF14B8D16700D5B13D /* libz.dylib in Frameworks */,
AB213E991710D074006DDB0F /* AudioToolbox.framework in Frameworks */,
AB7DDA6D173DC38F004F3D07 /* Carbon.framework in Frameworks */,
AB711F761481C35F009011C8 /* OpenGL.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -1652,14 +1699,15 @@
files = (
AB97D5E516964F3B002AC11B /* Accelerate.framework in Frameworks */,
AB73AA291507C9F500A310C8 /* AppKit.framework in Frameworks */,
AB213EC61710D0A1006DDB0F /* AudioToolbox.framework in Frameworks */,
AB73AA2A1507C9F500A310C8 /* AudioUnit.framework in Frameworks */,
AB7DDA6E173DC399004F3D07 /* Carbon.framework in Frameworks */,
AB73AA2B1507C9F500A310C8 /* Cocoa.framework in Frameworks */,
ABEF84721873576300E99ADC /* ForceFeedback.framework in Frameworks */,
AB73AA2C1507C9F500A310C8 /* Foundation.framework in Frameworks */,
AB73AA2D1507C9F500A310C8 /* IOKit.framework in Frameworks */,
AB73AA2E1507C9F500A310C8 /* OpenGL.framework in Frameworks */,
AB73AA2F1507C9F500A310C8 /* libz.dylib in Frameworks */,
AB213EC61710D0A1006DDB0F /* AudioToolbox.framework in Frameworks */,
AB7DDA6E173DC399004F3D07 /* Carbon.framework in Frameworks */,
AB73AA2E1507C9F500A310C8 /* OpenGL.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -1669,14 +1717,15 @@
files = (
AB97D60916964F48002AC11B /* Accelerate.framework in Frameworks */,
ABAD103F15ACE7A00000EC47 /* AppKit.framework in Frameworks */,
AB213EC51710D0A1006DDB0F /* AudioToolbox.framework in Frameworks */,
ABAD104015ACE7A00000EC47 /* AudioUnit.framework in Frameworks */,
AB7DDA6F173DC39E004F3D07 /* Carbon.framework in Frameworks */,
ABAD104115ACE7A00000EC47 /* Cocoa.framework in Frameworks */,
ABAD104215ACE7A00000EC47 /* Foundation.framework in Frameworks */,
ABEF84831873578F00E99ADC /* ForceFeedback.framework in Frameworks */,
ABAD104315ACE7A00000EC47 /* IOKit.framework in Frameworks */,
ABAD104415ACE7A00000EC47 /* OpenGL.framework in Frameworks */,
ABAD104515ACE7A00000EC47 /* libz.dylib in Frameworks */,
AB213EC51710D0A1006DDB0F /* AudioToolbox.framework in Frameworks */,
AB7DDA6F173DC39E004F3D07 /* Carbon.framework in Frameworks */,
ABAD104415ACE7A00000EC47 /* OpenGL.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -1703,6 +1752,7 @@
ABD103FF1346652500AF11D1 /* cocoa_input.h */,
AB3E34C7134AF4500056477A /* cocoa_output.h */,
ABD104001346652500AF11D1 /* cocoa_rom.h */,
ABAE2F8218682B8F00C92F4F /* cocoa_slot2.h */,
AB80E050142BC4FA00A52038 /* cocoa_util.h */,
ABE5DFE3143FB1DA00835AD8 /* cocoa_videofilter.h */,
ABD0A5361501AA5A0074A094 /* coreaudiosound.h */,
@ -1718,6 +1768,7 @@
ABD104111346652500AF11D1 /* cocoa_input.mm */,
AB3E34C8134AF4500056477A /* cocoa_output.mm */,
ABD104131346652500AF11D1 /* cocoa_rom.mm */,
ABAE2F8318682B8F00C92F4F /* cocoa_slot2.mm */,
AB80E04C142BC4A800A52038 /* cocoa_util.mm */,
ABE5DFE4143FB1DA00835AD8 /* cocoa_videofilter.mm */,
);
@ -1733,6 +1784,7 @@
ABC570D0134431CE00E7B0B1 /* AudioUnit.framework */,
ABB6AD5C173A3F2B00EC2E8D /* Carbon.framework */,
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */,
AB8C6E56186CD07E00E3EC64 /* ForceFeedback.framework */,
29B97325FDCFA39411CA2CEA /* Foundation.framework */,
AB350BA41478AC96007165AC /* IOKit.framework */,
ABC570D4134431DA00E7B0B1 /* OpenGL.framework */,
@ -1827,6 +1879,7 @@
AB3ACB6E14C2361100D7D192 /* inputPrefsView.h */,
AB213D43170CB141006DDB0F /* InputProfileController.h */,
AB3ACB7014C2361100D7D192 /* preferencesWindowDelegate.h */,
ABAE2F7918682B6C00C92F4F /* Slot2WindowDelegate.h */,
ABA0356E169127BB00817C69 /* troubleshootingWindowDelegate.h */,
AB3ACB6714C2361100D7D192 /* appDelegate.mm */,
AB3ACB6914C2361100D7D192 /* cheatWindowDelegate.mm */,
@ -1837,6 +1890,7 @@
AB3ACB6F14C2361100D7D192 /* inputPrefsView.mm */,
AB213D44170CB141006DDB0F /* InputProfileController.mm */,
AB3ACB7114C2361100D7D192 /* preferencesWindowDelegate.mm */,
ABAE2F7A18682B6C00C92F4F /* Slot2WindowDelegate.mm */,
ABA0356F169127C000817C69 /* troubleshootingWindowDelegate.mm */,
);
path = userinterface;
@ -1923,6 +1977,10 @@
ABC3AF2C14B7F06900D5B13D /* Icon_VolumeMute_16x16.png */,
ABC3AF2D14B7F06900D5B13D /* Icon_VolumeOneThird_16x16.png */,
ABC3AF2E14B7F06900D5B13D /* Icon_VolumeTwoThird_16x16.png */,
AB142025186E2CD80015D52F /* Image_MemoryExpansionPak.png */,
AB8FFE491872032B00C10085 /* Image_PaddleController.png */,
AB8C6CBE186A950C00E3EC64 /* Image_PassME.png */,
ABAE30BA1869484F00C92F4F /* Image_Piano.png */,
AB0F297914BE70BC009ABC6F /* VideoFilterPreview_64x64.png */,
);
name = Images;
@ -2535,6 +2593,10 @@
AB2A99EC1725F00F0062C1A1 /* README.MAC in Resources */,
AB2A99ED1725F00F0062C1A1 /* AppIcon_FirmwareConfig.icns in Resources */,
AB2A99EE1725F00F0062C1A1 /* DisplayWindow.xib in Resources */,
ABAE30BF1869484F00C92F4F /* Image_Piano.png in Resources */,
AB8C6CC3186A950C00E3EC64 /* Image_PassME.png in Resources */,
AB14202A186E2CD80015D52F /* Image_MemoryExpansionPak.png in Resources */,
AB8FFE4E1872032B00C10085 /* Image_PaddleController.png in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -2614,6 +2676,10 @@
AB2F3BC215CF9C6000858373 /* README.MAC in Resources */,
AB2F3BC315CF9C6000858373 /* AppIcon_FirmwareConfig.icns in Resources */,
AB700DBA16CDDBC400FBD336 /* DisplayWindow.xib in Resources */,
ABAE30BB1869484F00C92F4F /* Image_Piano.png in Resources */,
AB8C6CBF186A950C00E3EC64 /* Image_PassME.png in Resources */,
AB142026186E2CD80015D52F /* Image_MemoryExpansionPak.png in Resources */,
AB8FFE4A1872032B00C10085 /* Image_PaddleController.png in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -2693,6 +2759,10 @@
AB3ACC4914C24D5400D7D192 /* README.MAC in Resources */,
AB75226F14C7BB51009B97B3 /* AppIcon_FirmwareConfig.icns in Resources */,
AB700DBB16CDDBC400FBD336 /* DisplayWindow.xib in Resources */,
ABAE30BC1869484F00C92F4F /* Image_Piano.png in Resources */,
AB8C6CC0186A950C00E3EC64 /* Image_PassME.png in Resources */,
AB142027186E2CD80015D52F /* Image_MemoryExpansionPak.png in Resources */,
AB8FFE4B1872032B00C10085 /* Image_PaddleController.png in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -2772,6 +2842,10 @@
AB73A9B01507C9F500A310C8 /* README.MAC in Resources */,
AB73A9B11507C9F500A310C8 /* AppIcon_FirmwareConfig.icns in Resources */,
AB700DBD16CDDBC400FBD336 /* DisplayWindow.xib in Resources */,
ABAE30BE1869484F00C92F4F /* Image_Piano.png in Resources */,
AB8C6CC2186A950C00E3EC64 /* Image_PassME.png in Resources */,
AB142029186E2CD80015D52F /* Image_MemoryExpansionPak.png in Resources */,
AB8FFE4D1872032B00C10085 /* Image_PaddleController.png in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -2851,6 +2925,10 @@
ABAD0FB815ACE7A00000EC47 /* README.MAC in Resources */,
ABAD0FB915ACE7A00000EC47 /* AppIcon_FirmwareConfig.icns in Resources */,
AB700DBC16CDDBC400FBD336 /* DisplayWindow.xib in Resources */,
ABAE30BD1869484F00C92F4F /* Image_Piano.png in Resources */,
AB8C6CC1186A950C00E3EC64 /* Image_PassME.png in Resources */,
AB142028186E2CD80015D52F /* Image_MemoryExpansionPak.png in Resources */,
AB8FFE4C1872032B00C10085 /* Image_PaddleController.png in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -3142,6 +3220,8 @@
AB126D0B182ECB9500EBCF22 /* slot2_passme.cpp in Sources */,
AB53518318313E3100CCD532 /* slot2_auto.cpp in Sources */,
AB53518A18313E4E00CCD532 /* slot2.cpp in Sources */,
ABAE2F7F18682B6C00C92F4F /* Slot2WindowDelegate.mm in Sources */,
ABAE2F8818682B8F00C92F4F /* cocoa_slot2.mm in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -3282,6 +3362,8 @@
AB126D08182ECB9500EBCF22 /* slot2_passme.cpp in Sources */,
AB53518018313E3100CCD532 /* slot2_auto.cpp in Sources */,
AB53518718313E4E00CCD532 /* slot2.cpp in Sources */,
ABAE2F7B18682B6C00C92F4F /* Slot2WindowDelegate.mm in Sources */,
ABAE2F8418682B8F00C92F4F /* cocoa_slot2.mm in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -3346,7 +3428,6 @@
AB711F251481C35F009011C8 /* slot2_expMemory.cpp in Sources */,
AB711F261481C35F009011C8 /* slot2_gbagame.cpp in Sources */,
AB711F271481C35F009011C8 /* slot2_guitarGrip.cpp in Sources */,
AB711F281481C35F009011C8 /* slot2_mpcf.cpp in Sources */,
AB711F291481C35F009011C8 /* slot2_none.cpp in Sources */,
AB711F2A1481C35F009011C8 /* slot2_paddle.cpp in Sources */,
AB711F2B1481C35F009011C8 /* slot2_piano.cpp in Sources */,
@ -3452,6 +3533,9 @@
AB126D07182ECB9500EBCF22 /* slot2_passme.cpp in Sources */,
AB53517F18313E3100CCD532 /* slot2_auto.cpp in Sources */,
AB53518618313E4E00CCD532 /* slot2.cpp in Sources */,
ABAE2F7C18682B6C00C92F4F /* Slot2WindowDelegate.mm in Sources */,
ABAE2F8518682B8F00C92F4F /* cocoa_slot2.mm in Sources */,
AB8FFCB4186F8E5400C10085 /* slot2_mpcf.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -3622,6 +3706,8 @@
AB126D0A182ECB9500EBCF22 /* slot2_passme.cpp in Sources */,
AB53518218313E3100CCD532 /* slot2_auto.cpp in Sources */,
AB53518918313E4E00CCD532 /* slot2.cpp in Sources */,
ABAE2F7E18682B6C00C92F4F /* Slot2WindowDelegate.mm in Sources */,
ABAE2F8718682B8F00C92F4F /* cocoa_slot2.mm in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -3762,6 +3848,8 @@
AB126D09182ECB9500EBCF22 /* slot2_passme.cpp in Sources */,
AB53518118313E3100CCD532 /* slot2_auto.cpp in Sources */,
AB53518818313E4E00CCD532 /* slot2.cpp in Sources */,
ABAE2F7D18682B6C00C92F4F /* Slot2WindowDelegate.mm in Sources */,
ABAE2F8618682B8F00C92F4F /* cocoa_slot2.mm in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};

View File

@ -541,6 +541,21 @@
ABC5720D1344346600E7B0B1 /* AppKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 29B97324FDCFA39411CA2CEA /* AppKit.framework */; };
ABC572101344347000E7B0B1 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 29B97325FDCFA39411CA2CEA /* Foundation.framework */; };
ABC719E2138CB25E002827A9 /* DefaultKeyMappings.plist in Resources */ = {isa = PBXBuildFile; fileRef = ABC719E1138CB25E002827A9 /* DefaultKeyMappings.plist */; };
ABC9ED16187501FD001A7D02 /* Slot2WindowDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABC9ED15187501FD001A7D02 /* Slot2WindowDelegate.mm */; };
ABC9ED17187501FD001A7D02 /* Slot2WindowDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABC9ED15187501FD001A7D02 /* Slot2WindowDelegate.mm */; };
ABC9ED1C18750221001A7D02 /* Image_MemoryExpansionPak.png in Resources */ = {isa = PBXBuildFile; fileRef = ABC9ED1818750221001A7D02 /* Image_MemoryExpansionPak.png */; };
ABC9ED1D18750221001A7D02 /* Image_MemoryExpansionPak.png in Resources */ = {isa = PBXBuildFile; fileRef = ABC9ED1818750221001A7D02 /* Image_MemoryExpansionPak.png */; };
ABC9ED1E18750221001A7D02 /* Image_PaddleController.png in Resources */ = {isa = PBXBuildFile; fileRef = ABC9ED1918750221001A7D02 /* Image_PaddleController.png */; };
ABC9ED1F18750221001A7D02 /* Image_PaddleController.png in Resources */ = {isa = PBXBuildFile; fileRef = ABC9ED1918750221001A7D02 /* Image_PaddleController.png */; };
ABC9ED2018750221001A7D02 /* Image_PassME.png in Resources */ = {isa = PBXBuildFile; fileRef = ABC9ED1A18750221001A7D02 /* Image_PassME.png */; };
ABC9ED2118750221001A7D02 /* Image_PassME.png in Resources */ = {isa = PBXBuildFile; fileRef = ABC9ED1A18750221001A7D02 /* Image_PassME.png */; };
ABC9ED2218750221001A7D02 /* Image_Piano.png in Resources */ = {isa = PBXBuildFile; fileRef = ABC9ED1B18750221001A7D02 /* Image_Piano.png */; };
ABC9ED2318750221001A7D02 /* Image_Piano.png in Resources */ = {isa = PBXBuildFile; fileRef = ABC9ED1B18750221001A7D02 /* Image_Piano.png */; };
ABC9ED2618750244001A7D02 /* cocoa_slot2.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABC9ED2518750244001A7D02 /* cocoa_slot2.mm */; };
ABC9ED2718750244001A7D02 /* cocoa_slot2.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABC9ED2518750244001A7D02 /* cocoa_slot2.mm */; };
ABC9ED2818750244001A7D02 /* cocoa_slot2.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABC9ED2518750244001A7D02 /* cocoa_slot2.mm */; };
ABC9ED2A1875028E001A7D02 /* ForceFeedback.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ABC9ED291875028E001A7D02 /* ForceFeedback.framework */; };
ABC9ED2B187502A2001A7D02 /* ForceFeedback.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ABC9ED291875028E001A7D02 /* ForceFeedback.framework */; };
ABD1041C1346652500AF11D1 /* cocoa_input.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABD104111346652500AF11D1 /* cocoa_input.mm */; };
ABD1041D1346652500AF11D1 /* cocoa_core.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABD104121346652500AF11D1 /* cocoa_core.mm */; };
ABD1041E1346652500AF11D1 /* cocoa_rom.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABD104131346652500AF11D1 /* cocoa_rom.mm */; };
@ -904,6 +919,15 @@
ABC570D0134431CE00E7B0B1 /* AudioUnit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = System/Library/Frameworks/AudioUnit.framework; sourceTree = SDKROOT; };
ABC570D4134431DA00E7B0B1 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; };
ABC719E1138CB25E002827A9 /* DefaultKeyMappings.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = DefaultKeyMappings.plist; sourceTree = "<group>"; };
ABC9ED14187501FD001A7D02 /* Slot2WindowDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Slot2WindowDelegate.h; sourceTree = "<group>"; };
ABC9ED15187501FD001A7D02 /* Slot2WindowDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = Slot2WindowDelegate.mm; sourceTree = "<group>"; };
ABC9ED1818750221001A7D02 /* Image_MemoryExpansionPak.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Image_MemoryExpansionPak.png; path = images/Image_MemoryExpansionPak.png; sourceTree = "<group>"; };
ABC9ED1918750221001A7D02 /* Image_PaddleController.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Image_PaddleController.png; path = images/Image_PaddleController.png; sourceTree = "<group>"; };
ABC9ED1A18750221001A7D02 /* Image_PassME.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Image_PassME.png; path = images/Image_PassME.png; sourceTree = "<group>"; };
ABC9ED1B18750221001A7D02 /* Image_Piano.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Image_Piano.png; path = images/Image_Piano.png; sourceTree = "<group>"; };
ABC9ED2418750244001A7D02 /* cocoa_slot2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cocoa_slot2.h; sourceTree = "<group>"; };
ABC9ED2518750244001A7D02 /* cocoa_slot2.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = cocoa_slot2.mm; sourceTree = "<group>"; };
ABC9ED291875028E001A7D02 /* ForceFeedback.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ForceFeedback.framework; path = System/Library/Frameworks/ForceFeedback.framework; sourceTree = SDKROOT; };
ABD103FE1346652500AF11D1 /* cocoa_core.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cocoa_core.h; sourceTree = "<group>"; };
ABD103FF1346652500AF11D1 /* cocoa_input.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cocoa_input.h; sourceTree = "<group>"; };
ABD104001346652500AF11D1 /* cocoa_rom.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cocoa_rom.h; sourceTree = "<group>"; };
@ -1135,12 +1159,13 @@
ABC5720D1344346600E7B0B1 /* AppKit.framework in Frameworks */,
ABACB8DD1710B656003B845D /* AudioToolbox.framework in Frameworks */,
ABC570D1134431CE00E7B0B1 /* AudioUnit.framework in Frameworks */,
AB3701E5173A3FBF006E573E /* Carbon.framework in Frameworks */,
8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */,
ABC572101344347000E7B0B1 /* Foundation.framework in Frameworks */,
ABC9ED2B187502A2001A7D02 /* ForceFeedback.framework in Frameworks */,
AB350BA51478AC96007165AC /* IOKit.framework in Frameworks */,
ABC570D5134431DA00E7B0B1 /* OpenGL.framework in Frameworks */,
AB4676F314AB12D60002FF94 /* libz.dylib in Frameworks */,
AB3701E5173A3FBF006E573E /* Carbon.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -1154,6 +1179,7 @@
AB796D6715CDCBA200C59155 /* AudioUnit.framework in Frameworks */,
AB74EC8A1738499C0026C41E /* Carbon.framework in Frameworks */,
AB796D6815CDCBA200C59155 /* Cocoa.framework in Frameworks */,
ABC9ED2A1875028E001A7D02 /* ForceFeedback.framework in Frameworks */,
AB796D6915CDCBA200C59155 /* Foundation.framework in Frameworks */,
AB796D6A15CDCBA200C59155 /* IOKit.framework in Frameworks */,
AB796D6B15CDCBA200C59155 /* OpenGL.framework in Frameworks */,
@ -1202,6 +1228,7 @@
ABD103FF1346652500AF11D1 /* cocoa_input.h */,
AB3E34C7134AF4500056477A /* cocoa_output.h */,
ABD104001346652500AF11D1 /* cocoa_rom.h */,
ABC9ED2418750244001A7D02 /* cocoa_slot2.h */,
AB80E050142BC4FA00A52038 /* cocoa_util.h */,
ABE5DFE3143FB1DA00835AD8 /* cocoa_videofilter.h */,
AB1B9E611501A78000464647 /* coreaudiosound.h */,
@ -1217,6 +1244,7 @@
ABD104111346652500AF11D1 /* cocoa_input.mm */,
AB3E34C8134AF4500056477A /* cocoa_output.mm */,
ABD104131346652500AF11D1 /* cocoa_rom.mm */,
ABC9ED2518750244001A7D02 /* cocoa_slot2.mm */,
AB80E04C142BC4A800A52038 /* cocoa_util.mm */,
ABE5DFE4143FB1DA00835AD8 /* cocoa_videofilter.mm */,
);
@ -1232,6 +1260,7 @@
ABC570D0134431CE00E7B0B1 /* AudioUnit.framework */,
AB74EC891738499C0026C41E /* Carbon.framework */,
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */,
ABC9ED291875028E001A7D02 /* ForceFeedback.framework */,
29B97325FDCFA39411CA2CEA /* Foundation.framework */,
AB350BA41478AC96007165AC /* IOKit.framework */,
ABC570D4134431DA00E7B0B1 /* OpenGL.framework */,
@ -1325,6 +1354,7 @@
AB3ACB6E14C2361100D7D192 /* inputPrefsView.h */,
AB01005C170D07AF00D70FBE /* InputProfileController.h */,
AB3ACB7014C2361100D7D192 /* preferencesWindowDelegate.h */,
ABC9ED14187501FD001A7D02 /* Slot2WindowDelegate.h */,
ABF2B9F81690412A000FF7C0 /* troubleshootingWindowDelegate.h */,
AB3ACB6714C2361100D7D192 /* appDelegate.mm */,
AB3ACB6914C2361100D7D192 /* cheatWindowDelegate.mm */,
@ -1335,6 +1365,7 @@
AB3ACB6F14C2361100D7D192 /* inputPrefsView.mm */,
AB01005D170D07B000D70FBE /* InputProfileController.mm */,
AB3ACB7114C2361100D7D192 /* preferencesWindowDelegate.mm */,
ABC9ED15187501FD001A7D02 /* Slot2WindowDelegate.mm */,
ABF2B9FA16904133000FF7C0 /* troubleshootingWindowDelegate.mm */,
);
path = userinterface;
@ -1513,6 +1544,10 @@
ABC3AF2C14B7F06900D5B13D /* Icon_VolumeMute_16x16.png */,
ABC3AF2D14B7F06900D5B13D /* Icon_VolumeOneThird_16x16.png */,
ABC3AF2E14B7F06900D5B13D /* Icon_VolumeTwoThird_16x16.png */,
ABC9ED1818750221001A7D02 /* Image_MemoryExpansionPak.png */,
ABC9ED1918750221001A7D02 /* Image_PaddleController.png */,
ABC9ED1A18750221001A7D02 /* Image_PassME.png */,
ABC9ED1B18750221001A7D02 /* Image_Piano.png */,
AB0F297914BE70BC009ABC6F /* VideoFilterPreview_64x64.png */,
);
name = Images;
@ -2008,6 +2043,10 @@
AB3ACC4314C24D5400D7D192 /* README.MAC in Resources */,
AB75226E14C7BB51009B97B3 /* AppIcon_FirmwareConfig.icns in Resources */,
AB8967DE16D2ED2700F826F1 /* DisplayWindow.xib in Resources */,
ABC9ED1D18750221001A7D02 /* Image_MemoryExpansionPak.png in Resources */,
ABC9ED1F18750221001A7D02 /* Image_PaddleController.png in Resources */,
ABC9ED2118750221001A7D02 /* Image_PassME.png in Resources */,
ABC9ED2318750221001A7D02 /* Image_Piano.png in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -2087,6 +2126,10 @@
AB796CEC15CDCBA200C59155 /* README.MAC in Resources */,
AB796CED15CDCBA200C59155 /* AppIcon_FirmwareConfig.icns in Resources */,
AB8967DD16D2ED2700F826F1 /* DisplayWindow.xib in Resources */,
ABC9ED1C18750221001A7D02 /* Image_MemoryExpansionPak.png in Resources */,
ABC9ED1E18750221001A7D02 /* Image_PaddleController.png in Resources */,
ABC9ED2018750221001A7D02 /* Image_PassME.png in Resources */,
ABC9ED2218750221001A7D02 /* Image_Piano.png in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -2359,6 +2402,8 @@
AB107686182ECB29000D6F67 /* slot2_passme.cpp in Sources */,
AB1B702D18313D7700E64141 /* slot2_auto.cpp in Sources */,
AB1B703118313D9000E64141 /* slot2.cpp in Sources */,
ABC9ED17187501FD001A7D02 /* Slot2WindowDelegate.mm in Sources */,
ABC9ED2718750244001A7D02 /* cocoa_slot2.mm in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -2530,6 +2575,8 @@
AB107685182ECB29000D6F67 /* slot2_passme.cpp in Sources */,
AB1B702C18313D7700E64141 /* slot2_auto.cpp in Sources */,
AB1B703018313D9000E64141 /* slot2.cpp in Sources */,
ABC9ED16187501FD001A7D02 /* Slot2WindowDelegate.mm in Sources */,
ABC9ED2618750244001A7D02 /* cocoa_slot2.mm in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -2691,6 +2738,7 @@
AB1B702E18313D7700E64141 /* slot2_auto.cpp in Sources */,
AB1B703218313D9000E64141 /* slot2.cpp in Sources */,
AB4806BC18472EF20085F59B /* cocoa_cheat.mm in Sources */,
ABC9ED2818750244001A7D02 /* cocoa_slot2.mm in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};

View File

@ -8,6 +8,8 @@
/* Begin PBXBuildFile section */
8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
AB0038A71872A96700B0B055 /* Image_PaddleController.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0038A61872A96700B0B055 /* Image_PaddleController.png */; };
AB0038A81872A96700B0B055 /* Image_PaddleController.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0038A61872A96700B0B055 /* Image_PaddleController.png */; };
AB00E87B14205EAE00DE561F /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = AB00E87914205EAE00DE561F /* InfoPlist.strings */; };
AB00E87E14205EBC00DE561F /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = AB00E87C14205EBC00DE561F /* MainMenu.xib */; };
AB01005E170D07B000D70FBE /* InputProfileController.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB01005D170D07B000D70FBE /* InputProfileController.mm */; };
@ -197,6 +199,19 @@
AB4FCEBD1692AB82000F498F /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB4FCEBC1692AB82000F498F /* Accelerate.framework */; };
AB4FCEBE1692AB82000F498F /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB4FCEBC1692AB82000F498F /* Accelerate.framework */; };
AB4FCEBF1692AB82000F498F /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB4FCEBC1692AB82000F498F /* Accelerate.framework */; };
AB5648FF186E6EA8002740F4 /* cocoa_slot2.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB5648FE186E6EA8002740F4 /* cocoa_slot2.mm */; };
AB564900186E6EA8002740F4 /* cocoa_slot2.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB5648FE186E6EA8002740F4 /* cocoa_slot2.mm */; };
AB564901186E6EA8002740F4 /* cocoa_slot2.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB5648FE186E6EA8002740F4 /* cocoa_slot2.mm */; };
AB564904186E6EBC002740F4 /* Slot2WindowDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB564903186E6EBC002740F4 /* Slot2WindowDelegate.mm */; };
AB564905186E6EBC002740F4 /* Slot2WindowDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB564903186E6EBC002740F4 /* Slot2WindowDelegate.mm */; };
AB564907186E6F0C002740F4 /* ForceFeedback.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB564906186E6F0C002740F4 /* ForceFeedback.framework */; };
AB564908186E6F1F002740F4 /* ForceFeedback.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB564906186E6F0C002740F4 /* ForceFeedback.framework */; };
AB564910186E6F67002740F4 /* Image_MemoryExpansionPak.png in Resources */ = {isa = PBXBuildFile; fileRef = AB564909186E6F67002740F4 /* Image_MemoryExpansionPak.png */; };
AB564911186E6F67002740F4 /* Image_MemoryExpansionPak.png in Resources */ = {isa = PBXBuildFile; fileRef = AB564909186E6F67002740F4 /* Image_MemoryExpansionPak.png */; };
AB564912186E6F67002740F4 /* Image_PassME.png in Resources */ = {isa = PBXBuildFile; fileRef = AB56490A186E6F67002740F4 /* Image_PassME.png */; };
AB564913186E6F67002740F4 /* Image_PassME.png in Resources */ = {isa = PBXBuildFile; fileRef = AB56490A186E6F67002740F4 /* Image_PassME.png */; };
AB564914186E6F67002740F4 /* Image_Piano.png in Resources */ = {isa = PBXBuildFile; fileRef = AB56490B186E6F67002740F4 /* Image_Piano.png */; };
AB564915186E6F67002740F4 /* Image_Piano.png in Resources */ = {isa = PBXBuildFile; fileRef = AB56490B186E6F67002740F4 /* Image_Piano.png */; };
AB5785F817175F16002C5FC7 /* cocoa_core.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABD104121346652500AF11D1 /* cocoa_core.mm */; };
AB5785F9171760D2002C5FC7 /* cocoa_output.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB3E34C8134AF4500056477A /* cocoa_output.mm */; };
AB5785FD17176AFC002C5FC7 /* OpenEmuBase.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB5785FC17176AFC002C5FC7 /* OpenEmuBase.framework */; };
@ -673,6 +688,7 @@
29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
8D1107320486CEB800E47090 /* DeSmuME (Debug).app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "DeSmuME (Debug).app"; sourceTree = BUILT_PRODUCTS_DIR; };
AB0038A61872A96700B0B055 /* Image_PaddleController.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Image_PaddleController.png; path = images/Image_PaddleController.png; sourceTree = "<group>"; };
AB00E87A14205EAE00DE561F /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = translations/English.lproj/InfoPlist.strings; sourceTree = "<group>"; };
AB00E87D14205EBC00DE561F /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = translations/English.lproj/MainMenu.xib; sourceTree = "<group>"; };
AB00E89114205ECC00DE561F /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = English; path = translations/English.lproj/Localizable.strings; sourceTree = "<group>"; };
@ -830,6 +846,14 @@
AB405676169F5DCC0016AC3E /* x86util.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = x86util.cpp; sourceTree = "<group>"; };
AB405677169F5DCC0016AC3E /* x86util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = x86util.h; sourceTree = "<group>"; };
AB4FCEBC1692AB82000F498F /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; };
AB5648FD186E6EA8002740F4 /* cocoa_slot2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cocoa_slot2.h; sourceTree = "<group>"; };
AB5648FE186E6EA8002740F4 /* cocoa_slot2.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = cocoa_slot2.mm; sourceTree = "<group>"; };
AB564902186E6EBC002740F4 /* Slot2WindowDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Slot2WindowDelegate.h; sourceTree = "<group>"; };
AB564903186E6EBC002740F4 /* Slot2WindowDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = Slot2WindowDelegate.mm; sourceTree = "<group>"; };
AB564906186E6F0C002740F4 /* ForceFeedback.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ForceFeedback.framework; path = System/Library/Frameworks/ForceFeedback.framework; sourceTree = SDKROOT; };
AB564909186E6F67002740F4 /* Image_MemoryExpansionPak.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Image_MemoryExpansionPak.png; path = images/Image_MemoryExpansionPak.png; sourceTree = "<group>"; };
AB56490A186E6F67002740F4 /* Image_PassME.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Image_PassME.png; path = images/Image_PassME.png; sourceTree = "<group>"; };
AB56490B186E6F67002740F4 /* Image_Piano.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Image_Piano.png; path = images/Image_Piano.png; sourceTree = "<group>"; };
AB5785FC17176AFC002C5FC7 /* OpenEmuBase.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenEmuBase.framework; path = openemu/OpenEmuBase.framework; sourceTree = "<group>"; };
AB58F32B1364F44B0074C376 /* cocoa_file.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cocoa_file.h; sourceTree = "<group>"; };
AB58F32C1364F44B0074C376 /* cocoa_file.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = cocoa_file.mm; sourceTree = "<group>"; };
@ -1135,12 +1159,13 @@
ABC5720D1344346600E7B0B1 /* AppKit.framework in Frameworks */,
ABACB8DD1710B656003B845D /* AudioToolbox.framework in Frameworks */,
ABC570D1134431CE00E7B0B1 /* AudioUnit.framework in Frameworks */,
AB3701E5173A3FBF006E573E /* Carbon.framework in Frameworks */,
8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */,
AB564908186E6F1F002740F4 /* ForceFeedback.framework in Frameworks */,
ABC572101344347000E7B0B1 /* Foundation.framework in Frameworks */,
AB350BA51478AC96007165AC /* IOKit.framework in Frameworks */,
ABC570D5134431DA00E7B0B1 /* OpenGL.framework in Frameworks */,
AB4676F314AB12D60002FF94 /* libz.dylib in Frameworks */,
AB3701E5173A3FBF006E573E /* Carbon.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -1154,6 +1179,7 @@
AB796D6715CDCBA200C59155 /* AudioUnit.framework in Frameworks */,
AB74EC8A1738499C0026C41E /* Carbon.framework in Frameworks */,
AB796D6815CDCBA200C59155 /* Cocoa.framework in Frameworks */,
AB564907186E6F0C002740F4 /* ForceFeedback.framework in Frameworks */,
AB796D6915CDCBA200C59155 /* Foundation.framework in Frameworks */,
AB796D6A15CDCBA200C59155 /* IOKit.framework in Frameworks */,
AB796D6B15CDCBA200C59155 /* OpenGL.framework in Frameworks */,
@ -1202,6 +1228,7 @@
ABD103FF1346652500AF11D1 /* cocoa_input.h */,
AB3E34C7134AF4500056477A /* cocoa_output.h */,
ABD104001346652500AF11D1 /* cocoa_rom.h */,
AB5648FD186E6EA8002740F4 /* cocoa_slot2.h */,
AB80E050142BC4FA00A52038 /* cocoa_util.h */,
ABE5DFE3143FB1DA00835AD8 /* cocoa_videofilter.h */,
AB1B9E611501A78000464647 /* coreaudiosound.h */,
@ -1217,6 +1244,7 @@
ABD104111346652500AF11D1 /* cocoa_input.mm */,
AB3E34C8134AF4500056477A /* cocoa_output.mm */,
ABD104131346652500AF11D1 /* cocoa_rom.mm */,
AB5648FE186E6EA8002740F4 /* cocoa_slot2.mm */,
AB80E04C142BC4A800A52038 /* cocoa_util.mm */,
ABE5DFE4143FB1DA00835AD8 /* cocoa_videofilter.mm */,
);
@ -1232,6 +1260,7 @@
ABC570D0134431CE00E7B0B1 /* AudioUnit.framework */,
AB74EC891738499C0026C41E /* Carbon.framework */,
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */,
AB564906186E6F0C002740F4 /* ForceFeedback.framework */,
29B97325FDCFA39411CA2CEA /* Foundation.framework */,
AB350BA41478AC96007165AC /* IOKit.framework */,
ABC570D4134431DA00E7B0B1 /* OpenGL.framework */,
@ -1325,6 +1354,7 @@
AB3ACB6E14C2361100D7D192 /* inputPrefsView.h */,
AB01005C170D07AF00D70FBE /* InputProfileController.h */,
AB3ACB7014C2361100D7D192 /* preferencesWindowDelegate.h */,
AB564902186E6EBC002740F4 /* Slot2WindowDelegate.h */,
ABF2B9F81690412A000FF7C0 /* troubleshootingWindowDelegate.h */,
AB3ACB6714C2361100D7D192 /* appDelegate.mm */,
AB3ACB6914C2361100D7D192 /* cheatWindowDelegate.mm */,
@ -1335,6 +1365,7 @@
AB3ACB6F14C2361100D7D192 /* inputPrefsView.mm */,
AB01005D170D07B000D70FBE /* InputProfileController.mm */,
AB3ACB7114C2361100D7D192 /* preferencesWindowDelegate.mm */,
AB564903186E6EBC002740F4 /* Slot2WindowDelegate.mm */,
ABF2B9FA16904133000FF7C0 /* troubleshootingWindowDelegate.mm */,
);
path = userinterface;
@ -1513,6 +1544,10 @@
ABC3AF2C14B7F06900D5B13D /* Icon_VolumeMute_16x16.png */,
ABC3AF2D14B7F06900D5B13D /* Icon_VolumeOneThird_16x16.png */,
ABC3AF2E14B7F06900D5B13D /* Icon_VolumeTwoThird_16x16.png */,
AB564909186E6F67002740F4 /* Image_MemoryExpansionPak.png */,
AB0038A61872A96700B0B055 /* Image_PaddleController.png */,
AB56490A186E6F67002740F4 /* Image_PassME.png */,
AB56490B186E6F67002740F4 /* Image_Piano.png */,
AB0F297914BE70BC009ABC6F /* VideoFilterPreview_64x64.png */,
);
name = Images;
@ -1952,6 +1987,7 @@
ABB97878144E89CC00793FA3 /* Icon_DeSmuME_32x32.png in Resources */,
AB350D3B147A1D93007165AC /* HID_usage_strings.plist in Resources */,
ABBF04A514B515F300E505A0 /* AppIcon_ROMCheats.icns in Resources */,
AB564915186E6F67002740F4 /* Image_Piano.png in Resources */,
ABC3AF2F14B7F06900D5B13D /* Icon_VolumeFull_16x16.png in Resources */,
ABC3AF3014B7F06900D5B13D /* Icon_VolumeMute_16x16.png in Resources */,
ABC3AF3114B7F06900D5B13D /* Icon_VolumeOneThird_16x16.png in Resources */,
@ -1974,11 +2010,13 @@
AB0F294314BE6FA7009ABC6F /* ColorSwatch_Red_16x16.png in Resources */,
AB0F294414BE6FA7009ABC6F /* ColorSwatch_SeaGreen_16x16.png in Resources */,
AB0F294514BE6FA7009ABC6F /* ColorSwatch_Turquoise_16x16.png in Resources */,
AB564911186E6F67002740F4 /* Image_MemoryExpansionPak.png in Resources */,
AB0F294614BE6FA7009ABC6F /* ColorSwatch_Violet_16x16.png in Resources */,
AB0F294714BE6FA7009ABC6F /* ColorSwatch_Yellow_16x16.png in Resources */,
AB0F296D14BE705D009ABC6F /* Icon_ActionReplay_128x128.png in Resources */,
AB0F296E14BE705D009ABC6F /* Icon_CodeBreaker_128x128.png in Resources */,
AB0F297A14BE70BC009ABC6F /* VideoFilterPreview_64x64.png in Resources */,
AB564913186E6F67002740F4 /* Image_PassME.png in Resources */,
AB0F298C14BE71E0009ABC6F /* Icon_ArrowDown_420x420.png in Resources */,
AB0F298D14BE71E0009ABC6F /* Icon_ArrowLeft_420x420.png in Resources */,
AB0F298E14BE71E0009ABC6F /* Icon_ArrowRight_420x420.png in Resources */,
@ -1991,6 +2029,7 @@
AB0F29AB14BE7213009ABC6F /* Icon_DSButtonSelect_420x420.png in Resources */,
AB0F29AC14BE7213009ABC6F /* Icon_DSButtonStart_420x420.png in Resources */,
AB0F29AD14BE7213009ABC6F /* Icon_DSButtonX_420x420.png in Resources */,
AB0038A81872A96700B0B055 /* Image_PaddleController.png in Resources */,
AB0F29AE14BE7213009ABC6F /* Icon_DSButtonY_420x420.png in Resources */,
AB0F29AF14BE7213009ABC6F /* Icon_Emulation_420x420.png in Resources */,
AB0F29B014BE7213009ABC6F /* Icon_Input_420x420.png in Resources */,
@ -2031,6 +2070,7 @@
AB796CB415CDCBA200C59155 /* Icon_DeSmuME_32x32.png in Resources */,
AB796CB515CDCBA200C59155 /* HID_usage_strings.plist in Resources */,
AB796CB615CDCBA200C59155 /* AppIcon_ROMCheats.icns in Resources */,
AB564914186E6F67002740F4 /* Image_Piano.png in Resources */,
AB796CB715CDCBA200C59155 /* Icon_VolumeFull_16x16.png in Resources */,
AB796CB815CDCBA200C59155 /* Icon_VolumeMute_16x16.png in Resources */,
AB796CB915CDCBA200C59155 /* Icon_VolumeOneThird_16x16.png in Resources */,
@ -2053,11 +2093,13 @@
AB796CCA15CDCBA200C59155 /* ColorSwatch_Red_16x16.png in Resources */,
AB796CCB15CDCBA200C59155 /* ColorSwatch_SeaGreen_16x16.png in Resources */,
AB796CCC15CDCBA200C59155 /* ColorSwatch_Turquoise_16x16.png in Resources */,
AB564910186E6F67002740F4 /* Image_MemoryExpansionPak.png in Resources */,
AB796CCD15CDCBA200C59155 /* ColorSwatch_Violet_16x16.png in Resources */,
AB796CCE15CDCBA200C59155 /* ColorSwatch_Yellow_16x16.png in Resources */,
AB796CCF15CDCBA200C59155 /* Icon_ActionReplay_128x128.png in Resources */,
AB796CD015CDCBA200C59155 /* Icon_CodeBreaker_128x128.png in Resources */,
AB796CD115CDCBA200C59155 /* VideoFilterPreview_64x64.png in Resources */,
AB564912186E6F67002740F4 /* Image_PassME.png in Resources */,
AB796CD215CDCBA200C59155 /* Icon_ArrowDown_420x420.png in Resources */,
AB796CD315CDCBA200C59155 /* Icon_ArrowLeft_420x420.png in Resources */,
AB796CD415CDCBA200C59155 /* Icon_ArrowRight_420x420.png in Resources */,
@ -2070,6 +2112,7 @@
AB796CDB15CDCBA200C59155 /* Icon_DSButtonSelect_420x420.png in Resources */,
AB796CDC15CDCBA200C59155 /* Icon_DSButtonStart_420x420.png in Resources */,
AB796CDD15CDCBA200C59155 /* Icon_DSButtonX_420x420.png in Resources */,
AB0038A71872A96700B0B055 /* Image_PaddleController.png in Resources */,
AB796CDE15CDCBA200C59155 /* Icon_DSButtonY_420x420.png in Resources */,
AB796CDF15CDCBA200C59155 /* Icon_Emulation_420x420.png in Resources */,
AB796CE015CDCBA200C59155 /* Icon_Input_420x420.png in Resources */,
@ -2267,6 +2310,7 @@
ABD1FF151345AC9C00AF11D1 /* slot2_rumblepak.cpp in Sources */,
ABD1041F1346652500AF11D1 /* sndOSX.cpp in Sources */,
AB1F468413A0ADE400B80DE6 /* SndOut.cpp in Sources */,
AB564905186E6EBC002740F4 /* Slot2WindowDelegate.mm in Sources */,
ABAD3E7813AF1D6D00502E1E /* SoundTouch.cpp in Sources */,
AB9038B017C5ED2200F410BD /* slot1_retail_auto.cpp in Sources */,
ABD1FEFA1345AC8400AF11D1 /* SPU.cpp in Sources */,
@ -2342,6 +2386,7 @@
AB405682169F5DCC0016AC3E /* x86compilerfunc.cpp in Sources */,
AB405685169F5DCC0016AC3E /* x86compileritem.cpp in Sources */,
AB405688169F5DCC0016AC3E /* x86cpuinfo.cpp in Sources */,
AB564900186E6EA8002740F4 /* cocoa_slot2.mm in Sources */,
AB40568B169F5DCC0016AC3E /* x86defs.cpp in Sources */,
AB40568E169F5DCC0016AC3E /* x86func.cpp in Sources */,
AB405691169F5DCC0016AC3E /* x86operand.cpp in Sources */,
@ -2389,6 +2434,7 @@
AB796D0115CDCBA200C59155 /* dlditool.cpp in Sources */,
AB796D0215CDCBA200C59155 /* driver.cpp in Sources */,
AB796D0315CDCBA200C59155 /* emufat.cpp in Sources */,
AB564904186E6EBC002740F4 /* Slot2WindowDelegate.mm in Sources */,
AB9038B217C5ED2200F410BD /* slot1_retail_mcrom.cpp in Sources */,
AB796D0415CDCBA200C59155 /* emufile.cpp in Sources */,
AB796D0515CDCBA200C59155 /* fatdir.cpp in Sources */,
@ -2431,6 +2477,7 @@
AB796D2815CDCBA200C59155 /* slot1.cpp in Sources */,
AB796D2915CDCBA200C59155 /* slot1_none.cpp in Sources */,
AB2EE12C17D57ED500F68622 /* slot1_retail_mcrom_debug.cpp in Sources */,
AB5648FF186E6EA8002740F4 /* cocoa_slot2.mm in Sources */,
AB796D2A15CDCBA200C59155 /* slot1_r4.cpp in Sources */,
AB796D2C15CDCBA200C59155 /* slot1_retail_nand.cpp in Sources */,
AB796D2D15CDCBA200C59155 /* slot2_expMemory.cpp in Sources */,
@ -2537,6 +2584,7 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
AB564901186E6EA8002740F4 /* cocoa_slot2.mm in Sources */,
ABE9EEEB1501C78700D3FB19 /* fs-linux.cpp in Sources */,
ABCFA9F6178BDE920030C8BA /* encrypt.cpp in Sources */,
ABB3C66C1501C04F00E0C22E /* NDSGameCore.mm in Sources */,

View File

@ -33,6 +33,7 @@
<string>Enable/Disable Auto Frame Skip</string>
<string>Enable/Disable Cheats</string>
<string>Enable/Disable GPU State</string>
<string>Paddle</string>
</array>
<key>DefaultInputProfiles</key>
<array>
@ -410,6 +411,8 @@
<array/>
<key>Enable/Disable GPU State</key>
<array/>
<key>Paddle</key>
<array/>
</dict>
</dict>
</array>

View File

@ -1,6 +1,6 @@
/*
Copyright (C) 2011 Roger Manuel
Copyright (C) 2012-2013 DeSmuME team
Copyright (C) 2012-2014 DeSmuME Team
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -34,6 +34,10 @@
#define NSSTRING_TITLE_SELECT_ARM7_IMAGE_PANEL NSLocalizedString(@"Select ARM7 BIOS Image", nil)
#define NSSTRING_TITLE_SELECT_ARM9_IMAGE_PANEL NSLocalizedString(@"Select ARM9 BIOS Image", nil)
#define NSSTRING_TITLE_SELECT_FIRMWARE_IMAGE_PANEL NSLocalizedString(@"Select Firmware Image", nil)
#define NSSTRING_TITLE_SELECT_MPCF_FOLDER_PANEL NSLocalizedString(@"Select MPCF Folder", nil)
#define NSSTRING_TITLE_SELECT_MPCF_DISK_IMAGE_PANEL NSLocalizedString(@"Select MPCF Disk Image", nil)
#define NSSTRING_TITLE_CHOOSE_GBA_CARTRIDGE_PANEL NSLocalizedString(@"Choose GBA Cartridge", nil)
#define NSSTRING_TITLE_CHOOSE_GBA_SRAM_PANEL NSLocalizedString(@"Choose GBA SRAM File", nil)
#define NSSTRING_TITLE_SAVE_SCREENSHOT_PANEL NSLocalizedString(@"Save Screenshot", nil)
#define NSSTRING_TITLE_EXECUTE_CONTROL NSLocalizedString(@"Execute", nil)
@ -107,7 +111,22 @@
#define NSSTRING_STATUS_SLOT1_R4_INSERTED NSLocalizedString(@"R4 cartridge interface inserted.", nil)
#define NSSTRING_STATUS_SLOT1_STANDARD_INSERTED NSLocalizedString(@"Standard retail cartridge inserted.", nil)
#define NSSTRING_STATUS_AUTOLOAD_ROM_NAME_NONE NSLocalizedString(@"No ROM chosen.", nil)
#define NSSTRING_STATUS_SLOT2_LOADED_NONE NSLocalizedString(@"No SLOT-2 device loaded.", nil)
#define NSSTRING_STATUS_SLOT2_LOADED_AUTOMATIC NSLocalizedString(@"Loaded SLOT-2 device using automatic selection.\nSelected device type: %@", nil)
#define NSSTRING_STATUS_SLOT2_LOADED_MPCF_WITH_ROM NSLocalizedString(@"Compact flash device loaded with data from the ROM's directory.", nil)
#define NSSTRING_STATUS_SLOT2_LOADED_MPCF_DIRECTORY NSLocalizedString(@"Compact flash device loaded with data from directory path:\n%s", nil)
#define NSSTRING_STATUS_SLOT2_LOADED_MPCF_DISK_IMAGE NSLocalizedString(@"Compact flash device loaded using disk image:\n%s", nil)
#define NSSTRING_STATUS_SLOT2_LOADED_GBA_CART_WITH_SRAM NSLocalizedString(@"GBA cartridge loaded with SRAM file:\n%s", nil)
#define NSSTRING_STATUS_SLOT2_LOADED_GBA_CART_NO_SRAM NSLocalizedString(@"GBA cartridge loaded. (No associated SRAM file loaded.)", nil)
#define NSSTRING_STATUS_SLOT2_LOADED_GENERIC_DEVICE NSLocalizedString(@"Loaded SLOT-2 device:\n%@", nil)
#define NSSTRING_STATUS_SLOT2_LOADED_UNKNOWN NSLocalizedString(@"An unknown SLOT-2 device has been loaded.", nil)
#define NSSTRING_STATUS_NO_ROM_CHOSEN NSLocalizedString(@"No ROM chosen.", nil)
#define NSSTRING_STATUS_NO_FOLDER_CHOSEN NSLocalizedString(@"No folder chosen.", nil)
#define NSSTRING_STATUS_NO_DISK_IMAGE_CHOSEN NSLocalizedString(@"No disk image chosen.", nil)
#define NSSTRING_STATUS_NO_GBA_CART_CHOSEN NSLocalizedString(@"No GBA cartridge chosen.", nil)
#define NSSTRING_STATUS_NO_GBA_SRAM_CHOSEN NSLocalizedString(@"No GBA SRAM chosen.", nil)
#define NSSTRING_STATUS_NO_GBA_SRAM_FOUND NSLocalizedString(@"No GBA SRAM found.", nil)
#define NSSTRING_DISPLAYMODE_MAIN NSLocalizedString(@"Main", nil)
#define NSSTRING_DISPLAYMODE_TOUCH NSLocalizedString(@"Touch", nil)
@ -166,6 +185,8 @@
#define FILE_EXT_HW_IMAGE_FILE "bin"
#define FILE_EXT_ADVANSCENE_DB "xml"
#define FILE_EXT_R4_CHEAT_DB "dat"
#define FILE_EXT_GBA_ROM "gba"
#define FILE_EXT_GBA_SRAM "sav"
#define MAX_SAVESTATE_SLOTS 10
@ -225,6 +246,10 @@
#define COCOA_DIALOG_OK 1
#define COCOA_DIALOG_OPTION 2
#define RUMBLE_ITERATIONS_RUMBLE_PAK 2
#define RUMBLE_ITERATIONS_ENABLE 1
#define RUMBLE_ITERATIONS_TEST 3
enum
{
ROMAUTOLOADOPTION_LOAD_LAST = 0,
@ -233,6 +258,15 @@ enum
ROMAUTOLOADOPTION_CHOOSE_ROM = 10001
};
enum
{
MPCF_OPTION_LOAD_WITH_ROM = 0,
MPCF_OPTION_LOAD_DIRECTORY = 1,
MPCF_OPTION_LOAD_DISK_IMAGE = 2,
MPCF_ACTION_CHOOSE_DIRECTORY = 10000,
MPCF_ACTION_CHOOSE_DISK_IMAGE = 10001
};
enum
{
REASONFORCLOSE_NORMAL = 0,
@ -479,3 +513,9 @@ enum
MICMODE_PHYSICAL,
MICMODE_SINE_WAVE
};
enum
{
PADDLE_CONTROL_RELATIVE = 0,
PADDLE_CONTROL_DIRECT
};

View File

@ -1,6 +1,6 @@
/*
Copyright (C) 2011 Roger Manuel
Copyright (C) 2012-2013 DeSmuME team
Copyright (C) 2012-2014 DeSmuME Team
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -41,6 +41,25 @@ enum
DSControllerState_Touch,
DSControllerState_Microphone,
DSControllerState_GuitarGrip_Green,
DSControllerState_GuitarGrip_Red,
DSControllerState_GuitarGrip_Yellow,
DSControllerState_GuitarGrip_Blue,
DSControllerState_Piano_C,
DSControllerState_Piano_CSharp,
DSControllerState_Piano_D,
DSControllerState_Piano_DSharp,
DSControllerState_Piano_E,
DSControllerState_Piano_F,
DSControllerState_Piano_FSharp,
DSControllerState_Piano_G,
DSControllerState_Piano_GSharp,
DSControllerState_Piano_A,
DSControllerState_Piano_ASharp,
DSControllerState_Piano_B,
DSControllerState_Piano_HighC,
DSControllerState_Paddle,
DSControllerState_StatesCount
};

View File

@ -0,0 +1,64 @@
/*
Copyright (C) 2014 DeSmuME Team
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with the this software. If not, see <http://www.gnu.org/licenses/>.
*/
#import <Cocoa/Cocoa.h>
#include "../slot2.h"
#undef BOOL
@interface CocoaDSSlot2Device : NSObject
{
ISlot2Interface *device;
BOOL enabled;
}
@property (readonly) NSString *name;
@property (readonly) NSString *description;
@property (readonly) NSInteger deviceID;
@property (readonly) NDS_SLOT2_TYPE type;
@property (assign) BOOL enabled;
- (id) initWithDeviceData:(ISlot2Interface *)deviceData;
@end
@interface CocoaDSSlot2Manager : NSObject
{
NSMutableArray *deviceList;
CocoaDSSlot2Device *currentDevice;
NSString *slot2StatusText;
}
@property (readonly) NSMutableArray *deviceList;
@property (retain) CocoaDSSlot2Device *currentDevice;
@property (assign) NSString *slot2StatusText;
@property (retain) NSURL *mpcfFileSearchURL;
@property (copy) NSURL *gbaCartridgeURL;
@property (copy) NSURL *gbaSRamURL;
@property (readonly) BOOL doesGbaCartridgeSaveExist;
@property (assign) UInt16 paddleValue;
- (CocoaDSSlot2Device *) autoSelectedDevice;
- (NSString *) autoSelectedDeviceName;
- (CocoaDSSlot2Device *) findDeviceByType:(NDS_SLOT2_TYPE)theType;
- (void) setDeviceByType:(NDS_SLOT2_TYPE)theType;
- (void) updateDeviceList;
- (void) updateStatus;
@end
// Force Feedback
void OSXSendForceFeedbackState(bool enable);

View File

@ -0,0 +1,407 @@
/*
Copyright (C) 2014 DeSmuME Team
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with the this software. If not, see <http://www.gnu.org/licenses/>.
*/
#import "cocoa_slot2.h"
#import "cocoa_globals.h"
#import "cocoa_util.h"
#include "../NDSSystem.h"
#undef BOOL
@implementation CocoaDSSlot2Device
@dynamic name;
@dynamic description;
@dynamic deviceID;
@dynamic type;
@synthesize enabled;
- (id) initWithDeviceData:(ISlot2Interface *)deviceData
{
self = [super init];
if (self == nil)
{
return self;
}
device = deviceData;
enabled = NO;
return self;
}
- (void) dealloc
{
[self setEnabled:nil];
[super dealloc];
}
- (NSString *) name
{
const char *cDeviceName = device->info()->name();
NSString *theName = (cDeviceName != NULL) ? [NSString stringWithCString:cDeviceName encoding:NSUTF8StringEncoding] : @"";
return theName;
}
- (NSString *) description
{
const char *cDeviceDescription = device->info()->descr();
NSString *theDesc = (cDeviceDescription != NULL) ? [NSString stringWithCString:cDeviceDescription encoding:NSUTF8StringEncoding] : @"";
return theDesc;
}
- (NSInteger) deviceID
{
return (NSInteger)device->info()->id();
}
- (NDS_SLOT2_TYPE) type
{
NDS_SLOT2_TYPE theType = NDS_SLOT2_NONE;
slot2_getTypeByID(device->info()->id(), theType);
return theType;
}
@end
@implementation CocoaDSSlot2Manager
@synthesize deviceList;
@dynamic currentDevice;
@synthesize slot2StatusText;
@dynamic mpcfFileSearchURL;
@dynamic gbaCartridgeURL;
@dynamic gbaSRamURL;
@dynamic doesGbaCartridgeSaveExist;
@dynamic paddleValue;
- (id) init
{
self = [super init];
if (self == nil)
{
return self;
}
deviceList = [[NSMutableArray alloc] initWithCapacity:32];
slot2StatusText = NSSTRING_STATUS_SLOT2_LOADED_NONE;
[self setGbaCartridgeURL:nil];
if (FeedbackON == NULL)
{
FeedbackON = &OSXSendForceFeedbackState;
}
return self;
}
- (void) dealloc
{
[deviceList release];
[super dealloc];
}
- (void) setCurrentDevice:(CocoaDSSlot2Device *)theDevice
{
NDS_SLOT2_TYPE theType = NDS_SLOT2_NONE;
if (theDevice != nil)
{
theType = [theDevice type];
[theDevice retain];
}
bool slotDidChange = slot2_Change(theType);
if (slotDidChange || currentDevice == nil)
{
[currentDevice release];
currentDevice = theDevice;
}
[self updateStatus];
}
- (CocoaDSSlot2Device *) currentDevice
{
return currentDevice;
}
- (void) setMpcfFileSearchURL:(NSURL *)theURL
{
if (theURL != nil)
{
BOOL isDirectory = NO;
NSString *thePath = [theURL path];
NSFileManager *fileManager = [[NSFileManager alloc] init];
[fileManager fileExistsAtPath:thePath isDirectory:&isDirectory];
CFlash_Mode = (isDirectory) ? ADDON_CFLASH_MODE_Path : ADDON_CFLASH_MODE_File;
CFlash_Path = [thePath cStringUsingEncoding:NSUTF8StringEncoding];
[fileManager release];
}
else
{
CFlash_Path.clear();
CFlash_Mode = ADDON_CFLASH_MODE_RomPath;
}
}
- (NSURL *) mpcfFileSearchURL
{
return [NSURL fileURLWithPath:[NSString stringWithCString:CFlash_Path.c_str() encoding:NSUTF8StringEncoding]];
}
- (void) setGbaCartridgeURL:(NSURL *)fileURL
{
if (fileURL != nil)
{
GBACartridge_RomPath = [[fileURL path] cStringUsingEncoding:NSUTF8StringEncoding];
}
else
{
GBACartridge_RomPath.clear();
}
}
- (NSURL *) gbaCartridgeURL
{
return [NSURL fileURLWithPath:[NSString stringWithCString:GBACartridge_RomPath.c_str() encoding:NSUTF8StringEncoding]];
}
- (void) setGbaSRamURL:(NSURL *)fileURL
{
if (fileURL != nil)
{
GBACartridge_SRAMPath = [[fileURL path] cStringUsingEncoding:NSUTF8StringEncoding];
}
else
{
GBACartridge_SRAMPath.clear();
}
}
- (NSURL *) gbaSRamURL;
{
return [NSURL fileURLWithPath:[NSString stringWithCString:GBACartridge_SRAMPath.c_str() encoding:NSUTF8StringEncoding]];
}
- (BOOL) doesGbaCartridgeSaveExist
{
return NO;
}
- (void) setPaddleValue:(UInt16)value
{
nds.paddle = value;
}
- (UInt16) paddleValue
{
return nds.paddle;
}
- (CocoaDSSlot2Device *) autoSelectedDevice
{
return [self findDeviceByType:slot2_DetermineType()];
}
- (NSString *) autoSelectedDeviceName
{
return [[self autoSelectedDevice] name];
}
- (CocoaDSSlot2Device *) findDeviceByType:(NDS_SLOT2_TYPE)theType
{
CocoaDSSlot2Device *foundDevice = nil;
for (CocoaDSSlot2Device *theDevice in deviceList)
{
if (theType == [theDevice type])
{
foundDevice = theDevice;
return foundDevice;
}
}
return foundDevice;
}
- (void) setDeviceByType:(NDS_SLOT2_TYPE)theType
{
CocoaDSSlot2Device *theDevice = [self findDeviceByType:theType];
if (theDevice != nil)
{
[self setCurrentDevice:theDevice];
}
else
{
// If no devices are found, just set it to NDS_SLOT2_NONE by default.
slot2_Change(NDS_SLOT2_NONE);
}
}
- (void) updateDeviceList
{
BOOL didSelectDevice = NO;
[deviceList removeAllObjects];
for (size_t i = 0; i < NDS_SLOT2_COUNT; i++)
{
ISlot2Interface *theDevice = slot2_List[i];
if (theDevice == NULL)
{
continue;
}
// Create a new device wrapper object and add it to the device list.
CocoaDSSlot2Device *newCdsDevice = [[[CocoaDSSlot2Device alloc] initWithDeviceData:theDevice] autorelease];
[deviceList addObject:newCdsDevice];
// Only enable the SLOT-2 devices that are ready for end-user usage, and leave
// the remaining devices disabled for the time being.
const NDS_SLOT2_TYPE deviceType = [newCdsDevice type];
struct Slot2DeviceProperties
{
NDS_SLOT2_TYPE typeID;
BOOL isSupported;
};
static const Slot2DeviceProperties deviceTypesList[] = {
{ NDS_SLOT2_NONE, YES },
{ NDS_SLOT2_AUTO, YES },
{ NDS_SLOT2_CFLASH, YES },
{ NDS_SLOT2_RUMBLEPAK, YES },
{ NDS_SLOT2_GBACART, YES },
{ NDS_SLOT2_GUITARGRIP, NO },
{ NDS_SLOT2_EXPMEMORY, YES },
{ NDS_SLOT2_EASYPIANO, NO },
{ NDS_SLOT2_PADDLE, YES },
{ NDS_SLOT2_PASSME, YES }
};
Slot2DeviceProperties *supportedDeviceTypesList = (Slot2DeviceProperties *)calloc(NDS_SLOT2_COUNT, sizeof(Slot2DeviceProperties));
memcpy(supportedDeviceTypesList, deviceTypesList, sizeof(deviceTypesList));
for (size_t j = 0; j < NDS_SLOT2_COUNT; j++)
{
if (deviceType == supportedDeviceTypesList[j].typeID)
{
[newCdsDevice setEnabled:supportedDeviceTypesList[j].isSupported];
break;
}
}
free(supportedDeviceTypesList);
supportedDeviceTypesList = NULL;
// If the new device is the current device, select it.
if (!didSelectDevice && [newCdsDevice type] == slot2_GetCurrentType())
{
[self setCurrentDevice:newCdsDevice];
didSelectDevice = YES;
}
}
if (!didSelectDevice)
{
slot2_Change(NDS_SLOT2_NONE);
}
}
- (void) updateStatus
{
const NDS_SLOT2_TYPE theType = ([self currentDevice] != nil) ? [currentDevice type] : NDS_SLOT2_NONE;
switch (theType)
{
case NDS_SLOT2_NONE:
[self setSlot2StatusText:NSSTRING_STATUS_SLOT2_LOADED_NONE];
break;
case NDS_SLOT2_AUTO:
[self setSlot2StatusText:[NSString stringWithFormat:NSSTRING_STATUS_SLOT2_LOADED_AUTOMATIC, [self autoSelectedDeviceName]]];
break;
case NDS_SLOT2_CFLASH:
{
switch (CFlash_Mode)
{
case ADDON_CFLASH_MODE_Path:
[self setSlot2StatusText:[NSString stringWithFormat:NSSTRING_STATUS_SLOT2_LOADED_MPCF_DIRECTORY, CFlash_Path.c_str()]];
break;
case ADDON_CFLASH_MODE_File:
[self setSlot2StatusText:[NSString stringWithFormat:NSSTRING_STATUS_SLOT2_LOADED_MPCF_DISK_IMAGE, CFlash_Path.c_str()]];
break;
case ADDON_CFLASH_MODE_RomPath:
[self setSlot2StatusText:NSSTRING_STATUS_SLOT2_LOADED_MPCF_WITH_ROM];
break;
default:
break;
}
break;
}
case NDS_SLOT2_GBACART:
{
[self setSlot2StatusText:(GBACartridge_SRAMPath.empty()) ? NSSTRING_STATUS_SLOT2_LOADED_GBA_CART_NO_SRAM : [NSString stringWithFormat:NSSTRING_STATUS_SLOT2_LOADED_GBA_CART_WITH_SRAM, GBACartridge_SRAMPath.c_str()]];
break;
}
case NDS_SLOT2_RUMBLEPAK:
case NDS_SLOT2_GUITARGRIP:
case NDS_SLOT2_EXPMEMORY:
case NDS_SLOT2_EASYPIANO:
case NDS_SLOT2_PADDLE:
case NDS_SLOT2_PASSME:
[self setSlot2StatusText:[NSString stringWithFormat:NSSTRING_STATUS_SLOT2_LOADED_GENERIC_DEVICE, [[self currentDevice] name]]];
break;
default:
[self setSlot2StatusText:NSSTRING_STATUS_SLOT2_LOADED_UNKNOWN];
break;
}
}
@end
void OSXSendForceFeedbackState(bool enable)
{
NSAutoreleasePool *tempPool = [[NSAutoreleasePool alloc] init];
NSDictionary *ffProperties = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:enable], @"ffState",
[NSNumber numberWithInteger:RUMBLE_ITERATIONS_RUMBLE_PAK], @"iterations",
nil];
[[NSNotificationCenter defaultCenter] postNotificationName:@"org.desmume.DeSmuME.sendForceFeedback"
object:nil
userInfo:ffProperties];
[tempPool release];
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 251 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2013 DeSmuME team
Copyright (C) 2013-2014 DeSmuME Team
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -44,6 +44,7 @@ class AudioSampleBlockGenerator;
NSObjectController *cdsCoreController;
NSObjectController *cdsSoundController;
NSObjectController *cheatWindowController;
NSObjectController *slot2WindowController;
NSArrayController *cheatListController;
NSArrayController *cheatDatabaseController;
@ -99,6 +100,7 @@ class AudioSampleBlockGenerator;
@property (readonly) IBOutlet NSObjectController *cdsCoreController;
@property (readonly) IBOutlet NSObjectController *cdsSoundController;
@property (readonly) IBOutlet NSObjectController *cheatWindowController;
@property (readonly) IBOutlet NSObjectController *slot2WindowController;
@property (readonly) IBOutlet NSArrayController *cheatListController;
@property (readonly) IBOutlet NSArrayController *cheatDatabaseController;

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2013 DeSmuME team
Copyright (C) 2013-2014 DeSmuME Team
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -19,6 +19,7 @@
#import "DisplayWindowController.h"
#import "InputManager.h"
#import "cheatWindowDelegate.h"
#import "Slot2WindowDelegate.h"
#import "cocoa_globals.h"
#import "cocoa_cheat.h"
@ -29,6 +30,7 @@
#import "cocoa_input.h"
#import "cocoa_output.h"
#import "cocoa_rom.h"
#import "cocoa_slot2.h"
@implementation EmuControllerDelegate
@ -48,6 +50,7 @@
@synthesize cheatWindowController;
@synthesize cheatListController;
@synthesize cheatDatabaseController;
@synthesize slot2WindowController;
@synthesize slot1ManagerWindow;
@synthesize saveFileMigrationSheet;
@ -982,6 +985,19 @@
NSString *audioFilePath = cmdAttr.object[0];
[[cdsCore cdsController] setSelectedAudioFileGenerator:[inputManager audioFileGeneratorFromFilePath:audioFilePath]];
}
else if (controlID == DSControllerState_Paddle)
{
if (cmdAttr.useInputForScalar)
{
const float paddleScalar = cmdAttr.floatValue[0];
[(Slot2WindowDelegate *)[slot2WindowController content] setPaddleDirectWithScalar:paddleScalar];
}
else
{
const NSInteger paddleRelativeAdjustment = cmdAttr.intValue[1];
[(Slot2WindowDelegate *)[slot2WindowController content] setPaddleRelativeWithInteger:paddleRelativeAdjustment];
}
}
else
{
[[cdsCore cdsController] setControllerState:theState controlID:controlID];
@ -1537,6 +1553,10 @@
[self setIsWorking:NO];
[self setIsRomLoading:NO];
Slot2WindowDelegate *slot2WindowDelegate = (Slot2WindowDelegate *)[slot2WindowController content];
[slot2WindowDelegate setAutoSelectedDeviceText:[[slot2WindowDelegate deviceManager] autoSelectedDeviceName]];
[[slot2WindowDelegate deviceManager] updateStatus];
for (DisplayWindowController *windowController in windowList)
{
[[windowController window] displayIfNeeded];
@ -1609,6 +1629,10 @@
[self setStatusText:NSSTRING_STATUS_ROM_UNLOADED];
[self setIsWorking:NO];
Slot2WindowDelegate *slot2WindowDelegate = (Slot2WindowDelegate *)[slot2WindowController content];
[slot2WindowDelegate setAutoSelectedDeviceText:[[slot2WindowDelegate deviceManager] autoSelectedDeviceName]];
[[slot2WindowDelegate deviceManager] updateStatus];
for (DisplayWindowController *windowController in windowList)
{
[[windowController window] displayIfNeeded];

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2013 DeSmuME team
Copyright (C) 2013-2014 DeSmuME Team
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -18,6 +18,7 @@
#import <Cocoa/Cocoa.h>
#include <libkern/OSAtomic.h>
#include <IOKit/hid/IOHIDManager.h>
#include <ForceFeedback/ForceFeedback.h>
#if defined(__ppc__) || defined(__ppc64__)
#include <map>
@ -103,27 +104,47 @@ typedef std::tr1::unordered_map<std::string, AudioSampleBlockGenerator> AudioFil
InputHIDManager *hidManager;
IOHIDDeviceRef hidDeviceRef;
IOHIDQueueRef hidQueueRef;
NSString *identifier;
io_service_t ioService;
FFDeviceObjectReference ffDevice;
FFEffectObjectReference ffEffect;
BOOL supportsForceFeedback;
BOOL isForceFeedbackEnabled;
NSRunLoop *runLoop;
OSSpinLock spinlockRunLoop;
}
@property (retain) InputHIDManager *hidManager;
@property (readonly) IOHIDDeviceRef hidDeviceRef;
@property (readonly) NSString *manufacturerName;
@property (readonly) NSString *productName;
@property (readonly) NSString *serialNumber;
@property (readonly) NSString *identifier;
@property (readonly) BOOL supportsForceFeedback;
@property (assign) BOOL isForceFeedbackEnabled;
@property (retain) NSRunLoop *runLoop;
- (id) initWithDevice:(IOHIDDeviceRef)theDevice hidManager:(InputHIDManager *)theHIDManager;
- (void) setPropertiesUsingDictionary:(NSDictionary *)theProperties;
- (NSDictionary *) propertiesDictionary;
- (void) writeDefaults;
- (void) start;
- (void) stop;
- (NSString *) manufacturerName;
- (NSString *) productName;
- (NSString *) serialNumber;
- (void) startForceFeedbackAndIterate:(UInt32)iterations flags:(UInt32)ffFlags;
- (void) stopForceFeedback;
@end
BOOL GetOnStateFromHIDValueRef(IOHIDValueRef hidValueRef);
InputAttributes InputAttributesOfHIDValue(IOHIDValueRef hidValueRef, const char *altElementCode, const char *altElementName, bool *altOnState);
bool GetOnStateFromHIDValueRef(IOHIDValueRef hidValueRef);
void InputDeviceCodeFromHIDDevice(const IOHIDDeviceRef hidDeviceRef, char *charBuffer);
void InputDeviceNameFromHIDDevice(const IOHIDDeviceRef hidDeviceRef, char *charBuffer, const char *altName);
InputAttributes InputAttributesOfHIDValue(IOHIDValueRef hidValueRef, const char *altElementCode, const char *altElementName, const bool *altOnState);
InputAttributesList InputListFromHIDValue(IOHIDValueRef hidValueRef);
InputAttributesList InputListFromHatSwitchValue(IOHIDValueRef hidValueRef, bool useEightDirection);
@ -136,15 +157,15 @@ void HandleQueueValueAvailableCallback(void *inContext, IOReturn inResult, void
InputManager *inputManager;
IOHIDManagerRef hidManagerRef;
NSRunLoop *runLoop;
NSMutableSet *deviceList;
NSArrayController *deviceListController;
id<InputHIDManagerTarget> target;
OSSpinLock spinlockRunLoop;
}
@property (retain) NSArrayController *deviceListController;
@property (retain) InputManager *inputManager;
@property (readonly) IOHIDManagerRef hidManagerRef;
@property (readonly) NSMutableSet *deviceList;
@property (assign) id target;
@property (retain) NSRunLoop *runLoop;
@ -173,6 +194,7 @@ void HandleDeviceRemovalCallback(void *inContext, IOReturn inResult, void *inSen
@property (readonly) IBOutlet EmuControllerDelegate *emuControl;
@property (retain) id<InputHIDManagerTarget> hidInputTarget;
@property (readonly) InputHIDManager *hidManager;
@property (readonly) NSMutableDictionary *inputMappings;
@property (readonly) NSArray *commandTagList;
@property (readonly) NSDictionary *commandIcon;

View File

@ -1,6 +1,6 @@
/*
Copyright (C) 2011 Roger Manuel
Copyright (C) 2012-2013 DeSmuME team
Copyright (C) 2012-2014 DeSmuME Team
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -71,6 +71,12 @@ extern "C"
@synthesize hidManager;
@synthesize hidDeviceRef;
@dynamic manufacturerName;
@dynamic productName;
@dynamic serialNumber;
@synthesize identifier;
@dynamic supportsForceFeedback;
@dynamic isForceFeedbackEnabled;
@dynamic runLoop;
static NSDictionary *hidUsageTable = nil;
@ -109,6 +115,104 @@ static NSDictionary *hidUsageTable = nil;
CFRelease(elementArray);
// Set up force feedback.
#if MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_5
ioService = IOHIDDeviceGetService(hidDeviceRef);
if (ioService != MACH_PORT_NULL)
{
IOObjectRetain(ioService);
}
#else
ioService = MACH_PORT_NULL;
CFMutableDictionaryRef matchingDict = IOServiceMatching(kIOHIDDeviceKey);
if (matchingDict)
{
CFStringRef locationKey = CFSTR(kIOHIDLocationIDKey);
CFTypeRef deviceLocation = IOHIDDeviceGetProperty(hidDeviceRef, locationKey);
if (deviceLocation != NULL)
{
CFDictionaryAddValue(matchingDict, locationKey, deviceLocation);
//This eats a reference to matchingDict, so we don't need a separate release.
//The result, meanwhile, has a reference count of 1 and must be released by the caller.
ioService = IOServiceGetMatchingService(kIOMasterPortDefault, matchingDict);
}
else
{
CFRelease(matchingDict);
}
}
#endif
ffDevice = NULL;
ffEffect = NULL;
if (ioService != MACH_PORT_NULL && [self supportsForceFeedback])
{
HRESULT ffResult = FFCreateDevice(ioService, &ffDevice);
if (ffDevice != NULL && ffResult != FF_OK)
{
FFReleaseDevice(ffDevice);
ffDevice = NULL;
}
// Generate the force feedback effect.
if (ffDevice != NULL)
{
DWORD rgdwAxes[1] = {FFJOFS_Y};
LONG rglDirection[2] = {0};
FFCONSTANTFORCE cf;
cf.lMagnitude = FF_FFNOMINALMAX;
FFEFFECT newEffect;
newEffect.dwSize = sizeof(FFEFFECT);
newEffect.dwFlags = FFEFF_CARTESIAN | FFEFF_OBJECTOFFSETS;
newEffect.dwDuration = 1000000; // Equivalent to 1 second
newEffect.dwSamplePeriod = 0;
newEffect.dwGain = FF_FFNOMINALMAX;
newEffect.dwTriggerButton = FFEB_NOTRIGGER;
newEffect.dwTriggerRepeatInterval = 0;
newEffect.cAxes = 1;
newEffect.rgdwAxes = rgdwAxes;
newEffect.rglDirection = rglDirection;
newEffect.lpEnvelope = NULL;
newEffect.cbTypeSpecificParams = sizeof(FFCONSTANTFORCE);
newEffect.lpvTypeSpecificParams = &cf;
newEffect.dwStartDelay = 0;
FFDeviceCreateEffect(ffDevice, kFFEffectType_ConstantForce_ID, &newEffect, &ffEffect);
if (ffEffect == NULL)
{
FFReleaseDevice(ffDevice);
ffDevice = NULL;
}
}
}
isForceFeedbackEnabled = (ffDevice != nil);
if (isForceFeedbackEnabled)
{
[self startForceFeedbackAndIterate:RUMBLE_ITERATIONS_ENABLE flags:0];
}
// Set up the device identifier.
CFNumberRef cfVendorIDNumber = (CFNumberRef)IOHIDDeviceGetProperty(hidDeviceRef, CFSTR(kIOHIDVendorIDKey));
CFNumberRef cfProductIDNumber = (CFNumberRef)IOHIDDeviceGetProperty(hidDeviceRef, CFSTR(kIOHIDProductIDKey));
CFStringRef cfDeviceSerial = (CFStringRef)IOHIDDeviceGetProperty(hidDeviceRef, CFSTR(kIOHIDSerialNumberKey));
if (cfDeviceSerial != nil)
{
identifier = [NSString stringWithFormat:@"%d/%d/%@", [(NSNumber *)cfVendorIDNumber intValue], [(NSNumber *)cfProductIDNumber intValue], cfDeviceSerial];
}
else
{
CFNumberRef cfLocationIDNumber = (CFNumberRef)IOHIDDeviceGetProperty(hidDeviceRef, CFSTR(kIOHIDLocationIDKey));
identifier = [NSString stringWithFormat:@"%d/%d/0x%08X", [(NSNumber *)cfVendorIDNumber intValue], [(NSNumber *)cfProductIDNumber intValue], [(NSNumber *)cfLocationIDNumber intValue]];
}
[identifier retain];
spinlockRunLoop = OS_SPINLOCK_INIT;
[self setRunLoop:[NSRunLoop currentRunLoop]];
@ -127,9 +231,76 @@ static NSDictionary *hidUsageTable = nil;
hidQueueRef = NULL;
}
if (ffDevice != NULL)
{
FFReleaseDevice(ffDevice);
FFEffectUnload(ffEffect);
ffDevice = NULL;
}
if (ioService != MACH_PORT_NULL)
{
IOObjectRelease(ioService);
ioService = MACH_PORT_NULL;
}
[identifier release];
[super dealloc];
}
- (NSString *) manufacturerName
{
return (NSString *)IOHIDDeviceGetProperty([self hidDeviceRef], CFSTR(kIOHIDManufacturerKey));
}
- (NSString *) productName
{
return (NSString *)IOHIDDeviceGetProperty([self hidDeviceRef], CFSTR(kIOHIDProductKey));
}
- (NSString *) serialNumber
{
return (NSString *)IOHIDDeviceGetProperty([self hidDeviceRef], CFSTR(kIOHIDSerialNumberKey));
}
- (BOOL) supportsForceFeedback
{
return (ioService != MACH_PORT_NULL) ? (FFIsForceFeedback(ioService) == FF_OK) : NO;
}
- (void) setIsForceFeedbackEnabled:(BOOL)theState
{
if (ffDevice != NULL)
{
// Enable/disable force feedback by maxing/zeroing out the device gain.
UInt32 gainValue = (theState) ? FF_FFNOMINALMAX : 0;
FFDeviceSetForceFeedbackProperty(ffDevice, FFPROP_FFGAIN, &gainValue);
if (theState)
{
[self startForceFeedbackAndIterate:RUMBLE_ITERATIONS_ENABLE flags:0];
}
else
{
[self stopForceFeedback];
}
isForceFeedbackEnabled = theState;
}
else
{
isForceFeedbackEnabled = NO;
}
[self writeDefaults];
}
- (BOOL) isForceFeedbackEnabled
{
return isForceFeedbackEnabled;
}
- (void) setRunLoop:(NSRunLoop *)theRunLoop
{
OSSpinLockLock(&spinlockRunLoop);
@ -149,7 +320,7 @@ static NSDictionary *hidUsageTable = nil;
{
[theRunLoop retain];
IOHIDQueueScheduleWithRunLoop(hidQueueRef, [theRunLoop getCFRunLoop], kCFRunLoopDefaultMode);
IOHIDQueueRegisterValueAvailableCallback(hidQueueRef, HandleQueueValueAvailableCallback, [self hidManager]);
IOHIDQueueRegisterValueAvailableCallback(hidQueueRef, HandleQueueValueAvailableCallback, self);
}
[runLoop release];
@ -167,6 +338,43 @@ static NSDictionary *hidUsageTable = nil;
return theRunLoop;
}
- (void) setPropertiesUsingDictionary:(NSDictionary *)theProperties
{
if (theProperties == nil)
{
return;
}
NSNumber *isFFEnabledNumber = (NSNumber *)[theProperties objectForKey:@"isForceFeedbackEnabled"];
if (isFFEnabledNumber != nil)
{
[self setIsForceFeedbackEnabled:[isFFEnabledNumber boolValue]];
}
}
- (NSDictionary *) propertiesDictionary
{
return [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:[self isForceFeedbackEnabled]], @"isForceFeedbackEnabled",
[self manufacturerName], @"manufacturerName",
[self productName], @"productName",
[self serialNumber], @"serialNumber",
nil];
}
- (void) writeDefaults
{
NSDictionary *savedInputDeviceDict = [[NSUserDefaults standardUserDefaults] dictionaryForKey:@"Input_SavedDeviceProperties"];
if (savedInputDeviceDict == nil)
{
return;
}
NSMutableDictionary *newInputDeviceDict = [NSMutableDictionary dictionaryWithDictionary:savedInputDeviceDict];
[newInputDeviceDict setObject:[self propertiesDictionary] forKey:[self identifier]];
[[NSUserDefaults standardUserDefaults] setObject:newInputDeviceDict forKey:@"Input_SavedDeviceProperties"];
}
- (void) start
{
IOHIDQueueStart(hidQueueRef);
@ -177,19 +385,21 @@ static NSDictionary *hidUsageTable = nil;
IOHIDQueueStop(hidQueueRef);
}
- (NSString *) manufacturerName
- (void) startForceFeedbackAndIterate:(UInt32)iterations flags:(UInt32)ffFlags
{
return (NSString *)IOHIDDeviceGetProperty([self hidDeviceRef], CFSTR(kIOHIDManufacturerKey));
if (ffDevice != NULL)
{
HRESULT ffResult = FFEffectStart(ffEffect, iterations, ffFlags);
ffResult = ffResult;
}
}
- (NSString *) productName
- (void) stopForceFeedback
{
return (NSString *)IOHIDDeviceGetProperty([self hidDeviceRef], CFSTR(kIOHIDProductKey));
}
- (NSString *) serialNumber
{
return (NSString *)IOHIDDeviceGetProperty([self hidDeviceRef], CFSTR(kIOHIDSerialNumberKey));
if (ffDevice != NULL)
{
FFEffectStop(ffEffect);
}
}
@end
@ -211,7 +421,7 @@ static NSDictionary *hidUsageTable = nil;
Details:
None.
********************************************************************************************/
InputAttributes InputAttributesOfHIDValue(IOHIDValueRef hidValueRef, const char *altElementCode, const char *altElementName, bool *altOnState)
InputAttributes InputAttributesOfHIDValue(IOHIDValueRef hidValueRef, const char *altElementCode, const char *altElementName, const bool *altOnState)
{
InputAttributes inputAttr;
@ -267,46 +477,14 @@ InputAttributes InputAttributesOfHIDValue(IOHIDValueRef hidValueRef, const char
strncpy(inputAttr.elementName, altElementName, INPUT_HANDLER_STRING_LENGTH);
}
IOHIDDeviceRef hidDeviceRef = IOHIDElementGetDevice(hidElementRef);
const IOHIDDeviceRef hidDeviceRef = IOHIDElementGetDevice(hidElementRef);
InputDeviceCodeFromHIDDevice(hidDeviceRef, inputAttr.deviceCode);
InputDeviceNameFromHIDDevice(hidDeviceRef, inputAttr.deviceName, inputAttr.deviceCode);
CFNumberRef cfVendorIDNumber = (CFNumberRef)IOHIDDeviceGetProperty(hidDeviceRef, CFSTR(kIOHIDVendorIDKey));
SInt32 vendorID = 0;
CFNumberGetValue(cfVendorIDNumber, kCFNumberSInt32Type, &vendorID);
CFNumberRef cfProductIDNumber = (CFNumberRef)IOHIDDeviceGetProperty(hidDeviceRef, CFSTR(kIOHIDProductIDKey));
SInt32 productID = 0;
CFNumberGetValue(cfProductIDNumber, kCFNumberSInt32Type, &productID);
CFStringRef cfDeviceCode = (CFStringRef)IOHIDDeviceGetProperty(hidDeviceRef, CFSTR(kIOHIDSerialNumberKey));
if (cfDeviceCode == nil)
{
CFNumberRef cfLocationIDNumber = (CFNumberRef)IOHIDDeviceGetProperty(hidDeviceRef, CFSTR(kIOHIDLocationIDKey));
SInt32 locationID = 0;
CFNumberGetValue(cfLocationIDNumber, kCFNumberSInt32Type, &locationID);
snprintf(inputAttr.deviceCode, INPUT_HANDLER_STRING_LENGTH, "%d/%d/0x%08X", (int)vendorID, (int)productID, (unsigned int)locationID);
}
else
{
char cfDeviceCodeBuf[256] = {0};
CFStringGetCString(cfDeviceCode, cfDeviceCodeBuf, 256, kCFStringEncodingUTF8);
snprintf(inputAttr.deviceCode, INPUT_HANDLER_STRING_LENGTH, "%d/%d/%s", (int)vendorID, (int)productID, cfDeviceCodeBuf);
}
CFStringRef cfDeviceName = (CFStringRef)IOHIDDeviceGetProperty(hidDeviceRef, CFSTR(kIOHIDProductKey));
if (cfDeviceName == nil)
{
strncpy(inputAttr.deviceName, inputAttr.deviceCode, INPUT_HANDLER_STRING_LENGTH);
}
else
{
CFStringGetCString(cfDeviceName, inputAttr.deviceName, INPUT_HANDLER_STRING_LENGTH, kCFStringEncodingUTF8);
}
bool onState = (altOnState == NULL) ? GetOnStateFromHIDValueRef(hidValueRef) : *altOnState;
CFIndex logicalValue = IOHIDValueGetIntegerValue(hidValueRef);
NSInteger logicalMin = IOHIDElementGetLogicalMin(hidElementRef);
NSInteger logicalMax = IOHIDElementGetLogicalMax(hidElementRef);
const bool onState = (altOnState == NULL) ? GetOnStateFromHIDValueRef(hidValueRef) : *altOnState;
const NSInteger logicalValue = IOHIDValueGetIntegerValue(hidValueRef);
const NSInteger logicalMin = IOHIDElementGetLogicalMin(hidElementRef);
const NSInteger logicalMax = IOHIDElementGetLogicalMax(hidElementRef);
inputAttr.state = (onState) ? INPUT_ATTRIBUTE_STATE_ON : INPUT_ATTRIBUTE_STATE_OFF;
inputAttr.intCoordX = 0;
@ -352,10 +530,10 @@ InputAttributesList InputListFromHIDValue(IOHIDValueRef hidValueRef)
}
else
{
NSInteger lowerThreshold = ((logicalMax - logicalMin) / 3) + logicalMin;
NSInteger upperThreshold = (((logicalMax - logicalMin) * 2) / 3) + logicalMin;
bool onState = true;
bool offState = false;
const NSInteger lowerThreshold = ((logicalMax - logicalMin) / 4) + logicalMin;
const NSInteger upperThreshold = (((logicalMax - logicalMin) * 3) / 4) + logicalMin;
const bool onState = true;
const bool offState = false;
char elementCodeLowerThresholdBuf[256] = {0};
char elementCodeUpperThresholdBuf[256] = {0};
@ -523,40 +701,31 @@ InputAttributesList InputListFromHatSwitchValue(IOHIDValueRef hidValueRef, bool
return inputList;
}
BOOL GetOnStateFromHIDValueRef(IOHIDValueRef hidValueRef)
bool GetOnStateFromHIDValueRef(IOHIDValueRef hidValueRef)
{
BOOL onState = NO;
bool onState = false;
if (hidValueRef == nil)
{
return onState;
}
IOHIDElementRef hidElementRef = IOHIDValueGetElement(hidValueRef);
NSInteger logicalValue = IOHIDValueGetIntegerValue(hidValueRef);
NSInteger logicalMin = IOHIDElementGetLogicalMin(hidElementRef);
NSInteger logicalMax = IOHIDElementGetLogicalMax(hidElementRef);
NSInteger lowerThreshold = ((logicalMax - logicalMin) / 4) + logicalMin;
NSInteger upperThreshold = (((logicalMax - logicalMin) * 3) / 4) + logicalMin;
const IOHIDElementRef hidElementRef = IOHIDValueGetElement(hidValueRef);
const NSInteger logicalValue = IOHIDValueGetIntegerValue(hidValueRef);
const NSInteger logicalMin = IOHIDElementGetLogicalMin(hidElementRef);
const NSInteger logicalMax = IOHIDElementGetLogicalMax(hidElementRef);
const NSInteger lowerThreshold = ((logicalMax - logicalMin) / 4) + logicalMin;
const NSInteger upperThreshold = (((logicalMax - logicalMin) * 3) / 4) + logicalMin;
const NSInteger elementType = IOHIDElementGetType(hidElementRef);
NSInteger elementType = IOHIDElementGetType(hidElementRef);
switch (elementType)
{
case kIOHIDElementTypeInput_Misc:
{
if (logicalMin == 0 && logicalMax == 1)
if ( (logicalMin == 0 && logicalMax == 1 && logicalValue == 1) ||
(logicalValue <= lowerThreshold || logicalValue >= upperThreshold) )
{
if (logicalValue == 1)
{
onState = YES;
}
}
else
{
if (logicalValue <= lowerThreshold || logicalValue >= upperThreshold)
{
onState = YES;
}
onState = true;
}
break;
}
@ -565,26 +734,17 @@ BOOL GetOnStateFromHIDValueRef(IOHIDValueRef hidValueRef)
{
if (logicalValue == 1)
{
onState = YES;
onState = true;
}
break;
}
case kIOHIDElementTypeInput_Axis:
{
if (logicalMin == 0 && logicalMax == 1)
if ( (logicalMin == 0 && logicalMax == 1 && logicalValue == 1) ||
(logicalValue <= lowerThreshold || logicalValue >= upperThreshold) )
{
if (logicalValue == 1)
{
onState = YES;
}
}
else
{
if (logicalValue <= lowerThreshold || logicalValue >= upperThreshold)
{
onState = YES;
}
onState = true;
}
break;
}
@ -596,6 +756,46 @@ BOOL GetOnStateFromHIDValueRef(IOHIDValueRef hidValueRef)
return onState;
}
void InputDeviceCodeFromHIDDevice(const IOHIDDeviceRef hidDeviceRef, char *charBuffer)
{
CFNumberRef cfVendorIDNumber = (CFNumberRef)IOHIDDeviceGetProperty(hidDeviceRef, CFSTR(kIOHIDVendorIDKey));
SInt32 vendorID = 0;
CFNumberGetValue(cfVendorIDNumber, kCFNumberSInt32Type, &vendorID);
CFNumberRef cfProductIDNumber = (CFNumberRef)IOHIDDeviceGetProperty(hidDeviceRef, CFSTR(kIOHIDProductIDKey));
SInt32 productID = 0;
CFNumberGetValue(cfProductIDNumber, kCFNumberSInt32Type, &productID);
CFStringRef cfDeviceCode = (CFStringRef)IOHIDDeviceGetProperty(hidDeviceRef, CFSTR(kIOHIDSerialNumberKey));
if (cfDeviceCode == nil)
{
CFNumberRef cfLocationIDNumber = (CFNumberRef)IOHIDDeviceGetProperty(hidDeviceRef, CFSTR(kIOHIDLocationIDKey));
SInt32 locationID = 0;
CFNumberGetValue(cfLocationIDNumber, kCFNumberSInt32Type, &locationID);
snprintf(charBuffer, INPUT_HANDLER_STRING_LENGTH, "%d/%d/0x%08X", (int)vendorID, (int)productID, (unsigned int)locationID);
}
else
{
char cfDeviceCodeBuf[256] = {0};
CFStringGetCString(cfDeviceCode, cfDeviceCodeBuf, 256, kCFStringEncodingUTF8);
snprintf(charBuffer, INPUT_HANDLER_STRING_LENGTH, "%d/%d/%s", (int)vendorID, (int)productID, cfDeviceCodeBuf);
}
}
void InputDeviceNameFromHIDDevice(const IOHIDDeviceRef hidDeviceRef, char *charBuffer, const char *altName)
{
CFStringRef cfDeviceName = (CFStringRef)IOHIDDeviceGetProperty(hidDeviceRef, CFSTR(kIOHIDProductKey));
if (cfDeviceName == nil)
{
strncpy(charBuffer, (altName != NULL) ? altName : "Unknown Device", INPUT_HANDLER_STRING_LENGTH);
}
else
{
CFStringGetCString(cfDeviceName, charBuffer, INPUT_HANDLER_STRING_LENGTH, kCFStringEncodingUTF8);
}
}
size_t ClearHIDQueue(const IOHIDQueueRef hidQueue)
{
size_t hidInputClearCount = 0;
@ -629,7 +829,8 @@ size_t ClearHIDQueue(const IOHIDQueueRef hidQueue)
void HandleQueueValueAvailableCallback(void *inContext, IOReturn inResult, void *inSender)
{
InputHIDManager *hidManager = (InputHIDManager *)inContext;
InputHIDDevice *hidDevice = (InputHIDDevice *)inContext;
InputHIDManager *hidManager = [hidDevice hidManager];
IOHIDQueueRef hidQueue = (IOHIDQueueRef)inSender;
id<InputHIDManagerTarget> target = [hidManager target];
@ -651,7 +852,7 @@ void HandleQueueValueAvailableCallback(void *inContext, IOReturn inResult, void
@synthesize inputManager;
@synthesize hidManagerRef;
@synthesize deviceList;
@synthesize deviceListController;
@synthesize target;
@dynamic runLoop;
@ -664,6 +865,7 @@ void HandleQueueValueAvailableCallback(void *inContext, IOReturn inResult, void
}
target = nil;
deviceListController = nil;
inputManager = [theInputManager retain];
hidManagerRef = IOHIDManagerCreate(kCFAllocatorDefault, kIOHIDOptionsTypeNone);
@ -672,9 +874,7 @@ void HandleQueueValueAvailableCallback(void *inContext, IOReturn inResult, void
[self release];
return nil;
}
deviceList = [[NSMutableSet alloc] initWithCapacity:32];
CFMutableDictionaryRef cfJoystickMatcher = CFDictionaryCreateMutable(kCFAllocatorDefault, 2, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
CFDictionarySetValue(cfJoystickMatcher, CFSTR(kIOHIDDeviceUsagePageKey), (CFNumberRef)[NSNumber numberWithInteger:kHIDPage_GenericDesktop]);
CFDictionarySetValue(cfJoystickMatcher, CFSTR(kIOHIDDeviceUsageKey), (CFNumberRef)[NSNumber numberWithInteger:kHIDUsage_GD_Joystick]);
@ -683,13 +883,18 @@ void HandleQueueValueAvailableCallback(void *inContext, IOReturn inResult, void
CFDictionarySetValue(cfGamepadMatcher, CFSTR(kIOHIDDeviceUsagePageKey), (CFNumberRef)[NSNumber numberWithInteger:kHIDPage_GenericDesktop]);
CFDictionarySetValue(cfGamepadMatcher, CFSTR(kIOHIDDeviceUsageKey), (CFNumberRef)[NSNumber numberWithInteger:kHIDUsage_GD_GamePad]);
NSArray *matcherArray = [[NSArray alloc] initWithObjects:(NSMutableDictionary *)cfJoystickMatcher, (NSMutableDictionary *)cfGamepadMatcher, nil];
CFMutableDictionaryRef cfGenericControllerMatcher = CFDictionaryCreateMutable(kCFAllocatorDefault, 2, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
CFDictionarySetValue(cfGenericControllerMatcher, CFSTR(kIOHIDDeviceUsagePageKey), (CFNumberRef)[NSNumber numberWithInteger:kHIDPage_GenericDesktop]);
CFDictionarySetValue(cfGenericControllerMatcher, CFSTR(kIOHIDDeviceUsageKey), (CFNumberRef)[NSNumber numberWithInteger:kHIDUsage_GD_MultiAxisController]);
NSArray *matcherArray = [[NSArray alloc] initWithObjects:(NSMutableDictionary *)cfJoystickMatcher, (NSMutableDictionary *)cfGamepadMatcher, (NSMutableDictionary *)cfGenericControllerMatcher, nil];
IOHIDManagerSetDeviceMatchingMultiple(hidManagerRef, (CFArrayRef)matcherArray);
[matcherArray release];
CFRelease(cfJoystickMatcher);
CFRelease(cfGamepadMatcher);
CFRelease(cfGenericControllerMatcher);
spinlockRunLoop = OS_SPINLOCK_INIT;
[self setRunLoop:[NSRunLoop currentRunLoop]];
@ -709,9 +914,7 @@ void HandleQueueValueAvailableCallback(void *inContext, IOReturn inResult, void
[self setRunLoop:nil];
[self setInputManager:nil];
[self setTarget:nil];
[deviceList release];
if (hidManagerRef != NULL)
{
IOHIDManagerClose(hidManagerRef, 0);
@ -767,19 +970,34 @@ void HandleDeviceMatchingCallback(void *inContext, IOReturn inResult, void *inSe
{
InputHIDManager *hidManager = (InputHIDManager *)inContext;
InputHIDDevice *newDevice = [[[InputHIDDevice alloc] initWithDevice:inIOHIDDeviceRef hidManager:hidManager] autorelease];
[[hidManager deviceList] addObject:newDevice];
[[hidManager deviceListController] addObject:newDevice];
NSDictionary *savedInputDeviceDict = [[NSUserDefaults standardUserDefaults] dictionaryForKey:@"Input_SavedDeviceProperties"];
NSDictionary *devicePropertiesDict = (NSDictionary *)[savedInputDeviceDict objectForKey:[newDevice identifier]];
if (devicePropertiesDict != nil)
{
[newDevice setPropertiesUsingDictionary:devicePropertiesDict];
}
else
{
[newDevice writeDefaults];
}
[newDevice start];
}
void HandleDeviceRemovalCallback(void *inContext, IOReturn inResult, void *inSender, IOHIDDeviceRef inIOHIDDeviceRef)
{
InputHIDManager *hidManager = (InputHIDManager *)inContext;
NSArray *hidDeviceList = [[hidManager deviceListController] arrangedObjects];
for (InputHIDDevice *hidDevice in [hidManager deviceList])
for (InputHIDDevice *hidDevice in hidDeviceList)
{
if ([hidDevice hidDeviceRef] == inIOHIDDeviceRef)
{
[[hidManager deviceList] removeObject:hidDevice];
[hidDevice stopForceFeedback];
[[hidManager deviceListController] removeObject:hidDevice];
break;
}
}
@ -790,6 +1008,7 @@ void HandleDeviceRemovalCallback(void *inContext, IOReturn inResult, void *inSen
@synthesize emuControl;
@dynamic hidInputTarget;
@synthesize hidManager;
@synthesize inputMappings;
@synthesize commandTagList;
@synthesize commandIcon;
@ -869,6 +1088,25 @@ static std::tr1::unordered_map<unsigned short, std::string> keyboardNameTable; /
commandSelector["Debug"] = @selector(cmdUpdateDSController:);
commandSelector["Lid"] = @selector(cmdUpdateDSController:);
commandSelector["Guitar Grip: Green"] = @selector(cmdUpdateDSController:);
commandSelector["Guitar Grip: Red"] = @selector(cmdUpdateDSController:);
commandSelector["Guitar Grip: Yellow"] = @selector(cmdUpdateDSController:);
commandSelector["Guitar Grip: Blue"] = @selector(cmdUpdateDSController:);
commandSelector["Piano: C"] = @selector(cmdUpdateDSController:);
commandSelector["Piano: C#"] = @selector(cmdUpdateDSController:);
commandSelector["Piano: D"] = @selector(cmdUpdateDSController:);
commandSelector["Piano: D#"] = @selector(cmdUpdateDSController:);
commandSelector["Piano: E"] = @selector(cmdUpdateDSController:);
commandSelector["Piano: F"] = @selector(cmdUpdateDSController:);
commandSelector["Piano: F#"] = @selector(cmdUpdateDSController:);
commandSelector["Piano: G"] = @selector(cmdUpdateDSController:);
commandSelector["Piano: G#"] = @selector(cmdUpdateDSController:);
commandSelector["Piano: A"] = @selector(cmdUpdateDSController:);
commandSelector["Piano: A#"] = @selector(cmdUpdateDSController:);
commandSelector["Piano: B"] = @selector(cmdUpdateDSController:);
commandSelector["Piano: High C"] = @selector(cmdUpdateDSController:);
commandSelector["Paddle"] = @selector(cmdUpdateDSController:);
commandSelector["Load State Slot"] = @selector(cmdLoadEmuSaveStateSlot:);
commandSelector["Save State Slot"] = @selector(cmdSaveEmuSaveStateSlot:);
commandSelector["Copy Screen"] = @selector(cmdCopyScreen:);
@ -905,6 +1143,29 @@ static std::tr1::unordered_map<unsigned short, std::string> keyboardNameTable; /
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: DSharp", DSControllerState_Piano_DSharp);
CommandAttributes cmdPianoE = NewCommandAttributesForDSControl("Piano: E", DSControllerState_Piano_E);
CommandAttributes cmdPianoF = NewCommandAttributesForDSControl("Piano: F", DSControllerState_Piano_F);
CommandAttributes cmdPianoFSharp = NewCommandAttributesForDSControl("Piano: FSharp", DSControllerState_Piano_FSharp);
CommandAttributes cmdPianoG = NewCommandAttributesForDSControl("Piano: G", DSControllerState_Piano_G);
CommandAttributes cmdPianoGSharp = NewCommandAttributesForDSControl("Piano: GSharp", DSControllerState_Piano_GSharp);
CommandAttributes cmdPianoA = NewCommandAttributesForDSControl("Piano: A", DSControllerState_Piano_A);
CommandAttributes cmdPianoASharp = NewCommandAttributesForDSControl("Piano: ASharp", DSControllerState_Piano_ASharp);
CommandAttributes cmdPianoB = NewCommandAttributesForDSControl("Piano: B", DSControllerState_Piano_B);
CommandAttributes cmdPianoHighC = NewCommandAttributesForDSControl("Piano: High C", DSControllerState_Piano_HighC);
CommandAttributes cmdPaddle = NewCommandAttributesForDSControl("Paddle", DSControllerState_Paddle);
cmdPaddle.useInputForScalar = false;
cmdPaddle.intValue[1] = 0;
cmdPaddle.floatValue[0] = 0.0f;
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"]);
@ -946,6 +1207,25 @@ static std::tr1::unordered_map<unsigned short, std::string> keyboardNameTable; /
defaultCommandAttributes["Debug"] = cmdDSControlDebug;
defaultCommandAttributes["Lid"] = cmdDSControlLid;
defaultCommandAttributes["Guitar Grip: Green"] = cmdGuitarGripGreen;
defaultCommandAttributes["Guitar Grip: Red"] = cmdGuitarGripRed;
defaultCommandAttributes["Guitar Grip: Yellow"] = cmdGuitarGripYellow;
defaultCommandAttributes["Guitar Grip: Blue"] = cmdGuitarGripBlue;
defaultCommandAttributes["Piano: C"] = cmdPianoC;
defaultCommandAttributes["Piano: C#"] = cmdPianoCSharp;
defaultCommandAttributes["Piano: D"] = cmdPianoD;
defaultCommandAttributes["Piano: D#"] = cmdPianoDSharp;
defaultCommandAttributes["Piano: E"] = cmdPianoE;
defaultCommandAttributes["Piano: F"] = cmdPianoF;
defaultCommandAttributes["Piano: F#"] = cmdPianoFSharp;
defaultCommandAttributes["Piano: G"] = cmdPianoG;
defaultCommandAttributes["Piano: G#"] = cmdPianoGSharp;
defaultCommandAttributes["Piano: A"] = cmdPianoA;
defaultCommandAttributes["Piano: A#"] = cmdPianoASharp;
defaultCommandAttributes["Piano: B"] = cmdPianoB;
defaultCommandAttributes["Piano: High C"] = cmdPianoHighC;
defaultCommandAttributes["Paddle"] = cmdPaddle;
defaultCommandAttributes["Load State Slot"] = cmdLoadEmuSaveStateSlot;
defaultCommandAttributes["Save State Slot"] = cmdSaveEmuSaveStateSlot;
defaultCommandAttributes["Copy Screen"] = cmdCopyScreen;
@ -1458,6 +1738,27 @@ static std::tr1::unordered_map<unsigned short, std::string> keyboardNameTable; /
break;
}
}
else if (strncmp(commandTag, "Paddle", INPUT_HANDLER_STRING_LENGTH) == 0)
{
const BOOL useInputForScalar = [(NSNumber *)[deviceInfo valueForKey:@"useInputForScalar"] boolValue];
if (useInputForScalar)
{
inputSummary = @"Direct Control";
}
else
{
const NSInteger paddleRelativeAdjustment = [(NSNumber *)[deviceInfo valueForKey:@"intValue1"] integerValue];
if (paddleRelativeAdjustment > 0)
{
inputSummary = [NSString stringWithFormat:@"Paddle Adjust: +%ld", (long)paddleRelativeAdjustment];
}
else
{
inputSummary = [NSString stringWithFormat:@"Paddle Adjust: %ld", (long)paddleRelativeAdjustment];
}
}
}
if (inputSummary == nil)
{
@ -1564,7 +1865,7 @@ static std::tr1::unordered_map<unsigned short, std::string> keyboardNameTable; /
// Convert the audio buffer to 7-bit unsigned PCM.
buffer = theGenerator.getBuffer();
for (SInt64 i = 0; i < bufferSize; i++)
for (size_t i = 0; i < bufferSize; i++)
{
*(buffer+i) >>= 1;
}
@ -1673,7 +1974,6 @@ CommandAttributes NewCommandAttributesForDSControl(const char *commandTag, const
{
CommandAttributes cmdAttr = NewCommandAttributesForSelector(commandTag, @selector(cmdUpdateDSController:));
cmdAttr.intValue[0] = controlID;
cmdAttr.floatValue[0] = 250.0f;
return cmdAttr;
}
@ -1743,6 +2043,7 @@ NSMutableDictionary* DeviceInfoDictionaryWithCommandAttributes(const CommandAttr
deviceName, @"deviceName",
elementCode, @"elementCode",
elementName, @"elementName",
[NSNumber numberWithBool:NO], @"isElementAnalog",
deviceInfoSummary, @"deviceInfoSummary",
@"", @"inputSettingsSummary",
[NSNumber numberWithInt:cmdAttr->intValue[0]], @"intValue0",

View File

@ -0,0 +1,136 @@
/*
Copyright (C) 2014 DeSmuME Team
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with the this software. If not, see <http://www.gnu.org/licenses/>.
*/
#import <Cocoa/Cocoa.h>
#import "preferencesWindowDelegate.h"
#import "cocoa_slot2.h"
@class InputHIDManager;
#if MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_5
@interface Slot2WindowDelegate : NSObject <NSWindowDelegate, NSTableViewDelegate>
#else
@interface Slot2WindowDelegate : NSObject
#endif
{
NSObject *dummyObject;
NSWindow *window;
NSArrayController *deviceListController;
NSTableView *deviceListTable;
NSBox *deviceSettingsBox;
NSPopUpButton *mpcfFileSearchMenu;
PreferencesWindowDelegate *prefWindowDelegate;
NSView *currentDeviceView;
NSView *viewUnsupported;
NSView *viewNoSelection;
NSView *viewNone;
NSView *viewAuto;
NSView *viewCompactFlash;
NSView *viewRumblePak;
NSView *viewGBACartridge;
NSView *viewGuitarGrip;
NSView *viewMemoryExpansionPack;
NSView *viewPiano;
NSView *viewPaddleController;
NSView *viewPassME;
CocoaDSSlot2Device *selectedDevice;
CocoaDSSlot2Manager *deviceManager;
InputHIDManager *hidManager;
NSString *autoSelectedDeviceText;
NSURL *mpcfFolderURL;
NSURL *mpcfDiskImageURL;
NSURL *gbaCartridgeURL;
NSURL *gbaSRamURL;
}
@property (readonly) IBOutlet NSObject *dummyObject;
@property (readonly) IBOutlet NSWindow *window;
@property (readonly) IBOutlet NSArrayController *deviceListController;
@property (readonly) IBOutlet NSTableView *deviceListTable;
@property (readonly) IBOutlet NSBox *deviceSettingsBox;
@property (readonly) IBOutlet NSPopUpButton *mpcfFileSearchMenu;
@property (readonly) IBOutlet PreferencesWindowDelegate *prefWindowDelegate;
@property (readonly) IBOutlet NSView *viewUnsupported;
@property (readonly) IBOutlet NSView *viewNoSelection;
@property (readonly) IBOutlet NSView *viewNone;
@property (readonly) IBOutlet NSView *viewAuto;
@property (readonly) IBOutlet NSView *viewCompactFlash;
@property (readonly) IBOutlet NSView *viewRumblePak;
@property (readonly) IBOutlet NSView *viewGBACartridge;
@property (readonly) IBOutlet NSView *viewGuitarGrip;
@property (readonly) IBOutlet NSView *viewMemoryExpansionPack;
@property (readonly) IBOutlet NSView *viewPiano;
@property (readonly) IBOutlet NSView *viewPaddleController;
@property (readonly) IBOutlet NSView *viewPassME;
@property (retain) CocoaDSSlot2Device *selectedDevice;
@property (retain) CocoaDSSlot2Manager *deviceManager;
@property (retain) InputHIDManager *hidManager;
@property (retain) NSString *autoSelectedDeviceText;
@property (retain) NSURL *mpcfFolderURL;
@property (retain) NSURL *mpcfDiskImageURL;
@property (assign) NSString *mpcfFolderName;
@property (assign) NSString *mpcfFolderPath;
@property (assign) NSString *mpcfDiskImageName;
@property (assign) NSString *mpcfDiskImagePath;
@property (retain) NSURL *gbaCartridgeURL;
@property (assign) NSString *gbaCartridgeName;
@property (assign) NSString *gbaCartridgePath;
@property (retain) NSURL *gbaSRamURL;
@property (assign) NSString *gbaSRamName;
@property (assign) NSString *gbaSRamPath;
- (IBAction) applySettings:(id)sender;
- (IBAction) showInputPreferences:(id)sender;
- (void) update;
- (void) selectDeviceByType:(NSInteger)theType;
- (void) setDeviceViewByDevice:(CocoaDSSlot2Device *)theDevice;
#pragma mark -
#pragma mark Auto
#pragma mark -
#pragma mark Compact Flash
- (IBAction) chooseMPCFPath:(id)sender;
- (void) chooseMPCFPathDidEnd:(NSOpenPanel *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo;
#pragma mark -
#pragma mark GBA Cartridge
- (IBAction) chooseGbaCartridgePath:(id)sender;
- (void) chooseGbaCartridgePathDidEnd:(NSOpenPanel *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo;
- (IBAction) chooseGbaSRamPath:(id)sender;
- (void) chooseGbaSRamPathDidEnd:(NSOpenPanel *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo;
- (IBAction) clearSRamPath:(id)sender;
- (BOOL) isGbaSRamWithCartridge;
#pragma mark -
#pragma mark Rumble Pak
- (IBAction) testRumble:(id)sender;
- (void) sendForceFeedback:(NSNotification *)aNotification;
#pragma mark -
#pragma mark Paddle
- (void) setPaddleDirectWithScalar:(float)scalar;
- (void) setPaddleRelativeWithInteger:(NSInteger)value;
@end

View File

@ -0,0 +1,722 @@
/*
Copyright (C) 2014 DeSmuME Team
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with the this software. If not, see <http://www.gnu.org/licenses/>.
*/
#import "Slot2WindowDelegate.h"
#import "InputManager.h"
#import "preferencesWindowDelegate.h"
#import "cocoa_globals.h"
#import "cocoa_util.h"
@implementation Slot2WindowDelegate
@synthesize dummyObject;
@synthesize window;
@synthesize deviceListController;
@synthesize deviceListTable;
@synthesize deviceSettingsBox;
@synthesize mpcfFileSearchMenu;
@synthesize prefWindowDelegate;
@synthesize viewUnsupported;
@synthesize viewNoSelection;
@synthesize viewNone;
@synthesize viewAuto;
@synthesize viewCompactFlash;
@synthesize viewRumblePak;
@synthesize viewGBACartridge;
@synthesize viewGuitarGrip;
@synthesize viewMemoryExpansionPack;
@synthesize viewPiano;
@synthesize viewPaddleController;
@synthesize viewPassME;
@synthesize selectedDevice;
@synthesize deviceManager;
@synthesize hidManager;
@synthesize autoSelectedDeviceText;
@dynamic mpcfFolderURL;
@dynamic mpcfDiskImageURL;
@dynamic mpcfFolderName;
@dynamic mpcfFolderPath;
@dynamic mpcfDiskImageName;
@dynamic mpcfDiskImagePath;
@dynamic gbaCartridgeURL;
@dynamic gbaCartridgeName;
@dynamic gbaCartridgePath;
@synthesize gbaSRamURL;
- (id)init
{
self = [super init];
if(self == nil)
{
return nil;
}
deviceManager = [[[[CocoaDSSlot2Manager alloc] init] retain] autorelease];
hidManager = nil;
currentDeviceView = viewNoSelection;
autoSelectedDeviceText = @"";
mpcfFolderURL = nil;
mpcfDiskImageURL = nil;
gbaCartridgeURL = nil;
gbaSRamURL = nil;
// This needs to respond to force feedback notifications.
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(sendForceFeedback:)
name:@"org.desmume.DeSmuME.sendForceFeedback"
object:nil];
return self;
}
- (void)dealloc
{
[self setDeviceManager:nil];
[self setHidManager:nil];
[self setMpcfFolderURL:nil];
[self setMpcfDiskImageURL:nil];
[self setGbaCartridgeURL:nil];
[self setGbaSRamURL:nil];
[super dealloc];
}
- (IBAction) applySettings:(id)sender
{
const NDS_SLOT2_TYPE selectedDeviceType = (selectedDevice != nil) ? [selectedDevice type] : NDS_SLOT2_NONE;
if (selectedDeviceType == NDS_SLOT2_CFLASH)
{
NSURL *theURL = nil;
NSInteger mpcfPathOption = [[NSUserDefaults standardUserDefaults] integerForKey:@"Slot2_MPCF_PathOption"];
switch (mpcfPathOption)
{
case MPCF_OPTION_LOAD_WITH_ROM:
theURL = nil;
break;
case MPCF_OPTION_LOAD_DIRECTORY:
theURL = mpcfFolderURL;
break;
case MPCF_OPTION_LOAD_DISK_IMAGE:
theURL = mpcfDiskImageURL;
break;
default:
break;
}
[deviceManager setMpcfFileSearchURL:theURL];
}
else if (selectedDeviceType == NDS_SLOT2_GBACART)
{
[deviceManager setGbaCartridgeURL:gbaCartridgeURL];
[deviceManager setGbaSRamURL:gbaSRamURL];
}
[[self deviceManager] setCurrentDevice:selectedDevice];
[[NSUserDefaults standardUserDefaults] setInteger:[selectedDevice type] forKey:@"Slot2_LoadedDevice"];
}
- (IBAction) showInputPreferences:(id)sender
{
[[prefWindowDelegate toolbar] setSelectedItemIdentifier:@"Input"];
[prefWindowDelegate changePrefView:sender];
[[prefWindowDelegate window] makeKeyAndOrderFront:sender];
}
- (void) update
{
[deviceManager updateDeviceList];
[deviceListController setContent:[deviceManager deviceList]];
[deviceListController setSelectedObjects:[NSArray arrayWithObject:[deviceManager currentDevice]]];
}
- (void) selectDeviceByType:(NSInteger)theType
{
CocoaDSSlot2Device *theDevice = [[self deviceManager] findDeviceByType:(NDS_SLOT2_TYPE)theType];
if (theDevice != nil)
{
[deviceListController setSelectedObjects:[NSArray arrayWithObject:theDevice]];
}
}
- (void) setDeviceViewByDevice:(CocoaDSSlot2Device *)theDevice
{
NSView *newView = viewNoSelection;
const BOOL isDeviceEnabled = [theDevice enabled];
const NDS_SLOT2_TYPE deviceType = [theDevice type];
if (currentDeviceView == nil)
{
currentDeviceView = viewNoSelection;
}
if (isDeviceEnabled)
{
switch (deviceType)
{
case NDS_SLOT2_NONE:
newView = viewNone;
break;
case NDS_SLOT2_AUTO:
newView = viewAuto;
break;
case NDS_SLOT2_CFLASH:
newView = viewCompactFlash;
break;
case NDS_SLOT2_RUMBLEPAK:
newView = viewRumblePak;
break;
case NDS_SLOT2_GBACART:
newView = viewGBACartridge;
break;
case NDS_SLOT2_GUITARGRIP:
newView = viewGuitarGrip;
break;
case NDS_SLOT2_EXPMEMORY:
newView = viewMemoryExpansionPack;
break;
case NDS_SLOT2_EASYPIANO:
newView = viewPiano;
break;
case NDS_SLOT2_PADDLE:
newView = viewPaddleController;
break;
case NDS_SLOT2_PASSME:
newView = viewPassME;
break;
default:
break;
}
}
else
{
newView = viewUnsupported;
}
if (newView != nil)
{
NSRect frameRect = [currentDeviceView frame];
[currentDeviceView retain];
[deviceSettingsBox replaceSubview:currentDeviceView with:newView];
currentDeviceView = newView;
[currentDeviceView setFrame:frameRect];
}
}
#pragma mark -
#pragma mark Auto
#pragma mark -
#pragma mark Compact Flash
- (void) setMpcfFolderURL:(NSURL *)theURL
{
[mpcfFolderURL release];
mpcfFolderURL = [theURL retain];
NSString *thePath = [mpcfFolderURL path];
[self setMpcfFolderPath:thePath];
[self setMpcfFolderName:[thePath lastPathComponent]];
}
- (NSURL *) mpcfFolderURL
{
return mpcfFolderURL;
}
- (void) setMpcfFolderName:(NSString *)theName
{
// Do nothing. This is for KVO-compliance only.
}
- (NSString *) mpcfFolderName
{
NSString *folderPath = [self mpcfFolderPath];
return (folderPath != nil) ? [folderPath lastPathComponent] : NSSTRING_STATUS_NO_FOLDER_CHOSEN;
}
- (void) setMpcfFolderPath:(NSString *)thePath
{
// Do nothing. This is for KVO-compliance only.
}
- (NSString *) mpcfFolderPath
{
return (mpcfFolderURL != nil) ? [mpcfFolderURL path] : nil;
}
- (void) setMpcfDiskImageURL:(NSURL *)theURL
{
[mpcfDiskImageURL release];
mpcfDiskImageURL = [theURL retain];
NSString *thePath = [mpcfDiskImageURL path];
[self setMpcfDiskImagePath:thePath];
[self setMpcfDiskImageName:[thePath lastPathComponent]];
}
- (NSURL *) mpcfDiskImageURL
{
return mpcfDiskImageURL;
}
- (void) setMpcfDiskImageName:(NSString *)theName
{
// Do nothing. This is for KVO-compliance only.
}
- (NSString *) mpcfDiskImageName
{
NSString *diskImagePath = [self mpcfDiskImagePath];
return (diskImagePath != nil) ? [diskImagePath lastPathComponent] : NSSTRING_STATUS_NO_DISK_IMAGE_CHOSEN;
}
- (void) setMpcfDiskImagePath:(NSString *)thePath
{
// Do nothing. This is for KVO-compliance only.
}
- (NSString *) mpcfDiskImagePath
{
return (mpcfDiskImageURL != nil) ? [mpcfDiskImageURL path] : nil;
}
- (IBAction) chooseMPCFPath:(id)sender
{
const NSInteger mpcfOptionTag = [CocoaDSUtil getIBActionSenderTag:sender];
if (mpcfOptionTag == MPCF_OPTION_LOAD_WITH_ROM)
{
[[NSUserDefaults standardUserDefaults] setInteger:mpcfOptionTag forKey:@"Slot2_MPCF_PathOption"];
return;
}
NSOpenPanel *panel = [NSOpenPanel openPanel];
NSArray *fileTypes = nil;
[panel setResolvesAliases:YES];
[panel setAllowsMultipleSelection:NO];
if (mpcfOptionTag == MPCF_ACTION_CHOOSE_DIRECTORY)
{
[panel setTitle:NSSTRING_TITLE_SELECT_MPCF_FOLDER_PANEL];
[panel setCanChooseDirectories:YES];
[panel setCanChooseFiles:NO];
}
else if (mpcfOptionTag == MPCF_ACTION_CHOOSE_DISK_IMAGE)
{
[panel setTitle:NSSTRING_TITLE_SELECT_MPCF_DISK_IMAGE_PANEL];
[panel setCanChooseDirectories:NO];
[panel setCanChooseFiles:YES];
fileTypes = [NSArray arrayWithObjects:@"dmg", @"img", nil];
}
else
{
return;
}
NSNumber *mpcfOptionNumber = [[NSNumber numberWithInteger:mpcfOptionTag] retain]; // Released in chooseMPCFPathDidEnd:returnCode:contextInfo:
// The NSOpenPanel/NSSavePanel method -(void)beginSheetForDirectory:file:types:modalForWindow:modalDelegate:didEndSelector:contextInfo
// is deprecated in Mac OS X v10.6.
#if MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_5
[panel setAllowedFileTypes:fileTypes];
[panel beginSheetModalForWindow:window
completionHandler:^(NSInteger result) {
[self chooseMPCFPathDidEnd:panel returnCode:result contextInfo:mpcfOptionNumber];
} ];
#else
[panel beginSheetForDirectory:nil
file:nil
types:fileTypes
modalForWindow:window
modalDelegate:self
didEndSelector:@selector(chooseMPCFPathDidEnd:returnCode:contextInfo:)
contextInfo:mpcfOptionNumber];
#endif
}
- (void) chooseMPCFPathDidEnd:(NSOpenPanel *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo
{
const NSInteger prevMpcfOption = [[NSUserDefaults standardUserDefaults] integerForKey:@"Slot2_MPCF_PathOption"];
const NSInteger mpcfOptionTag = [(NSNumber *)contextInfo integerValue];
[(NSNumber *)contextInfo release]; // Retained in chooseMPCFPath:
[sheet orderOut:self];
// Temporarily set the MPCF path option in user defaults to some neutral value first and synchronize.
// When the user defaults are actually set later, this will force the proper state transitions to occur.
[[NSUserDefaults standardUserDefaults] setInteger:mpcfOptionTag forKey:@"Slot2_MPCF_PathOption"];
[[NSUserDefaults standardUserDefaults] synchronize];
if (returnCode == NSCancelButton)
{
[[NSUserDefaults standardUserDefaults] setInteger:prevMpcfOption forKey:@"Slot2_MPCF_PathOption"];
return;
}
NSURL *selectedURL = [[sheet URLs] lastObject]; //hopefully also the first object
if(selectedURL == nil)
{
[[NSUserDefaults standardUserDefaults] setInteger:prevMpcfOption forKey:@"Slot2_MPCF_PathOption"];
return;
}
if (mpcfOptionTag == MPCF_ACTION_CHOOSE_DIRECTORY)
{
[self setMpcfFolderURL:selectedURL];
[[NSUserDefaults standardUserDefaults] setObject:[selectedURL path] forKey:@"Slot2_MPCF_DirectoryPath"];
[[NSUserDefaults standardUserDefaults] setInteger:MPCF_OPTION_LOAD_DIRECTORY forKey:@"Slot2_MPCF_PathOption"];
}
else if (mpcfOptionTag == MPCF_ACTION_CHOOSE_DISK_IMAGE)
{
[self setMpcfDiskImageURL:selectedURL];
[[NSUserDefaults standardUserDefaults] setObject:[selectedURL path] forKey:@"Slot2_MPCF_DiskImagePath"];
[[NSUserDefaults standardUserDefaults] setInteger:MPCF_OPTION_LOAD_DISK_IMAGE forKey:@"Slot2_MPCF_PathOption"];
}
}
#pragma mark -
#pragma mark GBA Cartridge
- (void) setGbaCartridgeURL:(NSURL *)theURL
{
[gbaCartridgeURL release];
gbaCartridgeURL = [theURL retain];
NSString *thePath = [gbaCartridgeURL path];
[self setGbaCartridgePath:thePath];
[self setGbaCartridgeName:[thePath lastPathComponent]];
}
- (NSURL *) gbaCartridgeURL
{
return gbaCartridgeURL;
}
- (void) setGbaCartridgeName:(NSString *)theName
{
// Do nothing. This is for KVO-compliance only.
}
- (NSString *) gbaCartridgeName
{
NSString *gbaCartPath = [self gbaCartridgePath];
return (gbaCartPath != nil) ? [gbaCartPath lastPathComponent] : NSSTRING_STATUS_NO_GBA_CART_CHOSEN;
}
- (void) setGbaCartridgePath:(NSString *)thePath
{
// Do nothing. This is for KVO-compliance only.
}
- (NSString *) gbaCartridgePath
{
return (gbaCartridgeURL != nil) ? [gbaCartridgeURL path] : nil;
}
- (void) setGbaSRamURL:(NSURL *)theURL
{
[gbaSRamURL release];
gbaSRamURL = [theURL retain];
NSString *thePath = [gbaSRamURL path];
[self setGbaSRamPath:thePath];
[self setGbaSRamName:[thePath lastPathComponent]];
}
- (NSURL *) gbaSRamURL
{
return gbaSRamURL;
}
- (void) setGbaSRamName:(NSString *)theName
{
// Do nothing. This is for KVO-compliance only.
}
- (NSString *) gbaSRamName
{
NSString *sramPath = [self gbaSRamPath];
return (sramPath != nil) ? [sramPath lastPathComponent] : NSSTRING_STATUS_NO_GBA_SRAM_CHOSEN;
}
- (void) setGbaSRamPath:(NSString *)thePath
{
// Do nothing. This is for KVO-compliance only.
}
- (NSString *) gbaSRamPath
{
return (gbaSRamURL != nil) ? [gbaSRamURL path] : nil;
}
- (IBAction) chooseGbaCartridgePath:(id)sender
{
NSOpenPanel *panel = [NSOpenPanel openPanel];
[panel setResolvesAliases:YES];
[panel setAllowsMultipleSelection:NO];
[panel setTitle:NSSTRING_TITLE_CHOOSE_GBA_CARTRIDGE_PANEL];
[panel setCanChooseDirectories:NO];
[panel setCanChooseFiles:YES];
NSArray *fileTypes = [NSArray arrayWithObjects:@FILE_EXT_GBA_ROM, nil];
// The NSOpenPanel/NSSavePanel method -(void)beginSheetForDirectory:file:types:modalForWindow:modalDelegate:didEndSelector:contextInfo
// is deprecated in Mac OS X v10.6.
#if MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_5
[panel setAllowedFileTypes:fileTypes];
[panel beginSheetModalForWindow:window
completionHandler:^(NSInteger result) {
[self chooseGbaCartridgePathDidEnd:panel returnCode:result contextInfo:nil];
} ];
#else
[panel beginSheetForDirectory:nil
file:nil
types:fileTypes
modalForWindow:window
modalDelegate:self
didEndSelector:@selector(chooseGbaCartridgePathDidEnd:returnCode:contextInfo:)
contextInfo:nil];
#endif
}
- (void) chooseGbaCartridgePathDidEnd:(NSOpenPanel *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo
{
[sheet orderOut:self];
if (returnCode == NSCancelButton)
{
return;
}
NSURL *selectURL = [[sheet URLs] lastObject]; //hopefully also the first object
if(selectURL == nil)
{
return;
}
[self setGbaCartridgeURL:selectURL];
[[NSUserDefaults standardUserDefaults] setObject:[selectURL path] forKey:@"Slot2_GBA_CartridgePath"];
if ([self isGbaSRamWithCartridge])
{
NSString *sramPath = [NSString stringWithFormat:@"%@.%s", [[selectURL path] stringByDeletingPathExtension], FILE_EXT_GBA_SRAM];
[self setGbaSRamURL:[NSURL fileURLWithPath:sramPath]];
[[NSUserDefaults standardUserDefaults] setObject:sramPath forKey:@"Slot2_GBA_SRAMPath"];
}
else
{
[self clearSRamPath:self];
}
}
- (IBAction) chooseGbaSRamPath:(id)sender
{
NSOpenPanel *panel = [NSOpenPanel openPanel];
[panel setResolvesAliases:YES];
[panel setAllowsMultipleSelection:NO];
[panel setTitle:NSSTRING_TITLE_CHOOSE_GBA_SRAM_PANEL];
[panel setCanChooseDirectories:NO];
[panel setCanChooseFiles:YES];
NSArray *fileTypes = [NSArray arrayWithObjects:@FILE_EXT_GBA_SRAM, nil];
// The NSOpenPanel/NSSavePanel method -(void)beginSheetForDirectory:file:types:modalForWindow:modalDelegate:didEndSelector:contextInfo
// is deprecated in Mac OS X v10.6.
#if MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_5
[panel setAllowedFileTypes:fileTypes];
[panel beginSheetModalForWindow:window
completionHandler:^(NSInteger result) {
[self chooseGbaSRamPathDidEnd:panel returnCode:result contextInfo:nil];
} ];
#else
[panel beginSheetForDirectory:nil
file:nil
types:fileTypes
modalForWindow:window
modalDelegate:self
didEndSelector:@selector(chooseGbaSRamPathDidEnd:returnCode:contextInfo:)
contextInfo:nil];
#endif
}
- (void) chooseGbaSRamPathDidEnd:(NSOpenPanel *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo
{
[sheet orderOut:self];
if (returnCode == NSCancelButton)
{
return;
}
NSURL *selectURL = [[sheet URLs] lastObject]; //hopefully also the first object
if(selectURL == nil)
{
return;
}
[self setGbaSRamURL:selectURL];
[[NSUserDefaults standardUserDefaults] setObject:[selectURL path] forKey:@"Slot2_GBA_SRAMPath"];
}
- (IBAction) clearSRamPath:(id)sender
{
[self setGbaSRamURL:nil];
[[NSUserDefaults standardUserDefaults] setObject:nil forKey:@"Slot2_GBA_SRAMPath"];
}
- (BOOL) isGbaSRamWithCartridge
{
BOOL result = NO;
NSString *gbaCartPath = [self gbaCartridgePath];
if (gbaCartPath == nil)
{
return result;
}
NSString *sramPath = [NSString stringWithFormat:@"%@.%s", [gbaCartPath stringByDeletingPathExtension], FILE_EXT_GBA_SRAM];
NSFileManager *fileManager = [[NSFileManager alloc] init];
result = [fileManager isReadableFileAtPath:sramPath];
[fileManager release];
return result;
}
#pragma mark -
#pragma mark Rumble Pak
- (IBAction) testRumble:(id)sender
{
NSDictionary *ffProperties = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], @"ffState",
[NSNumber numberWithInteger:RUMBLE_ITERATIONS_TEST], @"iterations",
nil];
[[NSNotificationCenter defaultCenter] postNotificationName:@"org.desmume.DeSmuME.sendForceFeedback"
object:nil
userInfo:ffProperties];
}
- (void) sendForceFeedback:(NSNotification *)aNotification
{
if ([self hidManager] == nil)
{
return;
}
NSDictionary *ffProperties = (NSDictionary *)[aNotification userInfo];
const BOOL ffState = [(NSNumber *)[ffProperties valueForKey:@"ffState"] boolValue];
const UInt32 iterations = [(NSNumber *)[ffProperties valueForKey:@"iterations"] unsignedIntValue];
NSMutableArray *inputDeviceList = [[[self hidManager] deviceListController] arrangedObjects];
for (InputHIDDevice *inputDevice in inputDeviceList)
{
if ([inputDevice isForceFeedbackEnabled])
{
if (ffState)
{
[inputDevice startForceFeedbackAndIterate:iterations flags:0];
}
else
{
[inputDevice stopForceFeedback];
}
}
}
}
#pragma mark -
#pragma mark Paddle
- (void) setPaddleDirectWithScalar:(float)scalar
{
// Clamp the input value.
if (scalar < -1.0f)
{
scalar = -1.0f;
}
if (scalar > 1.0f)
{
scalar = 1.0f;
}
// Normalize the input value for the paddle.
const float paddleValue = 256.0f * scalar;
[[self deviceManager] setPaddleValue:(UInt16)paddleValue];
}
- (void) setPaddleRelativeWithInteger:(NSInteger)value
{
NSInteger paddleValue = [[self deviceManager] paddleValue] + value;
[[self deviceManager] setPaddleValue:(UInt16)paddleValue];
}
#pragma mark -
#pragma mark NSTableViewDelegate Protocol
- (void)tableViewSelectionDidChange:(NSNotification *)aNotification
{
NSTableView *table = (NSTableView *)[aNotification object];
NSInteger rowIndex = [table selectedRow];
if (rowIndex >= 0)
{
CocoaDSSlot2Device *theDevice = nil;
NSArray *selectedObjects = [deviceListController selectedObjects];
if ([selectedObjects count] > 0)
{
theDevice = (CocoaDSSlot2Device *)[selectedObjects objectAtIndex:0];
[self setSelectedDevice:theDevice];
}
[self setDeviceViewByDevice:theDevice];
}
else
{
NSRect frameRect = [currentDeviceView frame];
[currentDeviceView retain];
[deviceSettingsBox replaceSubview:currentDeviceView with:viewNoSelection];
currentDeviceView = viewNoSelection;
[currentDeviceView setFrame:frameRect];
}
}
@end

View File

@ -1,6 +1,6 @@
/*
Copyright (C) 2011 Roger Manuel
Copyright (C) 2011-2013 DeSmuME team
Copyright (C) 2011-2014 DeSmuME Team
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -38,12 +38,14 @@
NSObjectController *prefWindowController;
NSObjectController *cheatWindowController;
NSObjectController *cdsCoreController;
NSArrayController *inputDeviceListController;
FileMigrationDelegate *migrationDelegate;
InputManager *inputManager;
NSWindow *prefWindow;
NSWindow *troubleshootingWindow;
NSWindow *cheatListWindow;
NSWindow *slot2Window;
NSView *prefGeneralView;
InputPrefsView *inputPrefsView;
@ -68,11 +70,13 @@
@property (readonly) IBOutlet NSObjectController *prefWindowController;
@property (readonly) IBOutlet NSObjectController *cheatWindowController;
@property (readonly) IBOutlet NSObjectController *cdsCoreController;
@property (readonly) IBOutlet NSArrayController *inputDeviceListController;
@property (readonly) IBOutlet FileMigrationDelegate *migrationDelegate;
@property (readonly) IBOutlet InputManager *inputManager;
@property (readonly) IBOutlet NSWindow *prefWindow;
@property (readonly) IBOutlet NSWindow *troubleshootingWindow;
@property (readonly) IBOutlet NSWindow *cheatListWindow;
@property (readonly) IBOutlet NSWindow *slot2Window;
@property (readonly) IBOutlet NSView *prefGeneralView;
@property (readonly) IBOutlet NSMenu *mLoadStateSlot;
@property (readonly) IBOutlet NSMenu *mSaveStateSlot;

View File

@ -1,6 +1,6 @@
/*
Copyright (C) 2011 Roger Manuel
Copyright (C) 2011-2013 DeSmuME team
Copyright (C) 2011-2014 DeSmuME Team
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -20,6 +20,7 @@
#import "DisplayWindowController.h"
#import "EmuControllerDelegate.h"
#import "FileMigrationDelegate.h"
#import "Slot2WindowDelegate.h"
#import "preferencesWindowDelegate.h"
#import "troubleshootingWindowDelegate.h"
#import "cheatWindowDelegate.h"
@ -40,6 +41,7 @@
@synthesize prefWindow;
@synthesize troubleshootingWindow;
@synthesize cheatListWindow;
@synthesize slot2Window;
@synthesize prefGeneralView;
@synthesize mLoadStateSlot;
@synthesize mSaveStateSlot;
@ -50,6 +52,7 @@
@synthesize romInfoPanelController;
@synthesize prefWindowController;
@synthesize cdsCoreController;
@synthesize inputDeviceListController;
@synthesize cheatWindowController;
@synthesize migrationDelegate;
@synthesize inputManager;
@ -115,6 +118,7 @@
EmuControllerDelegate *emuControl = (EmuControllerDelegate *)[emuControlController content];
PreferencesWindowDelegate *prefWindowDelegate = (PreferencesWindowDelegate *)[prefWindow delegate];
CheatWindowDelegate *cheatWindowDelegate = (CheatWindowDelegate *)[cheatListWindow delegate];
Slot2WindowDelegate *slot2WindowDelegate = (Slot2WindowDelegate *)[slot2Window delegate];
// Create the needed directories in Application Support if they haven't already
// been created.
@ -166,7 +170,8 @@
[self setRomInfoPanelBoxTitleColors];
// Set the preferences window to the general view by default.
[prefWindowDelegate switchContentView:prefGeneralView];
[[prefWindowDelegate toolbar] setSelectedItemIdentifier:@"General"];
[prefWindowDelegate changePrefView:self];
// Setup the slot menu items. We set this up manually instead of through Interface
// Builder because we're assuming an arbitrary number of slot items.
@ -193,6 +198,11 @@
[NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.01]];
}
// Update the SLOT-2 device list after the emulation core is initialized.
[slot2WindowDelegate update];
[slot2WindowDelegate setHidManager:[inputManager hidManager]];
[slot2WindowDelegate setAutoSelectedDeviceText:[[slot2WindowDelegate deviceManager] autoSelectedDeviceName]];
// Start up the threads for our outputs.
[NSThread detachNewThreadSelector:@selector(runThread:) toTarget:newSpeaker withObject:nil];
@ -417,6 +427,7 @@
{
EmuControllerDelegate *emuControl = (EmuControllerDelegate *)[emuControlController content];
PreferencesWindowDelegate *prefWindowDelegate = [prefWindow delegate];
Slot2WindowDelegate *slot2WindowDelegate = (Slot2WindowDelegate *)[slot2Window delegate];
NSMutableDictionary *prefBindings = [prefWindowDelegate bindings];
CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content];
@ -571,7 +582,7 @@
}
else
{
[prefBindings setValue:NSSTRING_STATUS_AUTOLOAD_ROM_NAME_NONE forKey:@"AutoloadRomName"];
[prefBindings setValue:NSSTRING_STATUS_NO_ROM_CHOSEN forKey:@"AutoloadRomName"];
}
// Set the menu for the display rotation.
@ -591,6 +602,15 @@
}
[inputManager setMappingsWithMappings:userMappings];
[[inputManager hidManager] setDeviceListController:inputDeviceListController];
// Set up the default SLOT-2 device.
[slot2WindowDelegate setMpcfFolderURL:[NSURL fileURLWithPath:[[NSUserDefaults standardUserDefaults] stringForKey:@"Slot2_MPCF_DirectoryPath"]]];
[slot2WindowDelegate setMpcfDiskImageURL:[NSURL fileURLWithPath:[[NSUserDefaults standardUserDefaults] stringForKey:@"Slot2_MPCF_DiskImagePath"]]];
[slot2WindowDelegate setGbaCartridgeURL:[NSURL fileURLWithPath:[[NSUserDefaults standardUserDefaults] stringForKey:@"Slot2_GBA_CartridgePath"]]];
[slot2WindowDelegate setGbaSRamURL:[NSURL fileURLWithPath:[[NSUserDefaults standardUserDefaults] stringForKey:@"Slot2_GBA_SRAMPath"]]];
[slot2WindowDelegate selectDeviceByType:[[NSUserDefaults standardUserDefaults] integerForKey:@"Slot2_LoadedDevice"]];
[slot2WindowDelegate applySettings:nil];
// Set up the rest of the emulation-related user defaults.
[emuControl setupUserDefaults];

View File

@ -1,6 +1,6 @@
/*
Copyright (C) 2011 Roger Manuel
Copyright (C) 2012-2013 DeSmuME team
Copyright (C) 2012-2014 DeSmuME Team
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -45,6 +45,7 @@
NSWindow *inputSettingsSaveStateSlot;
NSWindow *inputSettingsSetSpeedLimit;
NSWindow *inputSettingsGPUState;
NSWindow *inputSettingsPaddleController;
InputManager *inputManager;
NSString *configInputTargetID;
@ -75,6 +76,7 @@
@property (readonly) IBOutlet NSWindow *inputSettingsSaveStateSlot;
@property (readonly) IBOutlet NSWindow *inputSettingsSetSpeedLimit;
@property (readonly) IBOutlet NSWindow *inputSettingsGPUState;
@property (readonly) IBOutlet NSWindow *inputSettingsPaddleController;
@property (readonly) IBOutlet InputManager *inputManager;
@property (retain) NSString *configInputTargetID;

View File

@ -1,6 +1,6 @@
/*
Copyright (C) 2011 Roger Manuel
Copyright (C) 2012-2013 DeSmuME team
Copyright (C) 2012-2014 DeSmuME Team
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -42,6 +42,7 @@
@synthesize inputSettingsSaveStateSlot;
@synthesize inputSettingsSetSpeedLimit;
@synthesize inputSettingsGPUState;
@synthesize inputSettingsPaddleController;
@synthesize inputProfileSheet;
@synthesize inputProfileRenameSheet;
@synthesize inputManager;
@ -173,6 +174,7 @@
inputSettingsSaveStateSlot, @"Save State Slot",
inputSettingsSetSpeedLimit, @"Set Speed",
inputSettingsGPUState, @"Enable/Disable GPU State",
inputSettingsPaddleController, @"Paddle",
nil];
}

View File

@ -1,6 +1,6 @@
/*
Copyright (C) 2011 Roger Manuel
Copyright (C) 2012-2013 DeSmuME team
Copyright (C) 2012-2014 DeSmuME Team
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -30,6 +30,7 @@
{
NSObject *dummyObject;
NSWindow *window;
NSToolbar *toolbar;
NSWindow *firmwareConfigSheet;
NSObjectController *cdsCoreController;
NSObjectController *emuController;
@ -42,6 +43,7 @@
NSView *viewDisplay;
NSView *viewSound;
NSView *viewEmulation;
NSDictionary *prefViewDict;
NSPopUpButton *displayRotationMenu;
NSMenuItem *displayRotationMenuCustomItem;
@ -62,6 +64,7 @@
@property (readonly) IBOutlet NSObject *dummyObject;
@property (readonly) IBOutlet NSWindow *window;
@property (readonly) IBOutlet NSToolbar *toolbar;
@property (readonly) IBOutlet NSWindow *firmwareConfigSheet;
@property (readonly) IBOutlet NSObjectController *cdsCoreController;
@property (readonly) IBOutlet NSObjectController *emuController;
@ -83,11 +86,7 @@
@property (readonly) NSMutableDictionary *bindings;
- (IBAction) showGeneralView:(id)sender;
- (IBAction) showInputView:(id)sender;
- (IBAction) showDisplayView:(id)sender;
- (IBAction) showSoundView:(id)sender;
- (IBAction) showEmulationView:(id)sender;
- (IBAction) changePrefView:(id)sender;
- (IBAction) chooseAdvansceneDatabase:(id)sender;
- (void) chooseAdvansceneDatabaseDidEnd:(NSOpenPanel *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo;

View File

@ -1,6 +1,6 @@
/*
Copyright (C) 2011 Roger Manuel
Copyright (C) 2012-2013 DeSmuME team
Copyright (C) 2012-2014 DeSmuME Team
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -32,6 +32,7 @@
@synthesize dummyObject;
@synthesize window;
@synthesize toolbar;
@synthesize firmwareConfigSheet;
@synthesize cdsCoreController;
@synthesize emuController;
@ -113,6 +114,8 @@
[bindings setObject:iconVolumeFull forKey:@"volumeIconImage"];
prefViewDict = nil;
return self;
}
@ -124,34 +127,36 @@
[iconVolumeMute release];
[bindings release];
[videoFilter release];
[prefViewDict release];
[super dealloc];
}
- (IBAction) showGeneralView:(id)sender
- (IBAction) changePrefView:(id)sender
{
[self switchContentView:viewGeneral];
}
- (IBAction) showInputView:(id)sender
{
[self switchContentView:(NSView *)viewInput];
[window makeFirstResponder:(NSView *)viewInput];
}
- (IBAction) showDisplayView:(id)sender
{
[self switchContentView:viewDisplay];
}
- (IBAction) showSoundView:(id)sender
{
[self switchContentView:viewSound];
}
- (IBAction) showEmulationView:(id)sender
{
[self switchContentView:viewEmulation];
if (prefViewDict == nil)
{
// Associates NSView objects to their respective toolbar identifiers.
prefViewDict = [[NSDictionary alloc] initWithObjectsAndKeys:
viewGeneral, @"General",
viewInput, @"Input",
viewDisplay, @"Display",
viewSound, @"Sound",
viewEmulation, @"Emulation",
nil];
}
NSString *toolbarItemIdentifier = [[self toolbar] selectedItemIdentifier];
NSView *theView = [prefViewDict objectForKey:toolbarItemIdentifier];
if (theView != nil)
{
[self switchContentView:theView];
if ([toolbarItemIdentifier isEqualToString:@"Input"])
{
[window makeFirstResponder:theView];
}
}
}
- (IBAction) chooseRomForAutoload:(id)sender