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:
parent
e568f8c4fd
commit
ac146b26d2
|
@ -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;
|
||||
};
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
|
|
@ -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 */,
|
||||
|
|
|
@ -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>
|
||||
|
|
Binary file not shown.
|
@ -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
|
||||
};
|
||||
|
|
|
@ -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
|
||||
};
|
||||
|
||||
|
|
|
@ -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);
|
|
@ -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 |
Binary file not shown.
File diff suppressed because it is too large
Load Diff
|
@ -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;
|
||||
|
||||
|
|
|
@ -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];
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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
|
|
@ -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
|
|
@ -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;
|
||||
|
|
|
@ -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];
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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];
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue