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 */; };
|
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 */; };
|
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 */; };
|
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 */; };
|
AB213D45170CB141006DDB0F /* InputProfileController.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB213D44170CB141006DDB0F /* InputProfileController.mm */; };
|
||||||
AB213D46170CB141006DDB0F /* 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 */; };
|
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 */; };
|
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 */; };
|
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 */; };
|
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 */; };
|
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 */; };
|
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 */; };
|
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 */; };
|
AB7DDA6E173DC399004F3D07 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ABB6AD5C173A3F2B00EC2E8D /* Carbon.framework */; };
|
||||||
AB7DDA6F173DC39E004F3D07 /* 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 */; };
|
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 */; };
|
AB97C554169646D1002AC11B /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB97C553169646D1002AC11B /* Accelerate.framework */; };
|
||||||
AB97D5E516964F3B002AC11B /* 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 */; };
|
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 */; };
|
ABAD104315ACE7A00000EC47 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB350BA41478AC96007165AC /* IOKit.framework */; };
|
||||||
ABAD104415ACE7A00000EC47 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ABC570D4134431DA00E7B0B1 /* OpenGL.framework */; };
|
ABAD104415ACE7A00000EC47 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ABC570D4134431DA00E7B0B1 /* OpenGL.framework */; };
|
||||||
ABAD104515ACE7A00000EC47 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AB0A0D1914AACA9600E83E91 /* libz.dylib */; };
|
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 */; };
|
ABB6AD5D173A3F2B00EC2E8D /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ABB6AD5C173A3F2B00EC2E8D /* Carbon.framework */; };
|
||||||
ABB9212117CEB4110049D4C5 /* slot1comp_protocol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABB9212017CEB4110049D4C5 /* slot1comp_protocol.cpp */; };
|
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 */; };
|
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 */; };
|
ABC3AFCF14B8D16700D5B13D /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AB0A0D1914AACA9600E83E91 /* libz.dylib */; };
|
||||||
ABD0A53A1501AA5A0074A094 /* coreaudiosound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD0A5341501AA5A0074A094 /* coreaudiosound.cpp */; };
|
ABD0A53A1501AA5A0074A094 /* coreaudiosound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD0A5341501AA5A0074A094 /* coreaudiosound.cpp */; };
|
||||||
ABD0A53B1501AA5A0074A094 /* ringbuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD0A5351501AA5A0074A094 /* ringbuffer.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 */; };
|
ABF50ABA169F5FDA0018C08D /* assembler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABF50A7B169F5FDA0018C08D /* assembler.cpp */; };
|
||||||
ABF50ABB169F5FDA0018C08D /* assert.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABF50A7D169F5FDA0018C08D /* assert.cpp */; };
|
ABF50ABB169F5FDA0018C08D /* assert.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABF50A7D169F5FDA0018C08D /* assert.cpp */; };
|
||||||
ABF50ABC169F5FDA0018C08D /* buffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABF50A7F169F5FDA0018C08D /* buffer.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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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; };
|
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; };
|
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>"; };
|
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>"; };
|
ABB9212017CEB4110049D4C5 /* slot1comp_protocol.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = slot1comp_protocol.cpp; sourceTree = "<group>"; };
|
||||||
|
@ -1601,14 +1645,15 @@
|
||||||
files = (
|
files = (
|
||||||
AB2A9A6D1725F00F0062C1A1 /* Accelerate.framework in Frameworks */,
|
AB2A9A6D1725F00F0062C1A1 /* Accelerate.framework in Frameworks */,
|
||||||
AB2A9A6E1725F00F0062C1A1 /* AppKit.framework in Frameworks */,
|
AB2A9A6E1725F00F0062C1A1 /* AppKit.framework in Frameworks */,
|
||||||
|
AB2A9A751725F00F0062C1A1 /* AudioToolbox.framework in Frameworks */,
|
||||||
AB2A9A6F1725F00F0062C1A1 /* AudioUnit.framework in Frameworks */,
|
AB2A9A6F1725F00F0062C1A1 /* AudioUnit.framework in Frameworks */,
|
||||||
|
ABB6AD5D173A3F2B00EC2E8D /* Carbon.framework in Frameworks */,
|
||||||
AB2A9A701725F00F0062C1A1 /* Cocoa.framework in Frameworks */,
|
AB2A9A701725F00F0062C1A1 /* Cocoa.framework in Frameworks */,
|
||||||
AB2A9A711725F00F0062C1A1 /* Foundation.framework in Frameworks */,
|
AB2A9A711725F00F0062C1A1 /* Foundation.framework in Frameworks */,
|
||||||
|
ABEF84851873579700E99ADC /* ForceFeedback.framework in Frameworks */,
|
||||||
AB2A9A721725F00F0062C1A1 /* IOKit.framework in Frameworks */,
|
AB2A9A721725F00F0062C1A1 /* IOKit.framework in Frameworks */,
|
||||||
AB2A9A731725F00F0062C1A1 /* OpenGL.framework in Frameworks */,
|
|
||||||
AB2A9A741725F00F0062C1A1 /* libz.dylib in Frameworks */,
|
AB2A9A741725F00F0062C1A1 /* libz.dylib in Frameworks */,
|
||||||
AB2A9A751725F00F0062C1A1 /* AudioToolbox.framework in Frameworks */,
|
AB2A9A731725F00F0062C1A1 /* OpenGL.framework in Frameworks */,
|
||||||
ABB6AD5D173A3F2B00EC2E8D /* Carbon.framework in Frameworks */,
|
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -1618,14 +1663,15 @@
|
||||||
files = (
|
files = (
|
||||||
AB97D60C16964F54002AC11B /* Accelerate.framework in Frameworks */,
|
AB97D60C16964F54002AC11B /* Accelerate.framework in Frameworks */,
|
||||||
AB2F3C3B15CF9C6000858373 /* AppKit.framework in Frameworks */,
|
AB2F3C3B15CF9C6000858373 /* AppKit.framework in Frameworks */,
|
||||||
|
AB213EC41710D0A0006DDB0F /* AudioToolbox.framework in Frameworks */,
|
||||||
AB2F3C3C15CF9C6000858373 /* AudioUnit.framework in Frameworks */,
|
AB2F3C3C15CF9C6000858373 /* AudioUnit.framework in Frameworks */,
|
||||||
|
AB7DDA70173DC3A3004F3D07 /* Carbon.framework in Frameworks */,
|
||||||
AB2F3C3D15CF9C6000858373 /* Cocoa.framework in Frameworks */,
|
AB2F3C3D15CF9C6000858373 /* Cocoa.framework in Frameworks */,
|
||||||
AB2F3C3E15CF9C6000858373 /* Foundation.framework in Frameworks */,
|
AB2F3C3E15CF9C6000858373 /* Foundation.framework in Frameworks */,
|
||||||
|
ABEF84841873579400E99ADC /* ForceFeedback.framework in Frameworks */,
|
||||||
AB2F3C3F15CF9C6000858373 /* IOKit.framework in Frameworks */,
|
AB2F3C3F15CF9C6000858373 /* IOKit.framework in Frameworks */,
|
||||||
AB2F3C4015CF9C6000858373 /* OpenGL.framework in Frameworks */,
|
|
||||||
AB2F3C4115CF9C6000858373 /* libz.dylib in Frameworks */,
|
AB2F3C4115CF9C6000858373 /* libz.dylib in Frameworks */,
|
||||||
AB213EC41710D0A0006DDB0F /* AudioToolbox.framework in Frameworks */,
|
AB2F3C4015CF9C6000858373 /* OpenGL.framework in Frameworks */,
|
||||||
AB7DDA70173DC3A3004F3D07 /* Carbon.framework in Frameworks */,
|
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -1635,14 +1681,15 @@
|
||||||
files = (
|
files = (
|
||||||
AB97C554169646D1002AC11B /* Accelerate.framework in Frameworks */,
|
AB97C554169646D1002AC11B /* Accelerate.framework in Frameworks */,
|
||||||
AB711F771481C35F009011C8 /* AppKit.framework in Frameworks */,
|
AB711F771481C35F009011C8 /* AppKit.framework in Frameworks */,
|
||||||
|
AB213E991710D074006DDB0F /* AudioToolbox.framework in Frameworks */,
|
||||||
AB711F751481C35F009011C8 /* AudioUnit.framework in Frameworks */,
|
AB711F751481C35F009011C8 /* AudioUnit.framework in Frameworks */,
|
||||||
|
AB7DDA6D173DC38F004F3D07 /* Carbon.framework in Frameworks */,
|
||||||
AB711F741481C35F009011C8 /* Cocoa.framework in Frameworks */,
|
AB711F741481C35F009011C8 /* Cocoa.framework in Frameworks */,
|
||||||
|
AB8C6E57186CD07E00E3EC64 /* ForceFeedback.framework in Frameworks */,
|
||||||
AB711F781481C35F009011C8 /* Foundation.framework in Frameworks */,
|
AB711F781481C35F009011C8 /* Foundation.framework in Frameworks */,
|
||||||
AB711F7B1481C35F009011C8 /* IOKit.framework in Frameworks */,
|
AB711F7B1481C35F009011C8 /* IOKit.framework in Frameworks */,
|
||||||
AB711F761481C35F009011C8 /* OpenGL.framework in Frameworks */,
|
|
||||||
ABC3AFCF14B8D16700D5B13D /* libz.dylib in Frameworks */,
|
ABC3AFCF14B8D16700D5B13D /* libz.dylib in Frameworks */,
|
||||||
AB213E991710D074006DDB0F /* AudioToolbox.framework in Frameworks */,
|
AB711F761481C35F009011C8 /* OpenGL.framework in Frameworks */,
|
||||||
AB7DDA6D173DC38F004F3D07 /* Carbon.framework in Frameworks */,
|
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -1652,14 +1699,15 @@
|
||||||
files = (
|
files = (
|
||||||
AB97D5E516964F3B002AC11B /* Accelerate.framework in Frameworks */,
|
AB97D5E516964F3B002AC11B /* Accelerate.framework in Frameworks */,
|
||||||
AB73AA291507C9F500A310C8 /* AppKit.framework in Frameworks */,
|
AB73AA291507C9F500A310C8 /* AppKit.framework in Frameworks */,
|
||||||
|
AB213EC61710D0A1006DDB0F /* AudioToolbox.framework in Frameworks */,
|
||||||
AB73AA2A1507C9F500A310C8 /* AudioUnit.framework in Frameworks */,
|
AB73AA2A1507C9F500A310C8 /* AudioUnit.framework in Frameworks */,
|
||||||
|
AB7DDA6E173DC399004F3D07 /* Carbon.framework in Frameworks */,
|
||||||
AB73AA2B1507C9F500A310C8 /* Cocoa.framework in Frameworks */,
|
AB73AA2B1507C9F500A310C8 /* Cocoa.framework in Frameworks */,
|
||||||
|
ABEF84721873576300E99ADC /* ForceFeedback.framework in Frameworks */,
|
||||||
AB73AA2C1507C9F500A310C8 /* Foundation.framework in Frameworks */,
|
AB73AA2C1507C9F500A310C8 /* Foundation.framework in Frameworks */,
|
||||||
AB73AA2D1507C9F500A310C8 /* IOKit.framework in Frameworks */,
|
AB73AA2D1507C9F500A310C8 /* IOKit.framework in Frameworks */,
|
||||||
AB73AA2E1507C9F500A310C8 /* OpenGL.framework in Frameworks */,
|
|
||||||
AB73AA2F1507C9F500A310C8 /* libz.dylib in Frameworks */,
|
AB73AA2F1507C9F500A310C8 /* libz.dylib in Frameworks */,
|
||||||
AB213EC61710D0A1006DDB0F /* AudioToolbox.framework in Frameworks */,
|
AB73AA2E1507C9F500A310C8 /* OpenGL.framework in Frameworks */,
|
||||||
AB7DDA6E173DC399004F3D07 /* Carbon.framework in Frameworks */,
|
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -1669,14 +1717,15 @@
|
||||||
files = (
|
files = (
|
||||||
AB97D60916964F48002AC11B /* Accelerate.framework in Frameworks */,
|
AB97D60916964F48002AC11B /* Accelerate.framework in Frameworks */,
|
||||||
ABAD103F15ACE7A00000EC47 /* AppKit.framework in Frameworks */,
|
ABAD103F15ACE7A00000EC47 /* AppKit.framework in Frameworks */,
|
||||||
|
AB213EC51710D0A1006DDB0F /* AudioToolbox.framework in Frameworks */,
|
||||||
ABAD104015ACE7A00000EC47 /* AudioUnit.framework in Frameworks */,
|
ABAD104015ACE7A00000EC47 /* AudioUnit.framework in Frameworks */,
|
||||||
|
AB7DDA6F173DC39E004F3D07 /* Carbon.framework in Frameworks */,
|
||||||
ABAD104115ACE7A00000EC47 /* Cocoa.framework in Frameworks */,
|
ABAD104115ACE7A00000EC47 /* Cocoa.framework in Frameworks */,
|
||||||
ABAD104215ACE7A00000EC47 /* Foundation.framework in Frameworks */,
|
ABAD104215ACE7A00000EC47 /* Foundation.framework in Frameworks */,
|
||||||
|
ABEF84831873578F00E99ADC /* ForceFeedback.framework in Frameworks */,
|
||||||
ABAD104315ACE7A00000EC47 /* IOKit.framework in Frameworks */,
|
ABAD104315ACE7A00000EC47 /* IOKit.framework in Frameworks */,
|
||||||
ABAD104415ACE7A00000EC47 /* OpenGL.framework in Frameworks */,
|
|
||||||
ABAD104515ACE7A00000EC47 /* libz.dylib in Frameworks */,
|
ABAD104515ACE7A00000EC47 /* libz.dylib in Frameworks */,
|
||||||
AB213EC51710D0A1006DDB0F /* AudioToolbox.framework in Frameworks */,
|
ABAD104415ACE7A00000EC47 /* OpenGL.framework in Frameworks */,
|
||||||
AB7DDA6F173DC39E004F3D07 /* Carbon.framework in Frameworks */,
|
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -1703,6 +1752,7 @@
|
||||||
ABD103FF1346652500AF11D1 /* cocoa_input.h */,
|
ABD103FF1346652500AF11D1 /* cocoa_input.h */,
|
||||||
AB3E34C7134AF4500056477A /* cocoa_output.h */,
|
AB3E34C7134AF4500056477A /* cocoa_output.h */,
|
||||||
ABD104001346652500AF11D1 /* cocoa_rom.h */,
|
ABD104001346652500AF11D1 /* cocoa_rom.h */,
|
||||||
|
ABAE2F8218682B8F00C92F4F /* cocoa_slot2.h */,
|
||||||
AB80E050142BC4FA00A52038 /* cocoa_util.h */,
|
AB80E050142BC4FA00A52038 /* cocoa_util.h */,
|
||||||
ABE5DFE3143FB1DA00835AD8 /* cocoa_videofilter.h */,
|
ABE5DFE3143FB1DA00835AD8 /* cocoa_videofilter.h */,
|
||||||
ABD0A5361501AA5A0074A094 /* coreaudiosound.h */,
|
ABD0A5361501AA5A0074A094 /* coreaudiosound.h */,
|
||||||
|
@ -1718,6 +1768,7 @@
|
||||||
ABD104111346652500AF11D1 /* cocoa_input.mm */,
|
ABD104111346652500AF11D1 /* cocoa_input.mm */,
|
||||||
AB3E34C8134AF4500056477A /* cocoa_output.mm */,
|
AB3E34C8134AF4500056477A /* cocoa_output.mm */,
|
||||||
ABD104131346652500AF11D1 /* cocoa_rom.mm */,
|
ABD104131346652500AF11D1 /* cocoa_rom.mm */,
|
||||||
|
ABAE2F8318682B8F00C92F4F /* cocoa_slot2.mm */,
|
||||||
AB80E04C142BC4A800A52038 /* cocoa_util.mm */,
|
AB80E04C142BC4A800A52038 /* cocoa_util.mm */,
|
||||||
ABE5DFE4143FB1DA00835AD8 /* cocoa_videofilter.mm */,
|
ABE5DFE4143FB1DA00835AD8 /* cocoa_videofilter.mm */,
|
||||||
);
|
);
|
||||||
|
@ -1733,6 +1784,7 @@
|
||||||
ABC570D0134431CE00E7B0B1 /* AudioUnit.framework */,
|
ABC570D0134431CE00E7B0B1 /* AudioUnit.framework */,
|
||||||
ABB6AD5C173A3F2B00EC2E8D /* Carbon.framework */,
|
ABB6AD5C173A3F2B00EC2E8D /* Carbon.framework */,
|
||||||
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */,
|
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */,
|
||||||
|
AB8C6E56186CD07E00E3EC64 /* ForceFeedback.framework */,
|
||||||
29B97325FDCFA39411CA2CEA /* Foundation.framework */,
|
29B97325FDCFA39411CA2CEA /* Foundation.framework */,
|
||||||
AB350BA41478AC96007165AC /* IOKit.framework */,
|
AB350BA41478AC96007165AC /* IOKit.framework */,
|
||||||
ABC570D4134431DA00E7B0B1 /* OpenGL.framework */,
|
ABC570D4134431DA00E7B0B1 /* OpenGL.framework */,
|
||||||
|
@ -1827,6 +1879,7 @@
|
||||||
AB3ACB6E14C2361100D7D192 /* inputPrefsView.h */,
|
AB3ACB6E14C2361100D7D192 /* inputPrefsView.h */,
|
||||||
AB213D43170CB141006DDB0F /* InputProfileController.h */,
|
AB213D43170CB141006DDB0F /* InputProfileController.h */,
|
||||||
AB3ACB7014C2361100D7D192 /* preferencesWindowDelegate.h */,
|
AB3ACB7014C2361100D7D192 /* preferencesWindowDelegate.h */,
|
||||||
|
ABAE2F7918682B6C00C92F4F /* Slot2WindowDelegate.h */,
|
||||||
ABA0356E169127BB00817C69 /* troubleshootingWindowDelegate.h */,
|
ABA0356E169127BB00817C69 /* troubleshootingWindowDelegate.h */,
|
||||||
AB3ACB6714C2361100D7D192 /* appDelegate.mm */,
|
AB3ACB6714C2361100D7D192 /* appDelegate.mm */,
|
||||||
AB3ACB6914C2361100D7D192 /* cheatWindowDelegate.mm */,
|
AB3ACB6914C2361100D7D192 /* cheatWindowDelegate.mm */,
|
||||||
|
@ -1837,6 +1890,7 @@
|
||||||
AB3ACB6F14C2361100D7D192 /* inputPrefsView.mm */,
|
AB3ACB6F14C2361100D7D192 /* inputPrefsView.mm */,
|
||||||
AB213D44170CB141006DDB0F /* InputProfileController.mm */,
|
AB213D44170CB141006DDB0F /* InputProfileController.mm */,
|
||||||
AB3ACB7114C2361100D7D192 /* preferencesWindowDelegate.mm */,
|
AB3ACB7114C2361100D7D192 /* preferencesWindowDelegate.mm */,
|
||||||
|
ABAE2F7A18682B6C00C92F4F /* Slot2WindowDelegate.mm */,
|
||||||
ABA0356F169127C000817C69 /* troubleshootingWindowDelegate.mm */,
|
ABA0356F169127C000817C69 /* troubleshootingWindowDelegate.mm */,
|
||||||
);
|
);
|
||||||
path = userinterface;
|
path = userinterface;
|
||||||
|
@ -1923,6 +1977,10 @@
|
||||||
ABC3AF2C14B7F06900D5B13D /* Icon_VolumeMute_16x16.png */,
|
ABC3AF2C14B7F06900D5B13D /* Icon_VolumeMute_16x16.png */,
|
||||||
ABC3AF2D14B7F06900D5B13D /* Icon_VolumeOneThird_16x16.png */,
|
ABC3AF2D14B7F06900D5B13D /* Icon_VolumeOneThird_16x16.png */,
|
||||||
ABC3AF2E14B7F06900D5B13D /* Icon_VolumeTwoThird_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 */,
|
AB0F297914BE70BC009ABC6F /* VideoFilterPreview_64x64.png */,
|
||||||
);
|
);
|
||||||
name = Images;
|
name = Images;
|
||||||
|
@ -2535,6 +2593,10 @@
|
||||||
AB2A99EC1725F00F0062C1A1 /* README.MAC in Resources */,
|
AB2A99EC1725F00F0062C1A1 /* README.MAC in Resources */,
|
||||||
AB2A99ED1725F00F0062C1A1 /* AppIcon_FirmwareConfig.icns in Resources */,
|
AB2A99ED1725F00F0062C1A1 /* AppIcon_FirmwareConfig.icns in Resources */,
|
||||||
AB2A99EE1725F00F0062C1A1 /* DisplayWindow.xib 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;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -2614,6 +2676,10 @@
|
||||||
AB2F3BC215CF9C6000858373 /* README.MAC in Resources */,
|
AB2F3BC215CF9C6000858373 /* README.MAC in Resources */,
|
||||||
AB2F3BC315CF9C6000858373 /* AppIcon_FirmwareConfig.icns in Resources */,
|
AB2F3BC315CF9C6000858373 /* AppIcon_FirmwareConfig.icns in Resources */,
|
||||||
AB700DBA16CDDBC400FBD336 /* DisplayWindow.xib 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;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -2693,6 +2759,10 @@
|
||||||
AB3ACC4914C24D5400D7D192 /* README.MAC in Resources */,
|
AB3ACC4914C24D5400D7D192 /* README.MAC in Resources */,
|
||||||
AB75226F14C7BB51009B97B3 /* AppIcon_FirmwareConfig.icns in Resources */,
|
AB75226F14C7BB51009B97B3 /* AppIcon_FirmwareConfig.icns in Resources */,
|
||||||
AB700DBB16CDDBC400FBD336 /* DisplayWindow.xib 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;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -2772,6 +2842,10 @@
|
||||||
AB73A9B01507C9F500A310C8 /* README.MAC in Resources */,
|
AB73A9B01507C9F500A310C8 /* README.MAC in Resources */,
|
||||||
AB73A9B11507C9F500A310C8 /* AppIcon_FirmwareConfig.icns in Resources */,
|
AB73A9B11507C9F500A310C8 /* AppIcon_FirmwareConfig.icns in Resources */,
|
||||||
AB700DBD16CDDBC400FBD336 /* DisplayWindow.xib 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;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -2851,6 +2925,10 @@
|
||||||
ABAD0FB815ACE7A00000EC47 /* README.MAC in Resources */,
|
ABAD0FB815ACE7A00000EC47 /* README.MAC in Resources */,
|
||||||
ABAD0FB915ACE7A00000EC47 /* AppIcon_FirmwareConfig.icns in Resources */,
|
ABAD0FB915ACE7A00000EC47 /* AppIcon_FirmwareConfig.icns in Resources */,
|
||||||
AB700DBC16CDDBC400FBD336 /* DisplayWindow.xib 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;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -3142,6 +3220,8 @@
|
||||||
AB126D0B182ECB9500EBCF22 /* slot2_passme.cpp in Sources */,
|
AB126D0B182ECB9500EBCF22 /* slot2_passme.cpp in Sources */,
|
||||||
AB53518318313E3100CCD532 /* slot2_auto.cpp in Sources */,
|
AB53518318313E3100CCD532 /* slot2_auto.cpp in Sources */,
|
||||||
AB53518A18313E4E00CCD532 /* slot2.cpp in Sources */,
|
AB53518A18313E4E00CCD532 /* slot2.cpp in Sources */,
|
||||||
|
ABAE2F7F18682B6C00C92F4F /* Slot2WindowDelegate.mm in Sources */,
|
||||||
|
ABAE2F8818682B8F00C92F4F /* cocoa_slot2.mm in Sources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -3282,6 +3362,8 @@
|
||||||
AB126D08182ECB9500EBCF22 /* slot2_passme.cpp in Sources */,
|
AB126D08182ECB9500EBCF22 /* slot2_passme.cpp in Sources */,
|
||||||
AB53518018313E3100CCD532 /* slot2_auto.cpp in Sources */,
|
AB53518018313E3100CCD532 /* slot2_auto.cpp in Sources */,
|
||||||
AB53518718313E4E00CCD532 /* slot2.cpp in Sources */,
|
AB53518718313E4E00CCD532 /* slot2.cpp in Sources */,
|
||||||
|
ABAE2F7B18682B6C00C92F4F /* Slot2WindowDelegate.mm in Sources */,
|
||||||
|
ABAE2F8418682B8F00C92F4F /* cocoa_slot2.mm in Sources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -3346,7 +3428,6 @@
|
||||||
AB711F251481C35F009011C8 /* slot2_expMemory.cpp in Sources */,
|
AB711F251481C35F009011C8 /* slot2_expMemory.cpp in Sources */,
|
||||||
AB711F261481C35F009011C8 /* slot2_gbagame.cpp in Sources */,
|
AB711F261481C35F009011C8 /* slot2_gbagame.cpp in Sources */,
|
||||||
AB711F271481C35F009011C8 /* slot2_guitarGrip.cpp in Sources */,
|
AB711F271481C35F009011C8 /* slot2_guitarGrip.cpp in Sources */,
|
||||||
AB711F281481C35F009011C8 /* slot2_mpcf.cpp in Sources */,
|
|
||||||
AB711F291481C35F009011C8 /* slot2_none.cpp in Sources */,
|
AB711F291481C35F009011C8 /* slot2_none.cpp in Sources */,
|
||||||
AB711F2A1481C35F009011C8 /* slot2_paddle.cpp in Sources */,
|
AB711F2A1481C35F009011C8 /* slot2_paddle.cpp in Sources */,
|
||||||
AB711F2B1481C35F009011C8 /* slot2_piano.cpp in Sources */,
|
AB711F2B1481C35F009011C8 /* slot2_piano.cpp in Sources */,
|
||||||
|
@ -3452,6 +3533,9 @@
|
||||||
AB126D07182ECB9500EBCF22 /* slot2_passme.cpp in Sources */,
|
AB126D07182ECB9500EBCF22 /* slot2_passme.cpp in Sources */,
|
||||||
AB53517F18313E3100CCD532 /* slot2_auto.cpp in Sources */,
|
AB53517F18313E3100CCD532 /* slot2_auto.cpp in Sources */,
|
||||||
AB53518618313E4E00CCD532 /* slot2.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;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -3622,6 +3706,8 @@
|
||||||
AB126D0A182ECB9500EBCF22 /* slot2_passme.cpp in Sources */,
|
AB126D0A182ECB9500EBCF22 /* slot2_passme.cpp in Sources */,
|
||||||
AB53518218313E3100CCD532 /* slot2_auto.cpp in Sources */,
|
AB53518218313E3100CCD532 /* slot2_auto.cpp in Sources */,
|
||||||
AB53518918313E4E00CCD532 /* slot2.cpp in Sources */,
|
AB53518918313E4E00CCD532 /* slot2.cpp in Sources */,
|
||||||
|
ABAE2F7E18682B6C00C92F4F /* Slot2WindowDelegate.mm in Sources */,
|
||||||
|
ABAE2F8718682B8F00C92F4F /* cocoa_slot2.mm in Sources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -3762,6 +3848,8 @@
|
||||||
AB126D09182ECB9500EBCF22 /* slot2_passme.cpp in Sources */,
|
AB126D09182ECB9500EBCF22 /* slot2_passme.cpp in Sources */,
|
||||||
AB53518118313E3100CCD532 /* slot2_auto.cpp in Sources */,
|
AB53518118313E3100CCD532 /* slot2_auto.cpp in Sources */,
|
||||||
AB53518818313E4E00CCD532 /* slot2.cpp in Sources */,
|
AB53518818313E4E00CCD532 /* slot2.cpp in Sources */,
|
||||||
|
ABAE2F7D18682B6C00C92F4F /* Slot2WindowDelegate.mm in Sources */,
|
||||||
|
ABAE2F8618682B8F00C92F4F /* cocoa_slot2.mm in Sources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
|
|
@ -541,6 +541,21 @@
|
||||||
ABC5720D1344346600E7B0B1 /* AppKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 29B97324FDCFA39411CA2CEA /* AppKit.framework */; };
|
ABC5720D1344346600E7B0B1 /* AppKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 29B97324FDCFA39411CA2CEA /* AppKit.framework */; };
|
||||||
ABC572101344347000E7B0B1 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 29B97325FDCFA39411CA2CEA /* Foundation.framework */; };
|
ABC572101344347000E7B0B1 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 29B97325FDCFA39411CA2CEA /* Foundation.framework */; };
|
||||||
ABC719E2138CB25E002827A9 /* DefaultKeyMappings.plist in Resources */ = {isa = PBXBuildFile; fileRef = ABC719E1138CB25E002827A9 /* DefaultKeyMappings.plist */; };
|
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 */; };
|
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 */; };
|
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 */; };
|
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; };
|
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; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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 */,
|
ABC5720D1344346600E7B0B1 /* AppKit.framework in Frameworks */,
|
||||||
ABACB8DD1710B656003B845D /* AudioToolbox.framework in Frameworks */,
|
ABACB8DD1710B656003B845D /* AudioToolbox.framework in Frameworks */,
|
||||||
ABC570D1134431CE00E7B0B1 /* AudioUnit.framework in Frameworks */,
|
ABC570D1134431CE00E7B0B1 /* AudioUnit.framework in Frameworks */,
|
||||||
|
AB3701E5173A3FBF006E573E /* Carbon.framework in Frameworks */,
|
||||||
8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */,
|
8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */,
|
||||||
ABC572101344347000E7B0B1 /* Foundation.framework in Frameworks */,
|
ABC572101344347000E7B0B1 /* Foundation.framework in Frameworks */,
|
||||||
|
ABC9ED2B187502A2001A7D02 /* ForceFeedback.framework in Frameworks */,
|
||||||
AB350BA51478AC96007165AC /* IOKit.framework in Frameworks */,
|
AB350BA51478AC96007165AC /* IOKit.framework in Frameworks */,
|
||||||
ABC570D5134431DA00E7B0B1 /* OpenGL.framework in Frameworks */,
|
ABC570D5134431DA00E7B0B1 /* OpenGL.framework in Frameworks */,
|
||||||
AB4676F314AB12D60002FF94 /* libz.dylib in Frameworks */,
|
AB4676F314AB12D60002FF94 /* libz.dylib in Frameworks */,
|
||||||
AB3701E5173A3FBF006E573E /* Carbon.framework in Frameworks */,
|
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -1154,6 +1179,7 @@
|
||||||
AB796D6715CDCBA200C59155 /* AudioUnit.framework in Frameworks */,
|
AB796D6715CDCBA200C59155 /* AudioUnit.framework in Frameworks */,
|
||||||
AB74EC8A1738499C0026C41E /* Carbon.framework in Frameworks */,
|
AB74EC8A1738499C0026C41E /* Carbon.framework in Frameworks */,
|
||||||
AB796D6815CDCBA200C59155 /* Cocoa.framework in Frameworks */,
|
AB796D6815CDCBA200C59155 /* Cocoa.framework in Frameworks */,
|
||||||
|
ABC9ED2A1875028E001A7D02 /* ForceFeedback.framework in Frameworks */,
|
||||||
AB796D6915CDCBA200C59155 /* Foundation.framework in Frameworks */,
|
AB796D6915CDCBA200C59155 /* Foundation.framework in Frameworks */,
|
||||||
AB796D6A15CDCBA200C59155 /* IOKit.framework in Frameworks */,
|
AB796D6A15CDCBA200C59155 /* IOKit.framework in Frameworks */,
|
||||||
AB796D6B15CDCBA200C59155 /* OpenGL.framework in Frameworks */,
|
AB796D6B15CDCBA200C59155 /* OpenGL.framework in Frameworks */,
|
||||||
|
@ -1202,6 +1228,7 @@
|
||||||
ABD103FF1346652500AF11D1 /* cocoa_input.h */,
|
ABD103FF1346652500AF11D1 /* cocoa_input.h */,
|
||||||
AB3E34C7134AF4500056477A /* cocoa_output.h */,
|
AB3E34C7134AF4500056477A /* cocoa_output.h */,
|
||||||
ABD104001346652500AF11D1 /* cocoa_rom.h */,
|
ABD104001346652500AF11D1 /* cocoa_rom.h */,
|
||||||
|
ABC9ED2418750244001A7D02 /* cocoa_slot2.h */,
|
||||||
AB80E050142BC4FA00A52038 /* cocoa_util.h */,
|
AB80E050142BC4FA00A52038 /* cocoa_util.h */,
|
||||||
ABE5DFE3143FB1DA00835AD8 /* cocoa_videofilter.h */,
|
ABE5DFE3143FB1DA00835AD8 /* cocoa_videofilter.h */,
|
||||||
AB1B9E611501A78000464647 /* coreaudiosound.h */,
|
AB1B9E611501A78000464647 /* coreaudiosound.h */,
|
||||||
|
@ -1217,6 +1244,7 @@
|
||||||
ABD104111346652500AF11D1 /* cocoa_input.mm */,
|
ABD104111346652500AF11D1 /* cocoa_input.mm */,
|
||||||
AB3E34C8134AF4500056477A /* cocoa_output.mm */,
|
AB3E34C8134AF4500056477A /* cocoa_output.mm */,
|
||||||
ABD104131346652500AF11D1 /* cocoa_rom.mm */,
|
ABD104131346652500AF11D1 /* cocoa_rom.mm */,
|
||||||
|
ABC9ED2518750244001A7D02 /* cocoa_slot2.mm */,
|
||||||
AB80E04C142BC4A800A52038 /* cocoa_util.mm */,
|
AB80E04C142BC4A800A52038 /* cocoa_util.mm */,
|
||||||
ABE5DFE4143FB1DA00835AD8 /* cocoa_videofilter.mm */,
|
ABE5DFE4143FB1DA00835AD8 /* cocoa_videofilter.mm */,
|
||||||
);
|
);
|
||||||
|
@ -1232,6 +1260,7 @@
|
||||||
ABC570D0134431CE00E7B0B1 /* AudioUnit.framework */,
|
ABC570D0134431CE00E7B0B1 /* AudioUnit.framework */,
|
||||||
AB74EC891738499C0026C41E /* Carbon.framework */,
|
AB74EC891738499C0026C41E /* Carbon.framework */,
|
||||||
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */,
|
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */,
|
||||||
|
ABC9ED291875028E001A7D02 /* ForceFeedback.framework */,
|
||||||
29B97325FDCFA39411CA2CEA /* Foundation.framework */,
|
29B97325FDCFA39411CA2CEA /* Foundation.framework */,
|
||||||
AB350BA41478AC96007165AC /* IOKit.framework */,
|
AB350BA41478AC96007165AC /* IOKit.framework */,
|
||||||
ABC570D4134431DA00E7B0B1 /* OpenGL.framework */,
|
ABC570D4134431DA00E7B0B1 /* OpenGL.framework */,
|
||||||
|
@ -1325,6 +1354,7 @@
|
||||||
AB3ACB6E14C2361100D7D192 /* inputPrefsView.h */,
|
AB3ACB6E14C2361100D7D192 /* inputPrefsView.h */,
|
||||||
AB01005C170D07AF00D70FBE /* InputProfileController.h */,
|
AB01005C170D07AF00D70FBE /* InputProfileController.h */,
|
||||||
AB3ACB7014C2361100D7D192 /* preferencesWindowDelegate.h */,
|
AB3ACB7014C2361100D7D192 /* preferencesWindowDelegate.h */,
|
||||||
|
ABC9ED14187501FD001A7D02 /* Slot2WindowDelegate.h */,
|
||||||
ABF2B9F81690412A000FF7C0 /* troubleshootingWindowDelegate.h */,
|
ABF2B9F81690412A000FF7C0 /* troubleshootingWindowDelegate.h */,
|
||||||
AB3ACB6714C2361100D7D192 /* appDelegate.mm */,
|
AB3ACB6714C2361100D7D192 /* appDelegate.mm */,
|
||||||
AB3ACB6914C2361100D7D192 /* cheatWindowDelegate.mm */,
|
AB3ACB6914C2361100D7D192 /* cheatWindowDelegate.mm */,
|
||||||
|
@ -1335,6 +1365,7 @@
|
||||||
AB3ACB6F14C2361100D7D192 /* inputPrefsView.mm */,
|
AB3ACB6F14C2361100D7D192 /* inputPrefsView.mm */,
|
||||||
AB01005D170D07B000D70FBE /* InputProfileController.mm */,
|
AB01005D170D07B000D70FBE /* InputProfileController.mm */,
|
||||||
AB3ACB7114C2361100D7D192 /* preferencesWindowDelegate.mm */,
|
AB3ACB7114C2361100D7D192 /* preferencesWindowDelegate.mm */,
|
||||||
|
ABC9ED15187501FD001A7D02 /* Slot2WindowDelegate.mm */,
|
||||||
ABF2B9FA16904133000FF7C0 /* troubleshootingWindowDelegate.mm */,
|
ABF2B9FA16904133000FF7C0 /* troubleshootingWindowDelegate.mm */,
|
||||||
);
|
);
|
||||||
path = userinterface;
|
path = userinterface;
|
||||||
|
@ -1513,6 +1544,10 @@
|
||||||
ABC3AF2C14B7F06900D5B13D /* Icon_VolumeMute_16x16.png */,
|
ABC3AF2C14B7F06900D5B13D /* Icon_VolumeMute_16x16.png */,
|
||||||
ABC3AF2D14B7F06900D5B13D /* Icon_VolumeOneThird_16x16.png */,
|
ABC3AF2D14B7F06900D5B13D /* Icon_VolumeOneThird_16x16.png */,
|
||||||
ABC3AF2E14B7F06900D5B13D /* Icon_VolumeTwoThird_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 */,
|
AB0F297914BE70BC009ABC6F /* VideoFilterPreview_64x64.png */,
|
||||||
);
|
);
|
||||||
name = Images;
|
name = Images;
|
||||||
|
@ -2008,6 +2043,10 @@
|
||||||
AB3ACC4314C24D5400D7D192 /* README.MAC in Resources */,
|
AB3ACC4314C24D5400D7D192 /* README.MAC in Resources */,
|
||||||
AB75226E14C7BB51009B97B3 /* AppIcon_FirmwareConfig.icns in Resources */,
|
AB75226E14C7BB51009B97B3 /* AppIcon_FirmwareConfig.icns in Resources */,
|
||||||
AB8967DE16D2ED2700F826F1 /* DisplayWindow.xib 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;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -2087,6 +2126,10 @@
|
||||||
AB796CEC15CDCBA200C59155 /* README.MAC in Resources */,
|
AB796CEC15CDCBA200C59155 /* README.MAC in Resources */,
|
||||||
AB796CED15CDCBA200C59155 /* AppIcon_FirmwareConfig.icns in Resources */,
|
AB796CED15CDCBA200C59155 /* AppIcon_FirmwareConfig.icns in Resources */,
|
||||||
AB8967DD16D2ED2700F826F1 /* DisplayWindow.xib 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;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -2359,6 +2402,8 @@
|
||||||
AB107686182ECB29000D6F67 /* slot2_passme.cpp in Sources */,
|
AB107686182ECB29000D6F67 /* slot2_passme.cpp in Sources */,
|
||||||
AB1B702D18313D7700E64141 /* slot2_auto.cpp in Sources */,
|
AB1B702D18313D7700E64141 /* slot2_auto.cpp in Sources */,
|
||||||
AB1B703118313D9000E64141 /* slot2.cpp in Sources */,
|
AB1B703118313D9000E64141 /* slot2.cpp in Sources */,
|
||||||
|
ABC9ED17187501FD001A7D02 /* Slot2WindowDelegate.mm in Sources */,
|
||||||
|
ABC9ED2718750244001A7D02 /* cocoa_slot2.mm in Sources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -2530,6 +2575,8 @@
|
||||||
AB107685182ECB29000D6F67 /* slot2_passme.cpp in Sources */,
|
AB107685182ECB29000D6F67 /* slot2_passme.cpp in Sources */,
|
||||||
AB1B702C18313D7700E64141 /* slot2_auto.cpp in Sources */,
|
AB1B702C18313D7700E64141 /* slot2_auto.cpp in Sources */,
|
||||||
AB1B703018313D9000E64141 /* slot2.cpp in Sources */,
|
AB1B703018313D9000E64141 /* slot2.cpp in Sources */,
|
||||||
|
ABC9ED16187501FD001A7D02 /* Slot2WindowDelegate.mm in Sources */,
|
||||||
|
ABC9ED2618750244001A7D02 /* cocoa_slot2.mm in Sources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -2691,6 +2738,7 @@
|
||||||
AB1B702E18313D7700E64141 /* slot2_auto.cpp in Sources */,
|
AB1B702E18313D7700E64141 /* slot2_auto.cpp in Sources */,
|
||||||
AB1B703218313D9000E64141 /* slot2.cpp in Sources */,
|
AB1B703218313D9000E64141 /* slot2.cpp in Sources */,
|
||||||
AB4806BC18472EF20085F59B /* cocoa_cheat.mm in Sources */,
|
AB4806BC18472EF20085F59B /* cocoa_cheat.mm in Sources */,
|
||||||
|
ABC9ED2818750244001A7D02 /* cocoa_slot2.mm in Sources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
|
|
@ -8,6 +8,8 @@
|
||||||
|
|
||||||
/* Begin PBXBuildFile section */
|
/* Begin PBXBuildFile section */
|
||||||
8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
|
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 */; };
|
AB00E87B14205EAE00DE561F /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = AB00E87914205EAE00DE561F /* InfoPlist.strings */; };
|
||||||
AB00E87E14205EBC00DE561F /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = AB00E87C14205EBC00DE561F /* MainMenu.xib */; };
|
AB00E87E14205EBC00DE561F /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = AB00E87C14205EBC00DE561F /* MainMenu.xib */; };
|
||||||
AB01005E170D07B000D70FBE /* InputProfileController.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB01005D170D07B000D70FBE /* InputProfileController.mm */; };
|
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 */; };
|
AB4FCEBD1692AB82000F498F /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB4FCEBC1692AB82000F498F /* Accelerate.framework */; };
|
||||||
AB4FCEBE1692AB82000F498F /* 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 */; };
|
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 */; };
|
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 */; };
|
AB5785F9171760D2002C5FC7 /* cocoa_output.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB3E34C8134AF4500056477A /* cocoa_output.mm */; };
|
||||||
AB5785FD17176AFC002C5FC7 /* OpenEmuBase.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB5785FC17176AFC002C5FC7 /* OpenEmuBase.framework */; };
|
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; };
|
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>"; };
|
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; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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 */,
|
ABC5720D1344346600E7B0B1 /* AppKit.framework in Frameworks */,
|
||||||
ABACB8DD1710B656003B845D /* AudioToolbox.framework in Frameworks */,
|
ABACB8DD1710B656003B845D /* AudioToolbox.framework in Frameworks */,
|
||||||
ABC570D1134431CE00E7B0B1 /* AudioUnit.framework in Frameworks */,
|
ABC570D1134431CE00E7B0B1 /* AudioUnit.framework in Frameworks */,
|
||||||
|
AB3701E5173A3FBF006E573E /* Carbon.framework in Frameworks */,
|
||||||
8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */,
|
8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */,
|
||||||
|
AB564908186E6F1F002740F4 /* ForceFeedback.framework in Frameworks */,
|
||||||
ABC572101344347000E7B0B1 /* Foundation.framework in Frameworks */,
|
ABC572101344347000E7B0B1 /* Foundation.framework in Frameworks */,
|
||||||
AB350BA51478AC96007165AC /* IOKit.framework in Frameworks */,
|
AB350BA51478AC96007165AC /* IOKit.framework in Frameworks */,
|
||||||
ABC570D5134431DA00E7B0B1 /* OpenGL.framework in Frameworks */,
|
ABC570D5134431DA00E7B0B1 /* OpenGL.framework in Frameworks */,
|
||||||
AB4676F314AB12D60002FF94 /* libz.dylib in Frameworks */,
|
AB4676F314AB12D60002FF94 /* libz.dylib in Frameworks */,
|
||||||
AB3701E5173A3FBF006E573E /* Carbon.framework in Frameworks */,
|
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -1154,6 +1179,7 @@
|
||||||
AB796D6715CDCBA200C59155 /* AudioUnit.framework in Frameworks */,
|
AB796D6715CDCBA200C59155 /* AudioUnit.framework in Frameworks */,
|
||||||
AB74EC8A1738499C0026C41E /* Carbon.framework in Frameworks */,
|
AB74EC8A1738499C0026C41E /* Carbon.framework in Frameworks */,
|
||||||
AB796D6815CDCBA200C59155 /* Cocoa.framework in Frameworks */,
|
AB796D6815CDCBA200C59155 /* Cocoa.framework in Frameworks */,
|
||||||
|
AB564907186E6F0C002740F4 /* ForceFeedback.framework in Frameworks */,
|
||||||
AB796D6915CDCBA200C59155 /* Foundation.framework in Frameworks */,
|
AB796D6915CDCBA200C59155 /* Foundation.framework in Frameworks */,
|
||||||
AB796D6A15CDCBA200C59155 /* IOKit.framework in Frameworks */,
|
AB796D6A15CDCBA200C59155 /* IOKit.framework in Frameworks */,
|
||||||
AB796D6B15CDCBA200C59155 /* OpenGL.framework in Frameworks */,
|
AB796D6B15CDCBA200C59155 /* OpenGL.framework in Frameworks */,
|
||||||
|
@ -1202,6 +1228,7 @@
|
||||||
ABD103FF1346652500AF11D1 /* cocoa_input.h */,
|
ABD103FF1346652500AF11D1 /* cocoa_input.h */,
|
||||||
AB3E34C7134AF4500056477A /* cocoa_output.h */,
|
AB3E34C7134AF4500056477A /* cocoa_output.h */,
|
||||||
ABD104001346652500AF11D1 /* cocoa_rom.h */,
|
ABD104001346652500AF11D1 /* cocoa_rom.h */,
|
||||||
|
AB5648FD186E6EA8002740F4 /* cocoa_slot2.h */,
|
||||||
AB80E050142BC4FA00A52038 /* cocoa_util.h */,
|
AB80E050142BC4FA00A52038 /* cocoa_util.h */,
|
||||||
ABE5DFE3143FB1DA00835AD8 /* cocoa_videofilter.h */,
|
ABE5DFE3143FB1DA00835AD8 /* cocoa_videofilter.h */,
|
||||||
AB1B9E611501A78000464647 /* coreaudiosound.h */,
|
AB1B9E611501A78000464647 /* coreaudiosound.h */,
|
||||||
|
@ -1217,6 +1244,7 @@
|
||||||
ABD104111346652500AF11D1 /* cocoa_input.mm */,
|
ABD104111346652500AF11D1 /* cocoa_input.mm */,
|
||||||
AB3E34C8134AF4500056477A /* cocoa_output.mm */,
|
AB3E34C8134AF4500056477A /* cocoa_output.mm */,
|
||||||
ABD104131346652500AF11D1 /* cocoa_rom.mm */,
|
ABD104131346652500AF11D1 /* cocoa_rom.mm */,
|
||||||
|
AB5648FE186E6EA8002740F4 /* cocoa_slot2.mm */,
|
||||||
AB80E04C142BC4A800A52038 /* cocoa_util.mm */,
|
AB80E04C142BC4A800A52038 /* cocoa_util.mm */,
|
||||||
ABE5DFE4143FB1DA00835AD8 /* cocoa_videofilter.mm */,
|
ABE5DFE4143FB1DA00835AD8 /* cocoa_videofilter.mm */,
|
||||||
);
|
);
|
||||||
|
@ -1232,6 +1260,7 @@
|
||||||
ABC570D0134431CE00E7B0B1 /* AudioUnit.framework */,
|
ABC570D0134431CE00E7B0B1 /* AudioUnit.framework */,
|
||||||
AB74EC891738499C0026C41E /* Carbon.framework */,
|
AB74EC891738499C0026C41E /* Carbon.framework */,
|
||||||
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */,
|
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */,
|
||||||
|
AB564906186E6F0C002740F4 /* ForceFeedback.framework */,
|
||||||
29B97325FDCFA39411CA2CEA /* Foundation.framework */,
|
29B97325FDCFA39411CA2CEA /* Foundation.framework */,
|
||||||
AB350BA41478AC96007165AC /* IOKit.framework */,
|
AB350BA41478AC96007165AC /* IOKit.framework */,
|
||||||
ABC570D4134431DA00E7B0B1 /* OpenGL.framework */,
|
ABC570D4134431DA00E7B0B1 /* OpenGL.framework */,
|
||||||
|
@ -1325,6 +1354,7 @@
|
||||||
AB3ACB6E14C2361100D7D192 /* inputPrefsView.h */,
|
AB3ACB6E14C2361100D7D192 /* inputPrefsView.h */,
|
||||||
AB01005C170D07AF00D70FBE /* InputProfileController.h */,
|
AB01005C170D07AF00D70FBE /* InputProfileController.h */,
|
||||||
AB3ACB7014C2361100D7D192 /* preferencesWindowDelegate.h */,
|
AB3ACB7014C2361100D7D192 /* preferencesWindowDelegate.h */,
|
||||||
|
AB564902186E6EBC002740F4 /* Slot2WindowDelegate.h */,
|
||||||
ABF2B9F81690412A000FF7C0 /* troubleshootingWindowDelegate.h */,
|
ABF2B9F81690412A000FF7C0 /* troubleshootingWindowDelegate.h */,
|
||||||
AB3ACB6714C2361100D7D192 /* appDelegate.mm */,
|
AB3ACB6714C2361100D7D192 /* appDelegate.mm */,
|
||||||
AB3ACB6914C2361100D7D192 /* cheatWindowDelegate.mm */,
|
AB3ACB6914C2361100D7D192 /* cheatWindowDelegate.mm */,
|
||||||
|
@ -1335,6 +1365,7 @@
|
||||||
AB3ACB6F14C2361100D7D192 /* inputPrefsView.mm */,
|
AB3ACB6F14C2361100D7D192 /* inputPrefsView.mm */,
|
||||||
AB01005D170D07B000D70FBE /* InputProfileController.mm */,
|
AB01005D170D07B000D70FBE /* InputProfileController.mm */,
|
||||||
AB3ACB7114C2361100D7D192 /* preferencesWindowDelegate.mm */,
|
AB3ACB7114C2361100D7D192 /* preferencesWindowDelegate.mm */,
|
||||||
|
AB564903186E6EBC002740F4 /* Slot2WindowDelegate.mm */,
|
||||||
ABF2B9FA16904133000FF7C0 /* troubleshootingWindowDelegate.mm */,
|
ABF2B9FA16904133000FF7C0 /* troubleshootingWindowDelegate.mm */,
|
||||||
);
|
);
|
||||||
path = userinterface;
|
path = userinterface;
|
||||||
|
@ -1513,6 +1544,10 @@
|
||||||
ABC3AF2C14B7F06900D5B13D /* Icon_VolumeMute_16x16.png */,
|
ABC3AF2C14B7F06900D5B13D /* Icon_VolumeMute_16x16.png */,
|
||||||
ABC3AF2D14B7F06900D5B13D /* Icon_VolumeOneThird_16x16.png */,
|
ABC3AF2D14B7F06900D5B13D /* Icon_VolumeOneThird_16x16.png */,
|
||||||
ABC3AF2E14B7F06900D5B13D /* Icon_VolumeTwoThird_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 */,
|
AB0F297914BE70BC009ABC6F /* VideoFilterPreview_64x64.png */,
|
||||||
);
|
);
|
||||||
name = Images;
|
name = Images;
|
||||||
|
@ -1952,6 +1987,7 @@
|
||||||
ABB97878144E89CC00793FA3 /* Icon_DeSmuME_32x32.png in Resources */,
|
ABB97878144E89CC00793FA3 /* Icon_DeSmuME_32x32.png in Resources */,
|
||||||
AB350D3B147A1D93007165AC /* HID_usage_strings.plist in Resources */,
|
AB350D3B147A1D93007165AC /* HID_usage_strings.plist in Resources */,
|
||||||
ABBF04A514B515F300E505A0 /* AppIcon_ROMCheats.icns in Resources */,
|
ABBF04A514B515F300E505A0 /* AppIcon_ROMCheats.icns in Resources */,
|
||||||
|
AB564915186E6F67002740F4 /* Image_Piano.png in Resources */,
|
||||||
ABC3AF2F14B7F06900D5B13D /* Icon_VolumeFull_16x16.png in Resources */,
|
ABC3AF2F14B7F06900D5B13D /* Icon_VolumeFull_16x16.png in Resources */,
|
||||||
ABC3AF3014B7F06900D5B13D /* Icon_VolumeMute_16x16.png in Resources */,
|
ABC3AF3014B7F06900D5B13D /* Icon_VolumeMute_16x16.png in Resources */,
|
||||||
ABC3AF3114B7F06900D5B13D /* Icon_VolumeOneThird_16x16.png in Resources */,
|
ABC3AF3114B7F06900D5B13D /* Icon_VolumeOneThird_16x16.png in Resources */,
|
||||||
|
@ -1974,11 +2010,13 @@
|
||||||
AB0F294314BE6FA7009ABC6F /* ColorSwatch_Red_16x16.png in Resources */,
|
AB0F294314BE6FA7009ABC6F /* ColorSwatch_Red_16x16.png in Resources */,
|
||||||
AB0F294414BE6FA7009ABC6F /* ColorSwatch_SeaGreen_16x16.png in Resources */,
|
AB0F294414BE6FA7009ABC6F /* ColorSwatch_SeaGreen_16x16.png in Resources */,
|
||||||
AB0F294514BE6FA7009ABC6F /* ColorSwatch_Turquoise_16x16.png in Resources */,
|
AB0F294514BE6FA7009ABC6F /* ColorSwatch_Turquoise_16x16.png in Resources */,
|
||||||
|
AB564911186E6F67002740F4 /* Image_MemoryExpansionPak.png in Resources */,
|
||||||
AB0F294614BE6FA7009ABC6F /* ColorSwatch_Violet_16x16.png in Resources */,
|
AB0F294614BE6FA7009ABC6F /* ColorSwatch_Violet_16x16.png in Resources */,
|
||||||
AB0F294714BE6FA7009ABC6F /* ColorSwatch_Yellow_16x16.png in Resources */,
|
AB0F294714BE6FA7009ABC6F /* ColorSwatch_Yellow_16x16.png in Resources */,
|
||||||
AB0F296D14BE705D009ABC6F /* Icon_ActionReplay_128x128.png in Resources */,
|
AB0F296D14BE705D009ABC6F /* Icon_ActionReplay_128x128.png in Resources */,
|
||||||
AB0F296E14BE705D009ABC6F /* Icon_CodeBreaker_128x128.png in Resources */,
|
AB0F296E14BE705D009ABC6F /* Icon_CodeBreaker_128x128.png in Resources */,
|
||||||
AB0F297A14BE70BC009ABC6F /* VideoFilterPreview_64x64.png in Resources */,
|
AB0F297A14BE70BC009ABC6F /* VideoFilterPreview_64x64.png in Resources */,
|
||||||
|
AB564913186E6F67002740F4 /* Image_PassME.png in Resources */,
|
||||||
AB0F298C14BE71E0009ABC6F /* Icon_ArrowDown_420x420.png in Resources */,
|
AB0F298C14BE71E0009ABC6F /* Icon_ArrowDown_420x420.png in Resources */,
|
||||||
AB0F298D14BE71E0009ABC6F /* Icon_ArrowLeft_420x420.png in Resources */,
|
AB0F298D14BE71E0009ABC6F /* Icon_ArrowLeft_420x420.png in Resources */,
|
||||||
AB0F298E14BE71E0009ABC6F /* Icon_ArrowRight_420x420.png in Resources */,
|
AB0F298E14BE71E0009ABC6F /* Icon_ArrowRight_420x420.png in Resources */,
|
||||||
|
@ -1991,6 +2029,7 @@
|
||||||
AB0F29AB14BE7213009ABC6F /* Icon_DSButtonSelect_420x420.png in Resources */,
|
AB0F29AB14BE7213009ABC6F /* Icon_DSButtonSelect_420x420.png in Resources */,
|
||||||
AB0F29AC14BE7213009ABC6F /* Icon_DSButtonStart_420x420.png in Resources */,
|
AB0F29AC14BE7213009ABC6F /* Icon_DSButtonStart_420x420.png in Resources */,
|
||||||
AB0F29AD14BE7213009ABC6F /* Icon_DSButtonX_420x420.png in Resources */,
|
AB0F29AD14BE7213009ABC6F /* Icon_DSButtonX_420x420.png in Resources */,
|
||||||
|
AB0038A81872A96700B0B055 /* Image_PaddleController.png in Resources */,
|
||||||
AB0F29AE14BE7213009ABC6F /* Icon_DSButtonY_420x420.png in Resources */,
|
AB0F29AE14BE7213009ABC6F /* Icon_DSButtonY_420x420.png in Resources */,
|
||||||
AB0F29AF14BE7213009ABC6F /* Icon_Emulation_420x420.png in Resources */,
|
AB0F29AF14BE7213009ABC6F /* Icon_Emulation_420x420.png in Resources */,
|
||||||
AB0F29B014BE7213009ABC6F /* Icon_Input_420x420.png in Resources */,
|
AB0F29B014BE7213009ABC6F /* Icon_Input_420x420.png in Resources */,
|
||||||
|
@ -2031,6 +2070,7 @@
|
||||||
AB796CB415CDCBA200C59155 /* Icon_DeSmuME_32x32.png in Resources */,
|
AB796CB415CDCBA200C59155 /* Icon_DeSmuME_32x32.png in Resources */,
|
||||||
AB796CB515CDCBA200C59155 /* HID_usage_strings.plist in Resources */,
|
AB796CB515CDCBA200C59155 /* HID_usage_strings.plist in Resources */,
|
||||||
AB796CB615CDCBA200C59155 /* AppIcon_ROMCheats.icns in Resources */,
|
AB796CB615CDCBA200C59155 /* AppIcon_ROMCheats.icns in Resources */,
|
||||||
|
AB564914186E6F67002740F4 /* Image_Piano.png in Resources */,
|
||||||
AB796CB715CDCBA200C59155 /* Icon_VolumeFull_16x16.png in Resources */,
|
AB796CB715CDCBA200C59155 /* Icon_VolumeFull_16x16.png in Resources */,
|
||||||
AB796CB815CDCBA200C59155 /* Icon_VolumeMute_16x16.png in Resources */,
|
AB796CB815CDCBA200C59155 /* Icon_VolumeMute_16x16.png in Resources */,
|
||||||
AB796CB915CDCBA200C59155 /* Icon_VolumeOneThird_16x16.png in Resources */,
|
AB796CB915CDCBA200C59155 /* Icon_VolumeOneThird_16x16.png in Resources */,
|
||||||
|
@ -2053,11 +2093,13 @@
|
||||||
AB796CCA15CDCBA200C59155 /* ColorSwatch_Red_16x16.png in Resources */,
|
AB796CCA15CDCBA200C59155 /* ColorSwatch_Red_16x16.png in Resources */,
|
||||||
AB796CCB15CDCBA200C59155 /* ColorSwatch_SeaGreen_16x16.png in Resources */,
|
AB796CCB15CDCBA200C59155 /* ColorSwatch_SeaGreen_16x16.png in Resources */,
|
||||||
AB796CCC15CDCBA200C59155 /* ColorSwatch_Turquoise_16x16.png in Resources */,
|
AB796CCC15CDCBA200C59155 /* ColorSwatch_Turquoise_16x16.png in Resources */,
|
||||||
|
AB564910186E6F67002740F4 /* Image_MemoryExpansionPak.png in Resources */,
|
||||||
AB796CCD15CDCBA200C59155 /* ColorSwatch_Violet_16x16.png in Resources */,
|
AB796CCD15CDCBA200C59155 /* ColorSwatch_Violet_16x16.png in Resources */,
|
||||||
AB796CCE15CDCBA200C59155 /* ColorSwatch_Yellow_16x16.png in Resources */,
|
AB796CCE15CDCBA200C59155 /* ColorSwatch_Yellow_16x16.png in Resources */,
|
||||||
AB796CCF15CDCBA200C59155 /* Icon_ActionReplay_128x128.png in Resources */,
|
AB796CCF15CDCBA200C59155 /* Icon_ActionReplay_128x128.png in Resources */,
|
||||||
AB796CD015CDCBA200C59155 /* Icon_CodeBreaker_128x128.png in Resources */,
|
AB796CD015CDCBA200C59155 /* Icon_CodeBreaker_128x128.png in Resources */,
|
||||||
AB796CD115CDCBA200C59155 /* VideoFilterPreview_64x64.png in Resources */,
|
AB796CD115CDCBA200C59155 /* VideoFilterPreview_64x64.png in Resources */,
|
||||||
|
AB564912186E6F67002740F4 /* Image_PassME.png in Resources */,
|
||||||
AB796CD215CDCBA200C59155 /* Icon_ArrowDown_420x420.png in Resources */,
|
AB796CD215CDCBA200C59155 /* Icon_ArrowDown_420x420.png in Resources */,
|
||||||
AB796CD315CDCBA200C59155 /* Icon_ArrowLeft_420x420.png in Resources */,
|
AB796CD315CDCBA200C59155 /* Icon_ArrowLeft_420x420.png in Resources */,
|
||||||
AB796CD415CDCBA200C59155 /* Icon_ArrowRight_420x420.png in Resources */,
|
AB796CD415CDCBA200C59155 /* Icon_ArrowRight_420x420.png in Resources */,
|
||||||
|
@ -2070,6 +2112,7 @@
|
||||||
AB796CDB15CDCBA200C59155 /* Icon_DSButtonSelect_420x420.png in Resources */,
|
AB796CDB15CDCBA200C59155 /* Icon_DSButtonSelect_420x420.png in Resources */,
|
||||||
AB796CDC15CDCBA200C59155 /* Icon_DSButtonStart_420x420.png in Resources */,
|
AB796CDC15CDCBA200C59155 /* Icon_DSButtonStart_420x420.png in Resources */,
|
||||||
AB796CDD15CDCBA200C59155 /* Icon_DSButtonX_420x420.png in Resources */,
|
AB796CDD15CDCBA200C59155 /* Icon_DSButtonX_420x420.png in Resources */,
|
||||||
|
AB0038A71872A96700B0B055 /* Image_PaddleController.png in Resources */,
|
||||||
AB796CDE15CDCBA200C59155 /* Icon_DSButtonY_420x420.png in Resources */,
|
AB796CDE15CDCBA200C59155 /* Icon_DSButtonY_420x420.png in Resources */,
|
||||||
AB796CDF15CDCBA200C59155 /* Icon_Emulation_420x420.png in Resources */,
|
AB796CDF15CDCBA200C59155 /* Icon_Emulation_420x420.png in Resources */,
|
||||||
AB796CE015CDCBA200C59155 /* Icon_Input_420x420.png in Resources */,
|
AB796CE015CDCBA200C59155 /* Icon_Input_420x420.png in Resources */,
|
||||||
|
@ -2267,6 +2310,7 @@
|
||||||
ABD1FF151345AC9C00AF11D1 /* slot2_rumblepak.cpp in Sources */,
|
ABD1FF151345AC9C00AF11D1 /* slot2_rumblepak.cpp in Sources */,
|
||||||
ABD1041F1346652500AF11D1 /* sndOSX.cpp in Sources */,
|
ABD1041F1346652500AF11D1 /* sndOSX.cpp in Sources */,
|
||||||
AB1F468413A0ADE400B80DE6 /* SndOut.cpp in Sources */,
|
AB1F468413A0ADE400B80DE6 /* SndOut.cpp in Sources */,
|
||||||
|
AB564905186E6EBC002740F4 /* Slot2WindowDelegate.mm in Sources */,
|
||||||
ABAD3E7813AF1D6D00502E1E /* SoundTouch.cpp in Sources */,
|
ABAD3E7813AF1D6D00502E1E /* SoundTouch.cpp in Sources */,
|
||||||
AB9038B017C5ED2200F410BD /* slot1_retail_auto.cpp in Sources */,
|
AB9038B017C5ED2200F410BD /* slot1_retail_auto.cpp in Sources */,
|
||||||
ABD1FEFA1345AC8400AF11D1 /* SPU.cpp in Sources */,
|
ABD1FEFA1345AC8400AF11D1 /* SPU.cpp in Sources */,
|
||||||
|
@ -2342,6 +2386,7 @@
|
||||||
AB405682169F5DCC0016AC3E /* x86compilerfunc.cpp in Sources */,
|
AB405682169F5DCC0016AC3E /* x86compilerfunc.cpp in Sources */,
|
||||||
AB405685169F5DCC0016AC3E /* x86compileritem.cpp in Sources */,
|
AB405685169F5DCC0016AC3E /* x86compileritem.cpp in Sources */,
|
||||||
AB405688169F5DCC0016AC3E /* x86cpuinfo.cpp in Sources */,
|
AB405688169F5DCC0016AC3E /* x86cpuinfo.cpp in Sources */,
|
||||||
|
AB564900186E6EA8002740F4 /* cocoa_slot2.mm in Sources */,
|
||||||
AB40568B169F5DCC0016AC3E /* x86defs.cpp in Sources */,
|
AB40568B169F5DCC0016AC3E /* x86defs.cpp in Sources */,
|
||||||
AB40568E169F5DCC0016AC3E /* x86func.cpp in Sources */,
|
AB40568E169F5DCC0016AC3E /* x86func.cpp in Sources */,
|
||||||
AB405691169F5DCC0016AC3E /* x86operand.cpp in Sources */,
|
AB405691169F5DCC0016AC3E /* x86operand.cpp in Sources */,
|
||||||
|
@ -2389,6 +2434,7 @@
|
||||||
AB796D0115CDCBA200C59155 /* dlditool.cpp in Sources */,
|
AB796D0115CDCBA200C59155 /* dlditool.cpp in Sources */,
|
||||||
AB796D0215CDCBA200C59155 /* driver.cpp in Sources */,
|
AB796D0215CDCBA200C59155 /* driver.cpp in Sources */,
|
||||||
AB796D0315CDCBA200C59155 /* emufat.cpp in Sources */,
|
AB796D0315CDCBA200C59155 /* emufat.cpp in Sources */,
|
||||||
|
AB564904186E6EBC002740F4 /* Slot2WindowDelegate.mm in Sources */,
|
||||||
AB9038B217C5ED2200F410BD /* slot1_retail_mcrom.cpp in Sources */,
|
AB9038B217C5ED2200F410BD /* slot1_retail_mcrom.cpp in Sources */,
|
||||||
AB796D0415CDCBA200C59155 /* emufile.cpp in Sources */,
|
AB796D0415CDCBA200C59155 /* emufile.cpp in Sources */,
|
||||||
AB796D0515CDCBA200C59155 /* fatdir.cpp in Sources */,
|
AB796D0515CDCBA200C59155 /* fatdir.cpp in Sources */,
|
||||||
|
@ -2431,6 +2477,7 @@
|
||||||
AB796D2815CDCBA200C59155 /* slot1.cpp in Sources */,
|
AB796D2815CDCBA200C59155 /* slot1.cpp in Sources */,
|
||||||
AB796D2915CDCBA200C59155 /* slot1_none.cpp in Sources */,
|
AB796D2915CDCBA200C59155 /* slot1_none.cpp in Sources */,
|
||||||
AB2EE12C17D57ED500F68622 /* slot1_retail_mcrom_debug.cpp in Sources */,
|
AB2EE12C17D57ED500F68622 /* slot1_retail_mcrom_debug.cpp in Sources */,
|
||||||
|
AB5648FF186E6EA8002740F4 /* cocoa_slot2.mm in Sources */,
|
||||||
AB796D2A15CDCBA200C59155 /* slot1_r4.cpp in Sources */,
|
AB796D2A15CDCBA200C59155 /* slot1_r4.cpp in Sources */,
|
||||||
AB796D2C15CDCBA200C59155 /* slot1_retail_nand.cpp in Sources */,
|
AB796D2C15CDCBA200C59155 /* slot1_retail_nand.cpp in Sources */,
|
||||||
AB796D2D15CDCBA200C59155 /* slot2_expMemory.cpp in Sources */,
|
AB796D2D15CDCBA200C59155 /* slot2_expMemory.cpp in Sources */,
|
||||||
|
@ -2537,6 +2584,7 @@
|
||||||
isa = PBXSourcesBuildPhase;
|
isa = PBXSourcesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
|
AB564901186E6EA8002740F4 /* cocoa_slot2.mm in Sources */,
|
||||||
ABE9EEEB1501C78700D3FB19 /* fs-linux.cpp in Sources */,
|
ABE9EEEB1501C78700D3FB19 /* fs-linux.cpp in Sources */,
|
||||||
ABCFA9F6178BDE920030C8BA /* encrypt.cpp in Sources */,
|
ABCFA9F6178BDE920030C8BA /* encrypt.cpp in Sources */,
|
||||||
ABB3C66C1501C04F00E0C22E /* NDSGameCore.mm in Sources */,
|
ABB3C66C1501C04F00E0C22E /* NDSGameCore.mm in Sources */,
|
||||||
|
|
|
@ -33,6 +33,7 @@
|
||||||
<string>Enable/Disable Auto Frame Skip</string>
|
<string>Enable/Disable Auto Frame Skip</string>
|
||||||
<string>Enable/Disable Cheats</string>
|
<string>Enable/Disable Cheats</string>
|
||||||
<string>Enable/Disable GPU State</string>
|
<string>Enable/Disable GPU State</string>
|
||||||
|
<string>Paddle</string>
|
||||||
</array>
|
</array>
|
||||||
<key>DefaultInputProfiles</key>
|
<key>DefaultInputProfiles</key>
|
||||||
<array>
|
<array>
|
||||||
|
@ -410,6 +411,8 @@
|
||||||
<array/>
|
<array/>
|
||||||
<key>Enable/Disable GPU State</key>
|
<key>Enable/Disable GPU State</key>
|
||||||
<array/>
|
<array/>
|
||||||
|
<key>Paddle</key>
|
||||||
|
<array/>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
</array>
|
</array>
|
||||||
|
|
Binary file not shown.
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Copyright (C) 2011 Roger Manuel
|
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
|
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
|
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_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_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_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_SAVE_SCREENSHOT_PANEL NSLocalizedString(@"Save Screenshot", nil)
|
||||||
|
|
||||||
#define NSSTRING_TITLE_EXECUTE_CONTROL NSLocalizedString(@"Execute", 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_R4_INSERTED NSLocalizedString(@"R4 cartridge interface inserted.", nil)
|
||||||
#define NSSTRING_STATUS_SLOT1_STANDARD_INSERTED NSLocalizedString(@"Standard retail cartridge 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_MAIN NSLocalizedString(@"Main", nil)
|
||||||
#define NSSTRING_DISPLAYMODE_TOUCH NSLocalizedString(@"Touch", nil)
|
#define NSSTRING_DISPLAYMODE_TOUCH NSLocalizedString(@"Touch", nil)
|
||||||
|
@ -166,6 +185,8 @@
|
||||||
#define FILE_EXT_HW_IMAGE_FILE "bin"
|
#define FILE_EXT_HW_IMAGE_FILE "bin"
|
||||||
#define FILE_EXT_ADVANSCENE_DB "xml"
|
#define FILE_EXT_ADVANSCENE_DB "xml"
|
||||||
#define FILE_EXT_R4_CHEAT_DB "dat"
|
#define FILE_EXT_R4_CHEAT_DB "dat"
|
||||||
|
#define FILE_EXT_GBA_ROM "gba"
|
||||||
|
#define FILE_EXT_GBA_SRAM "sav"
|
||||||
|
|
||||||
#define MAX_SAVESTATE_SLOTS 10
|
#define MAX_SAVESTATE_SLOTS 10
|
||||||
|
|
||||||
|
@ -225,6 +246,10 @@
|
||||||
#define COCOA_DIALOG_OK 1
|
#define COCOA_DIALOG_OK 1
|
||||||
#define COCOA_DIALOG_OPTION 2
|
#define COCOA_DIALOG_OPTION 2
|
||||||
|
|
||||||
|
#define RUMBLE_ITERATIONS_RUMBLE_PAK 2
|
||||||
|
#define RUMBLE_ITERATIONS_ENABLE 1
|
||||||
|
#define RUMBLE_ITERATIONS_TEST 3
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
ROMAUTOLOADOPTION_LOAD_LAST = 0,
|
ROMAUTOLOADOPTION_LOAD_LAST = 0,
|
||||||
|
@ -233,6 +258,15 @@ enum
|
||||||
ROMAUTOLOADOPTION_CHOOSE_ROM = 10001
|
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
|
enum
|
||||||
{
|
{
|
||||||
REASONFORCLOSE_NORMAL = 0,
|
REASONFORCLOSE_NORMAL = 0,
|
||||||
|
@ -479,3 +513,9 @@ enum
|
||||||
MICMODE_PHYSICAL,
|
MICMODE_PHYSICAL,
|
||||||
MICMODE_SINE_WAVE
|
MICMODE_SINE_WAVE
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
PADDLE_CONTROL_RELATIVE = 0,
|
||||||
|
PADDLE_CONTROL_DIRECT
|
||||||
|
};
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Copyright (C) 2011 Roger Manuel
|
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
|
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
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -41,6 +41,25 @@ enum
|
||||||
DSControllerState_Touch,
|
DSControllerState_Touch,
|
||||||
DSControllerState_Microphone,
|
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
|
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
|
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
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -44,6 +44,7 @@ class AudioSampleBlockGenerator;
|
||||||
NSObjectController *cdsCoreController;
|
NSObjectController *cdsCoreController;
|
||||||
NSObjectController *cdsSoundController;
|
NSObjectController *cdsSoundController;
|
||||||
NSObjectController *cheatWindowController;
|
NSObjectController *cheatWindowController;
|
||||||
|
NSObjectController *slot2WindowController;
|
||||||
NSArrayController *cheatListController;
|
NSArrayController *cheatListController;
|
||||||
NSArrayController *cheatDatabaseController;
|
NSArrayController *cheatDatabaseController;
|
||||||
|
|
||||||
|
@ -99,6 +100,7 @@ class AudioSampleBlockGenerator;
|
||||||
@property (readonly) IBOutlet NSObjectController *cdsCoreController;
|
@property (readonly) IBOutlet NSObjectController *cdsCoreController;
|
||||||
@property (readonly) IBOutlet NSObjectController *cdsSoundController;
|
@property (readonly) IBOutlet NSObjectController *cdsSoundController;
|
||||||
@property (readonly) IBOutlet NSObjectController *cheatWindowController;
|
@property (readonly) IBOutlet NSObjectController *cheatWindowController;
|
||||||
|
@property (readonly) IBOutlet NSObjectController *slot2WindowController;
|
||||||
@property (readonly) IBOutlet NSArrayController *cheatListController;
|
@property (readonly) IBOutlet NSArrayController *cheatListController;
|
||||||
@property (readonly) IBOutlet NSArrayController *cheatDatabaseController;
|
@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
|
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
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -19,6 +19,7 @@
|
||||||
#import "DisplayWindowController.h"
|
#import "DisplayWindowController.h"
|
||||||
#import "InputManager.h"
|
#import "InputManager.h"
|
||||||
#import "cheatWindowDelegate.h"
|
#import "cheatWindowDelegate.h"
|
||||||
|
#import "Slot2WindowDelegate.h"
|
||||||
|
|
||||||
#import "cocoa_globals.h"
|
#import "cocoa_globals.h"
|
||||||
#import "cocoa_cheat.h"
|
#import "cocoa_cheat.h"
|
||||||
|
@ -29,6 +30,7 @@
|
||||||
#import "cocoa_input.h"
|
#import "cocoa_input.h"
|
||||||
#import "cocoa_output.h"
|
#import "cocoa_output.h"
|
||||||
#import "cocoa_rom.h"
|
#import "cocoa_rom.h"
|
||||||
|
#import "cocoa_slot2.h"
|
||||||
|
|
||||||
|
|
||||||
@implementation EmuControllerDelegate
|
@implementation EmuControllerDelegate
|
||||||
|
@ -48,6 +50,7 @@
|
||||||
@synthesize cheatWindowController;
|
@synthesize cheatWindowController;
|
||||||
@synthesize cheatListController;
|
@synthesize cheatListController;
|
||||||
@synthesize cheatDatabaseController;
|
@synthesize cheatDatabaseController;
|
||||||
|
@synthesize slot2WindowController;
|
||||||
|
|
||||||
@synthesize slot1ManagerWindow;
|
@synthesize slot1ManagerWindow;
|
||||||
@synthesize saveFileMigrationSheet;
|
@synthesize saveFileMigrationSheet;
|
||||||
|
@ -982,6 +985,19 @@
|
||||||
NSString *audioFilePath = cmdAttr.object[0];
|
NSString *audioFilePath = cmdAttr.object[0];
|
||||||
[[cdsCore cdsController] setSelectedAudioFileGenerator:[inputManager audioFileGeneratorFromFilePath:audioFilePath]];
|
[[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
|
else
|
||||||
{
|
{
|
||||||
[[cdsCore cdsController] setControllerState:theState controlID:controlID];
|
[[cdsCore cdsController] setControllerState:theState controlID:controlID];
|
||||||
|
@ -1537,6 +1553,10 @@
|
||||||
[self setIsWorking:NO];
|
[self setIsWorking:NO];
|
||||||
[self setIsRomLoading:NO];
|
[self setIsRomLoading:NO];
|
||||||
|
|
||||||
|
Slot2WindowDelegate *slot2WindowDelegate = (Slot2WindowDelegate *)[slot2WindowController content];
|
||||||
|
[slot2WindowDelegate setAutoSelectedDeviceText:[[slot2WindowDelegate deviceManager] autoSelectedDeviceName]];
|
||||||
|
[[slot2WindowDelegate deviceManager] updateStatus];
|
||||||
|
|
||||||
for (DisplayWindowController *windowController in windowList)
|
for (DisplayWindowController *windowController in windowList)
|
||||||
{
|
{
|
||||||
[[windowController window] displayIfNeeded];
|
[[windowController window] displayIfNeeded];
|
||||||
|
@ -1609,6 +1629,10 @@
|
||||||
[self setStatusText:NSSTRING_STATUS_ROM_UNLOADED];
|
[self setStatusText:NSSTRING_STATUS_ROM_UNLOADED];
|
||||||
[self setIsWorking:NO];
|
[self setIsWorking:NO];
|
||||||
|
|
||||||
|
Slot2WindowDelegate *slot2WindowDelegate = (Slot2WindowDelegate *)[slot2WindowController content];
|
||||||
|
[slot2WindowDelegate setAutoSelectedDeviceText:[[slot2WindowDelegate deviceManager] autoSelectedDeviceName]];
|
||||||
|
[[slot2WindowDelegate deviceManager] updateStatus];
|
||||||
|
|
||||||
for (DisplayWindowController *windowController in windowList)
|
for (DisplayWindowController *windowController in windowList)
|
||||||
{
|
{
|
||||||
[[windowController window] displayIfNeeded];
|
[[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
|
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
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -18,6 +18,7 @@
|
||||||
#import <Cocoa/Cocoa.h>
|
#import <Cocoa/Cocoa.h>
|
||||||
#include <libkern/OSAtomic.h>
|
#include <libkern/OSAtomic.h>
|
||||||
#include <IOKit/hid/IOHIDManager.h>
|
#include <IOKit/hid/IOHIDManager.h>
|
||||||
|
#include <ForceFeedback/ForceFeedback.h>
|
||||||
|
|
||||||
#if defined(__ppc__) || defined(__ppc64__)
|
#if defined(__ppc__) || defined(__ppc64__)
|
||||||
#include <map>
|
#include <map>
|
||||||
|
@ -103,27 +104,47 @@ typedef std::tr1::unordered_map<std::string, AudioSampleBlockGenerator> AudioFil
|
||||||
InputHIDManager *hidManager;
|
InputHIDManager *hidManager;
|
||||||
IOHIDDeviceRef hidDeviceRef;
|
IOHIDDeviceRef hidDeviceRef;
|
||||||
IOHIDQueueRef hidQueueRef;
|
IOHIDQueueRef hidQueueRef;
|
||||||
|
|
||||||
|
NSString *identifier;
|
||||||
|
|
||||||
|
io_service_t ioService;
|
||||||
|
FFDeviceObjectReference ffDevice;
|
||||||
|
FFEffectObjectReference ffEffect;
|
||||||
|
BOOL supportsForceFeedback;
|
||||||
|
BOOL isForceFeedbackEnabled;
|
||||||
|
|
||||||
NSRunLoop *runLoop;
|
NSRunLoop *runLoop;
|
||||||
OSSpinLock spinlockRunLoop;
|
OSSpinLock spinlockRunLoop;
|
||||||
}
|
}
|
||||||
|
|
||||||
@property (retain) InputHIDManager *hidManager;
|
@property (retain) InputHIDManager *hidManager;
|
||||||
@property (readonly) IOHIDDeviceRef hidDeviceRef;
|
@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;
|
@property (retain) NSRunLoop *runLoop;
|
||||||
|
|
||||||
- (id) initWithDevice:(IOHIDDeviceRef)theDevice hidManager:(InputHIDManager *)theHIDManager;
|
- (id) initWithDevice:(IOHIDDeviceRef)theDevice hidManager:(InputHIDManager *)theHIDManager;
|
||||||
|
|
||||||
|
- (void) setPropertiesUsingDictionary:(NSDictionary *)theProperties;
|
||||||
|
- (NSDictionary *) propertiesDictionary;
|
||||||
|
- (void) writeDefaults;
|
||||||
|
|
||||||
- (void) start;
|
- (void) start;
|
||||||
- (void) stop;
|
- (void) stop;
|
||||||
|
|
||||||
- (NSString *) manufacturerName;
|
- (void) startForceFeedbackAndIterate:(UInt32)iterations flags:(UInt32)ffFlags;
|
||||||
- (NSString *) productName;
|
- (void) stopForceFeedback;
|
||||||
- (NSString *) serialNumber;
|
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
BOOL GetOnStateFromHIDValueRef(IOHIDValueRef hidValueRef);
|
bool GetOnStateFromHIDValueRef(IOHIDValueRef hidValueRef);
|
||||||
InputAttributes InputAttributesOfHIDValue(IOHIDValueRef hidValueRef, const char *altElementCode, const char *altElementName, bool *altOnState);
|
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 InputListFromHIDValue(IOHIDValueRef hidValueRef);
|
||||||
InputAttributesList InputListFromHatSwitchValue(IOHIDValueRef hidValueRef, bool useEightDirection);
|
InputAttributesList InputListFromHatSwitchValue(IOHIDValueRef hidValueRef, bool useEightDirection);
|
||||||
|
|
||||||
|
@ -136,15 +157,15 @@ void HandleQueueValueAvailableCallback(void *inContext, IOReturn inResult, void
|
||||||
InputManager *inputManager;
|
InputManager *inputManager;
|
||||||
IOHIDManagerRef hidManagerRef;
|
IOHIDManagerRef hidManagerRef;
|
||||||
NSRunLoop *runLoop;
|
NSRunLoop *runLoop;
|
||||||
NSMutableSet *deviceList;
|
NSArrayController *deviceListController;
|
||||||
id<InputHIDManagerTarget> target;
|
id<InputHIDManagerTarget> target;
|
||||||
|
|
||||||
OSSpinLock spinlockRunLoop;
|
OSSpinLock spinlockRunLoop;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@property (retain) NSArrayController *deviceListController;
|
||||||
@property (retain) InputManager *inputManager;
|
@property (retain) InputManager *inputManager;
|
||||||
@property (readonly) IOHIDManagerRef hidManagerRef;
|
@property (readonly) IOHIDManagerRef hidManagerRef;
|
||||||
@property (readonly) NSMutableSet *deviceList;
|
|
||||||
@property (assign) id target;
|
@property (assign) id target;
|
||||||
@property (retain) NSRunLoop *runLoop;
|
@property (retain) NSRunLoop *runLoop;
|
||||||
|
|
||||||
|
@ -173,6 +194,7 @@ void HandleDeviceRemovalCallback(void *inContext, IOReturn inResult, void *inSen
|
||||||
|
|
||||||
@property (readonly) IBOutlet EmuControllerDelegate *emuControl;
|
@property (readonly) IBOutlet EmuControllerDelegate *emuControl;
|
||||||
@property (retain) id<InputHIDManagerTarget> hidInputTarget;
|
@property (retain) id<InputHIDManagerTarget> hidInputTarget;
|
||||||
|
@property (readonly) InputHIDManager *hidManager;
|
||||||
@property (readonly) NSMutableDictionary *inputMappings;
|
@property (readonly) NSMutableDictionary *inputMappings;
|
||||||
@property (readonly) NSArray *commandTagList;
|
@property (readonly) NSArray *commandTagList;
|
||||||
@property (readonly) NSDictionary *commandIcon;
|
@property (readonly) NSDictionary *commandIcon;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Copyright (C) 2011 Roger Manuel
|
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
|
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
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -71,6 +71,12 @@ extern "C"
|
||||||
|
|
||||||
@synthesize hidManager;
|
@synthesize hidManager;
|
||||||
@synthesize hidDeviceRef;
|
@synthesize hidDeviceRef;
|
||||||
|
@dynamic manufacturerName;
|
||||||
|
@dynamic productName;
|
||||||
|
@dynamic serialNumber;
|
||||||
|
@synthesize identifier;
|
||||||
|
@dynamic supportsForceFeedback;
|
||||||
|
@dynamic isForceFeedbackEnabled;
|
||||||
@dynamic runLoop;
|
@dynamic runLoop;
|
||||||
|
|
||||||
static NSDictionary *hidUsageTable = nil;
|
static NSDictionary *hidUsageTable = nil;
|
||||||
|
@ -109,6 +115,104 @@ static NSDictionary *hidUsageTable = nil;
|
||||||
|
|
||||||
CFRelease(elementArray);
|
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;
|
spinlockRunLoop = OS_SPINLOCK_INIT;
|
||||||
[self setRunLoop:[NSRunLoop currentRunLoop]];
|
[self setRunLoop:[NSRunLoop currentRunLoop]];
|
||||||
|
|
||||||
|
@ -127,9 +231,76 @@ static NSDictionary *hidUsageTable = nil;
|
||||||
hidQueueRef = NULL;
|
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];
|
[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
|
- (void) setRunLoop:(NSRunLoop *)theRunLoop
|
||||||
{
|
{
|
||||||
OSSpinLockLock(&spinlockRunLoop);
|
OSSpinLockLock(&spinlockRunLoop);
|
||||||
|
@ -149,7 +320,7 @@ static NSDictionary *hidUsageTable = nil;
|
||||||
{
|
{
|
||||||
[theRunLoop retain];
|
[theRunLoop retain];
|
||||||
IOHIDQueueScheduleWithRunLoop(hidQueueRef, [theRunLoop getCFRunLoop], kCFRunLoopDefaultMode);
|
IOHIDQueueScheduleWithRunLoop(hidQueueRef, [theRunLoop getCFRunLoop], kCFRunLoopDefaultMode);
|
||||||
IOHIDQueueRegisterValueAvailableCallback(hidQueueRef, HandleQueueValueAvailableCallback, [self hidManager]);
|
IOHIDQueueRegisterValueAvailableCallback(hidQueueRef, HandleQueueValueAvailableCallback, self);
|
||||||
}
|
}
|
||||||
|
|
||||||
[runLoop release];
|
[runLoop release];
|
||||||
|
@ -167,6 +338,43 @@ static NSDictionary *hidUsageTable = nil;
|
||||||
return theRunLoop;
|
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
|
- (void) start
|
||||||
{
|
{
|
||||||
IOHIDQueueStart(hidQueueRef);
|
IOHIDQueueStart(hidQueueRef);
|
||||||
|
@ -177,19 +385,21 @@ static NSDictionary *hidUsageTable = nil;
|
||||||
IOHIDQueueStop(hidQueueRef);
|
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));
|
if (ffDevice != NULL)
|
||||||
}
|
{
|
||||||
|
FFEffectStop(ffEffect);
|
||||||
- (NSString *) serialNumber
|
}
|
||||||
{
|
|
||||||
return (NSString *)IOHIDDeviceGetProperty([self hidDeviceRef], CFSTR(kIOHIDSerialNumberKey));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
@ -211,7 +421,7 @@ static NSDictionary *hidUsageTable = nil;
|
||||||
Details:
|
Details:
|
||||||
None.
|
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;
|
InputAttributes inputAttr;
|
||||||
|
|
||||||
|
@ -267,46 +477,14 @@ InputAttributes InputAttributesOfHIDValue(IOHIDValueRef hidValueRef, const char
|
||||||
strncpy(inputAttr.elementName, altElementName, INPUT_HANDLER_STRING_LENGTH);
|
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));
|
const bool onState = (altOnState == NULL) ? GetOnStateFromHIDValueRef(hidValueRef) : *altOnState;
|
||||||
SInt32 vendorID = 0;
|
const NSInteger logicalValue = IOHIDValueGetIntegerValue(hidValueRef);
|
||||||
CFNumberGetValue(cfVendorIDNumber, kCFNumberSInt32Type, &vendorID);
|
const NSInteger logicalMin = IOHIDElementGetLogicalMin(hidElementRef);
|
||||||
|
const NSInteger logicalMax = IOHIDElementGetLogicalMax(hidElementRef);
|
||||||
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);
|
|
||||||
|
|
||||||
inputAttr.state = (onState) ? INPUT_ATTRIBUTE_STATE_ON : INPUT_ATTRIBUTE_STATE_OFF;
|
inputAttr.state = (onState) ? INPUT_ATTRIBUTE_STATE_ON : INPUT_ATTRIBUTE_STATE_OFF;
|
||||||
inputAttr.intCoordX = 0;
|
inputAttr.intCoordX = 0;
|
||||||
|
@ -352,10 +530,10 @@ InputAttributesList InputListFromHIDValue(IOHIDValueRef hidValueRef)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
NSInteger lowerThreshold = ((logicalMax - logicalMin) / 3) + logicalMin;
|
const NSInteger lowerThreshold = ((logicalMax - logicalMin) / 4) + logicalMin;
|
||||||
NSInteger upperThreshold = (((logicalMax - logicalMin) * 2) / 3) + logicalMin;
|
const NSInteger upperThreshold = (((logicalMax - logicalMin) * 3) / 4) + logicalMin;
|
||||||
bool onState = true;
|
const bool onState = true;
|
||||||
bool offState = false;
|
const bool offState = false;
|
||||||
|
|
||||||
char elementCodeLowerThresholdBuf[256] = {0};
|
char elementCodeLowerThresholdBuf[256] = {0};
|
||||||
char elementCodeUpperThresholdBuf[256] = {0};
|
char elementCodeUpperThresholdBuf[256] = {0};
|
||||||
|
@ -523,40 +701,31 @@ InputAttributesList InputListFromHatSwitchValue(IOHIDValueRef hidValueRef, bool
|
||||||
return inputList;
|
return inputList;
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL GetOnStateFromHIDValueRef(IOHIDValueRef hidValueRef)
|
bool GetOnStateFromHIDValueRef(IOHIDValueRef hidValueRef)
|
||||||
{
|
{
|
||||||
BOOL onState = NO;
|
bool onState = false;
|
||||||
|
|
||||||
if (hidValueRef == nil)
|
if (hidValueRef == nil)
|
||||||
{
|
{
|
||||||
return onState;
|
return onState;
|
||||||
}
|
}
|
||||||
|
|
||||||
IOHIDElementRef hidElementRef = IOHIDValueGetElement(hidValueRef);
|
const IOHIDElementRef hidElementRef = IOHIDValueGetElement(hidValueRef);
|
||||||
NSInteger logicalValue = IOHIDValueGetIntegerValue(hidValueRef);
|
const NSInteger logicalValue = IOHIDValueGetIntegerValue(hidValueRef);
|
||||||
NSInteger logicalMin = IOHIDElementGetLogicalMin(hidElementRef);
|
const NSInteger logicalMin = IOHIDElementGetLogicalMin(hidElementRef);
|
||||||
NSInteger logicalMax = IOHIDElementGetLogicalMax(hidElementRef);
|
const NSInteger logicalMax = IOHIDElementGetLogicalMax(hidElementRef);
|
||||||
NSInteger lowerThreshold = ((logicalMax - logicalMin) / 4) + logicalMin;
|
const NSInteger lowerThreshold = ((logicalMax - logicalMin) / 4) + logicalMin;
|
||||||
NSInteger upperThreshold = (((logicalMax - logicalMin) * 3) / 4) + logicalMin;
|
const NSInteger upperThreshold = (((logicalMax - logicalMin) * 3) / 4) + logicalMin;
|
||||||
|
const NSInteger elementType = IOHIDElementGetType(hidElementRef);
|
||||||
|
|
||||||
NSInteger elementType = IOHIDElementGetType(hidElementRef);
|
|
||||||
switch (elementType)
|
switch (elementType)
|
||||||
{
|
{
|
||||||
case kIOHIDElementTypeInput_Misc:
|
case kIOHIDElementTypeInput_Misc:
|
||||||
{
|
{
|
||||||
if (logicalMin == 0 && logicalMax == 1)
|
if ( (logicalMin == 0 && logicalMax == 1 && logicalValue == 1) ||
|
||||||
|
(logicalValue <= lowerThreshold || logicalValue >= upperThreshold) )
|
||||||
{
|
{
|
||||||
if (logicalValue == 1)
|
onState = true;
|
||||||
{
|
|
||||||
onState = YES;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (logicalValue <= lowerThreshold || logicalValue >= upperThreshold)
|
|
||||||
{
|
|
||||||
onState = YES;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -565,26 +734,17 @@ BOOL GetOnStateFromHIDValueRef(IOHIDValueRef hidValueRef)
|
||||||
{
|
{
|
||||||
if (logicalValue == 1)
|
if (logicalValue == 1)
|
||||||
{
|
{
|
||||||
onState = YES;
|
onState = true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case kIOHIDElementTypeInput_Axis:
|
case kIOHIDElementTypeInput_Axis:
|
||||||
{
|
{
|
||||||
if (logicalMin == 0 && logicalMax == 1)
|
if ( (logicalMin == 0 && logicalMax == 1 && logicalValue == 1) ||
|
||||||
|
(logicalValue <= lowerThreshold || logicalValue >= upperThreshold) )
|
||||||
{
|
{
|
||||||
if (logicalValue == 1)
|
onState = true;
|
||||||
{
|
|
||||||
onState = YES;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (logicalValue <= lowerThreshold || logicalValue >= upperThreshold)
|
|
||||||
{
|
|
||||||
onState = YES;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -596,6 +756,46 @@ BOOL GetOnStateFromHIDValueRef(IOHIDValueRef hidValueRef)
|
||||||
return onState;
|
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 ClearHIDQueue(const IOHIDQueueRef hidQueue)
|
||||||
{
|
{
|
||||||
size_t hidInputClearCount = 0;
|
size_t hidInputClearCount = 0;
|
||||||
|
@ -629,7 +829,8 @@ size_t ClearHIDQueue(const IOHIDQueueRef hidQueue)
|
||||||
|
|
||||||
void HandleQueueValueAvailableCallback(void *inContext, IOReturn inResult, void *inSender)
|
void HandleQueueValueAvailableCallback(void *inContext, IOReturn inResult, void *inSender)
|
||||||
{
|
{
|
||||||
InputHIDManager *hidManager = (InputHIDManager *)inContext;
|
InputHIDDevice *hidDevice = (InputHIDDevice *)inContext;
|
||||||
|
InputHIDManager *hidManager = [hidDevice hidManager];
|
||||||
IOHIDQueueRef hidQueue = (IOHIDQueueRef)inSender;
|
IOHIDQueueRef hidQueue = (IOHIDQueueRef)inSender;
|
||||||
id<InputHIDManagerTarget> target = [hidManager target];
|
id<InputHIDManagerTarget> target = [hidManager target];
|
||||||
|
|
||||||
|
@ -651,7 +852,7 @@ void HandleQueueValueAvailableCallback(void *inContext, IOReturn inResult, void
|
||||||
|
|
||||||
@synthesize inputManager;
|
@synthesize inputManager;
|
||||||
@synthesize hidManagerRef;
|
@synthesize hidManagerRef;
|
||||||
@synthesize deviceList;
|
@synthesize deviceListController;
|
||||||
@synthesize target;
|
@synthesize target;
|
||||||
@dynamic runLoop;
|
@dynamic runLoop;
|
||||||
|
|
||||||
|
@ -664,6 +865,7 @@ void HandleQueueValueAvailableCallback(void *inContext, IOReturn inResult, void
|
||||||
}
|
}
|
||||||
|
|
||||||
target = nil;
|
target = nil;
|
||||||
|
deviceListController = nil;
|
||||||
inputManager = [theInputManager retain];
|
inputManager = [theInputManager retain];
|
||||||
|
|
||||||
hidManagerRef = IOHIDManagerCreate(kCFAllocatorDefault, kIOHIDOptionsTypeNone);
|
hidManagerRef = IOHIDManagerCreate(kCFAllocatorDefault, kIOHIDOptionsTypeNone);
|
||||||
|
@ -672,9 +874,7 @@ void HandleQueueValueAvailableCallback(void *inContext, IOReturn inResult, void
|
||||||
[self release];
|
[self release];
|
||||||
return nil;
|
return nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
deviceList = [[NSMutableSet alloc] initWithCapacity:32];
|
|
||||||
|
|
||||||
CFMutableDictionaryRef cfJoystickMatcher = CFDictionaryCreateMutable(kCFAllocatorDefault, 2, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
|
CFMutableDictionaryRef cfJoystickMatcher = CFDictionaryCreateMutable(kCFAllocatorDefault, 2, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
|
||||||
CFDictionarySetValue(cfJoystickMatcher, CFSTR(kIOHIDDeviceUsagePageKey), (CFNumberRef)[NSNumber numberWithInteger:kHIDPage_GenericDesktop]);
|
CFDictionarySetValue(cfJoystickMatcher, CFSTR(kIOHIDDeviceUsagePageKey), (CFNumberRef)[NSNumber numberWithInteger:kHIDPage_GenericDesktop]);
|
||||||
CFDictionarySetValue(cfJoystickMatcher, CFSTR(kIOHIDDeviceUsageKey), (CFNumberRef)[NSNumber numberWithInteger:kHIDUsage_GD_Joystick]);
|
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(kIOHIDDeviceUsagePageKey), (CFNumberRef)[NSNumber numberWithInteger:kHIDPage_GenericDesktop]);
|
||||||
CFDictionarySetValue(cfGamepadMatcher, CFSTR(kIOHIDDeviceUsageKey), (CFNumberRef)[NSNumber numberWithInteger:kHIDUsage_GD_GamePad]);
|
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);
|
IOHIDManagerSetDeviceMatchingMultiple(hidManagerRef, (CFArrayRef)matcherArray);
|
||||||
|
|
||||||
[matcherArray release];
|
[matcherArray release];
|
||||||
CFRelease(cfJoystickMatcher);
|
CFRelease(cfJoystickMatcher);
|
||||||
CFRelease(cfGamepadMatcher);
|
CFRelease(cfGamepadMatcher);
|
||||||
|
CFRelease(cfGenericControllerMatcher);
|
||||||
|
|
||||||
spinlockRunLoop = OS_SPINLOCK_INIT;
|
spinlockRunLoop = OS_SPINLOCK_INIT;
|
||||||
[self setRunLoop:[NSRunLoop currentRunLoop]];
|
[self setRunLoop:[NSRunLoop currentRunLoop]];
|
||||||
|
@ -709,9 +914,7 @@ void HandleQueueValueAvailableCallback(void *inContext, IOReturn inResult, void
|
||||||
[self setRunLoop:nil];
|
[self setRunLoop:nil];
|
||||||
[self setInputManager:nil];
|
[self setInputManager:nil];
|
||||||
[self setTarget:nil];
|
[self setTarget:nil];
|
||||||
|
|
||||||
[deviceList release];
|
|
||||||
|
|
||||||
if (hidManagerRef != NULL)
|
if (hidManagerRef != NULL)
|
||||||
{
|
{
|
||||||
IOHIDManagerClose(hidManagerRef, 0);
|
IOHIDManagerClose(hidManagerRef, 0);
|
||||||
|
@ -767,19 +970,34 @@ void HandleDeviceMatchingCallback(void *inContext, IOReturn inResult, void *inSe
|
||||||
{
|
{
|
||||||
InputHIDManager *hidManager = (InputHIDManager *)inContext;
|
InputHIDManager *hidManager = (InputHIDManager *)inContext;
|
||||||
InputHIDDevice *newDevice = [[[InputHIDDevice alloc] initWithDevice:inIOHIDDeviceRef hidManager:hidManager] autorelease];
|
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];
|
[newDevice start];
|
||||||
}
|
}
|
||||||
|
|
||||||
void HandleDeviceRemovalCallback(void *inContext, IOReturn inResult, void *inSender, IOHIDDeviceRef inIOHIDDeviceRef)
|
void HandleDeviceRemovalCallback(void *inContext, IOReturn inResult, void *inSender, IOHIDDeviceRef inIOHIDDeviceRef)
|
||||||
{
|
{
|
||||||
InputHIDManager *hidManager = (InputHIDManager *)inContext;
|
InputHIDManager *hidManager = (InputHIDManager *)inContext;
|
||||||
|
NSArray *hidDeviceList = [[hidManager deviceListController] arrangedObjects];
|
||||||
|
|
||||||
for (InputHIDDevice *hidDevice in [hidManager deviceList])
|
for (InputHIDDevice *hidDevice in hidDeviceList)
|
||||||
{
|
{
|
||||||
if ([hidDevice hidDeviceRef] == inIOHIDDeviceRef)
|
if ([hidDevice hidDeviceRef] == inIOHIDDeviceRef)
|
||||||
{
|
{
|
||||||
[[hidManager deviceList] removeObject:hidDevice];
|
[hidDevice stopForceFeedback];
|
||||||
|
[[hidManager deviceListController] removeObject:hidDevice];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -790,6 +1008,7 @@ void HandleDeviceRemovalCallback(void *inContext, IOReturn inResult, void *inSen
|
||||||
|
|
||||||
@synthesize emuControl;
|
@synthesize emuControl;
|
||||||
@dynamic hidInputTarget;
|
@dynamic hidInputTarget;
|
||||||
|
@synthesize hidManager;
|
||||||
@synthesize inputMappings;
|
@synthesize inputMappings;
|
||||||
@synthesize commandTagList;
|
@synthesize commandTagList;
|
||||||
@synthesize commandIcon;
|
@synthesize commandIcon;
|
||||||
|
@ -869,6 +1088,25 @@ static std::tr1::unordered_map<unsigned short, std::string> keyboardNameTable; /
|
||||||
commandSelector["Debug"] = @selector(cmdUpdateDSController:);
|
commandSelector["Debug"] = @selector(cmdUpdateDSController:);
|
||||||
commandSelector["Lid"] = @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["Load State Slot"] = @selector(cmdLoadEmuSaveStateSlot:);
|
||||||
commandSelector["Save State Slot"] = @selector(cmdSaveEmuSaveStateSlot:);
|
commandSelector["Save State Slot"] = @selector(cmdSaveEmuSaveStateSlot:);
|
||||||
commandSelector["Copy Screen"] = @selector(cmdCopyScreen:);
|
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.intValue[1] = MICMODE_INTERNAL_NOISE;
|
||||||
cmdDSControlMic.floatValue[0] = 250.0f;
|
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 cmdLoadEmuSaveStateSlot = NewCommandAttributesForSelector("Load State Slot", commandSelector["Load State Slot"]);
|
||||||
CommandAttributes cmdSaveEmuSaveStateSlot = NewCommandAttributesForSelector("Save State Slot", commandSelector["Save State Slot"]);
|
CommandAttributes cmdSaveEmuSaveStateSlot = NewCommandAttributesForSelector("Save State Slot", commandSelector["Save State Slot"]);
|
||||||
CommandAttributes cmdCopyScreen = NewCommandAttributesForSelector("Copy Screen", commandSelector["Copy Screen"]);
|
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["Debug"] = cmdDSControlDebug;
|
||||||
defaultCommandAttributes["Lid"] = cmdDSControlLid;
|
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["Load State Slot"] = cmdLoadEmuSaveStateSlot;
|
||||||
defaultCommandAttributes["Save State Slot"] = cmdSaveEmuSaveStateSlot;
|
defaultCommandAttributes["Save State Slot"] = cmdSaveEmuSaveStateSlot;
|
||||||
defaultCommandAttributes["Copy Screen"] = cmdCopyScreen;
|
defaultCommandAttributes["Copy Screen"] = cmdCopyScreen;
|
||||||
|
@ -1458,6 +1738,27 @@ static std::tr1::unordered_map<unsigned short, std::string> keyboardNameTable; /
|
||||||
break;
|
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)
|
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.
|
// Convert the audio buffer to 7-bit unsigned PCM.
|
||||||
buffer = theGenerator.getBuffer();
|
buffer = theGenerator.getBuffer();
|
||||||
for (SInt64 i = 0; i < bufferSize; i++)
|
for (size_t i = 0; i < bufferSize; i++)
|
||||||
{
|
{
|
||||||
*(buffer+i) >>= 1;
|
*(buffer+i) >>= 1;
|
||||||
}
|
}
|
||||||
|
@ -1673,7 +1974,6 @@ CommandAttributes NewCommandAttributesForDSControl(const char *commandTag, const
|
||||||
{
|
{
|
||||||
CommandAttributes cmdAttr = NewCommandAttributesForSelector(commandTag, @selector(cmdUpdateDSController:));
|
CommandAttributes cmdAttr = NewCommandAttributesForSelector(commandTag, @selector(cmdUpdateDSController:));
|
||||||
cmdAttr.intValue[0] = controlID;
|
cmdAttr.intValue[0] = controlID;
|
||||||
cmdAttr.floatValue[0] = 250.0f;
|
|
||||||
|
|
||||||
return cmdAttr;
|
return cmdAttr;
|
||||||
}
|
}
|
||||||
|
@ -1743,6 +2043,7 @@ NSMutableDictionary* DeviceInfoDictionaryWithCommandAttributes(const CommandAttr
|
||||||
deviceName, @"deviceName",
|
deviceName, @"deviceName",
|
||||||
elementCode, @"elementCode",
|
elementCode, @"elementCode",
|
||||||
elementName, @"elementName",
|
elementName, @"elementName",
|
||||||
|
[NSNumber numberWithBool:NO], @"isElementAnalog",
|
||||||
deviceInfoSummary, @"deviceInfoSummary",
|
deviceInfoSummary, @"deviceInfoSummary",
|
||||||
@"", @"inputSettingsSummary",
|
@"", @"inputSettingsSummary",
|
||||||
[NSNumber numberWithInt:cmdAttr->intValue[0]], @"intValue0",
|
[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 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
|
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
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -38,12 +38,14 @@
|
||||||
NSObjectController *prefWindowController;
|
NSObjectController *prefWindowController;
|
||||||
NSObjectController *cheatWindowController;
|
NSObjectController *cheatWindowController;
|
||||||
NSObjectController *cdsCoreController;
|
NSObjectController *cdsCoreController;
|
||||||
|
NSArrayController *inputDeviceListController;
|
||||||
FileMigrationDelegate *migrationDelegate;
|
FileMigrationDelegate *migrationDelegate;
|
||||||
InputManager *inputManager;
|
InputManager *inputManager;
|
||||||
|
|
||||||
NSWindow *prefWindow;
|
NSWindow *prefWindow;
|
||||||
NSWindow *troubleshootingWindow;
|
NSWindow *troubleshootingWindow;
|
||||||
NSWindow *cheatListWindow;
|
NSWindow *cheatListWindow;
|
||||||
|
NSWindow *slot2Window;
|
||||||
NSView *prefGeneralView;
|
NSView *prefGeneralView;
|
||||||
InputPrefsView *inputPrefsView;
|
InputPrefsView *inputPrefsView;
|
||||||
|
|
||||||
|
@ -68,11 +70,13 @@
|
||||||
@property (readonly) IBOutlet NSObjectController *prefWindowController;
|
@property (readonly) IBOutlet NSObjectController *prefWindowController;
|
||||||
@property (readonly) IBOutlet NSObjectController *cheatWindowController;
|
@property (readonly) IBOutlet NSObjectController *cheatWindowController;
|
||||||
@property (readonly) IBOutlet NSObjectController *cdsCoreController;
|
@property (readonly) IBOutlet NSObjectController *cdsCoreController;
|
||||||
|
@property (readonly) IBOutlet NSArrayController *inputDeviceListController;
|
||||||
@property (readonly) IBOutlet FileMigrationDelegate *migrationDelegate;
|
@property (readonly) IBOutlet FileMigrationDelegate *migrationDelegate;
|
||||||
@property (readonly) IBOutlet InputManager *inputManager;
|
@property (readonly) IBOutlet InputManager *inputManager;
|
||||||
@property (readonly) IBOutlet NSWindow *prefWindow;
|
@property (readonly) IBOutlet NSWindow *prefWindow;
|
||||||
@property (readonly) IBOutlet NSWindow *troubleshootingWindow;
|
@property (readonly) IBOutlet NSWindow *troubleshootingWindow;
|
||||||
@property (readonly) IBOutlet NSWindow *cheatListWindow;
|
@property (readonly) IBOutlet NSWindow *cheatListWindow;
|
||||||
|
@property (readonly) IBOutlet NSWindow *slot2Window;
|
||||||
@property (readonly) IBOutlet NSView *prefGeneralView;
|
@property (readonly) IBOutlet NSView *prefGeneralView;
|
||||||
@property (readonly) IBOutlet NSMenu *mLoadStateSlot;
|
@property (readonly) IBOutlet NSMenu *mLoadStateSlot;
|
||||||
@property (readonly) IBOutlet NSMenu *mSaveStateSlot;
|
@property (readonly) IBOutlet NSMenu *mSaveStateSlot;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Copyright (C) 2011 Roger Manuel
|
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
|
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
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -20,6 +20,7 @@
|
||||||
#import "DisplayWindowController.h"
|
#import "DisplayWindowController.h"
|
||||||
#import "EmuControllerDelegate.h"
|
#import "EmuControllerDelegate.h"
|
||||||
#import "FileMigrationDelegate.h"
|
#import "FileMigrationDelegate.h"
|
||||||
|
#import "Slot2WindowDelegate.h"
|
||||||
#import "preferencesWindowDelegate.h"
|
#import "preferencesWindowDelegate.h"
|
||||||
#import "troubleshootingWindowDelegate.h"
|
#import "troubleshootingWindowDelegate.h"
|
||||||
#import "cheatWindowDelegate.h"
|
#import "cheatWindowDelegate.h"
|
||||||
|
@ -40,6 +41,7 @@
|
||||||
@synthesize prefWindow;
|
@synthesize prefWindow;
|
||||||
@synthesize troubleshootingWindow;
|
@synthesize troubleshootingWindow;
|
||||||
@synthesize cheatListWindow;
|
@synthesize cheatListWindow;
|
||||||
|
@synthesize slot2Window;
|
||||||
@synthesize prefGeneralView;
|
@synthesize prefGeneralView;
|
||||||
@synthesize mLoadStateSlot;
|
@synthesize mLoadStateSlot;
|
||||||
@synthesize mSaveStateSlot;
|
@synthesize mSaveStateSlot;
|
||||||
|
@ -50,6 +52,7 @@
|
||||||
@synthesize romInfoPanelController;
|
@synthesize romInfoPanelController;
|
||||||
@synthesize prefWindowController;
|
@synthesize prefWindowController;
|
||||||
@synthesize cdsCoreController;
|
@synthesize cdsCoreController;
|
||||||
|
@synthesize inputDeviceListController;
|
||||||
@synthesize cheatWindowController;
|
@synthesize cheatWindowController;
|
||||||
@synthesize migrationDelegate;
|
@synthesize migrationDelegate;
|
||||||
@synthesize inputManager;
|
@synthesize inputManager;
|
||||||
|
@ -115,6 +118,7 @@
|
||||||
EmuControllerDelegate *emuControl = (EmuControllerDelegate *)[emuControlController content];
|
EmuControllerDelegate *emuControl = (EmuControllerDelegate *)[emuControlController content];
|
||||||
PreferencesWindowDelegate *prefWindowDelegate = (PreferencesWindowDelegate *)[prefWindow delegate];
|
PreferencesWindowDelegate *prefWindowDelegate = (PreferencesWindowDelegate *)[prefWindow delegate];
|
||||||
CheatWindowDelegate *cheatWindowDelegate = (CheatWindowDelegate *)[cheatListWindow delegate];
|
CheatWindowDelegate *cheatWindowDelegate = (CheatWindowDelegate *)[cheatListWindow delegate];
|
||||||
|
Slot2WindowDelegate *slot2WindowDelegate = (Slot2WindowDelegate *)[slot2Window delegate];
|
||||||
|
|
||||||
// Create the needed directories in Application Support if they haven't already
|
// Create the needed directories in Application Support if they haven't already
|
||||||
// been created.
|
// been created.
|
||||||
|
@ -166,7 +170,8 @@
|
||||||
[self setRomInfoPanelBoxTitleColors];
|
[self setRomInfoPanelBoxTitleColors];
|
||||||
|
|
||||||
// Set the preferences window to the general view by default.
|
// 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
|
// 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.
|
// Builder because we're assuming an arbitrary number of slot items.
|
||||||
|
@ -193,6 +198,11 @@
|
||||||
[NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.01]];
|
[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.
|
// Start up the threads for our outputs.
|
||||||
[NSThread detachNewThreadSelector:@selector(runThread:) toTarget:newSpeaker withObject:nil];
|
[NSThread detachNewThreadSelector:@selector(runThread:) toTarget:newSpeaker withObject:nil];
|
||||||
|
|
||||||
|
@ -417,6 +427,7 @@
|
||||||
{
|
{
|
||||||
EmuControllerDelegate *emuControl = (EmuControllerDelegate *)[emuControlController content];
|
EmuControllerDelegate *emuControl = (EmuControllerDelegate *)[emuControlController content];
|
||||||
PreferencesWindowDelegate *prefWindowDelegate = [prefWindow delegate];
|
PreferencesWindowDelegate *prefWindowDelegate = [prefWindow delegate];
|
||||||
|
Slot2WindowDelegate *slot2WindowDelegate = (Slot2WindowDelegate *)[slot2Window delegate];
|
||||||
NSMutableDictionary *prefBindings = [prefWindowDelegate bindings];
|
NSMutableDictionary *prefBindings = [prefWindowDelegate bindings];
|
||||||
CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content];
|
CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content];
|
||||||
|
|
||||||
|
@ -571,7 +582,7 @@
|
||||||
}
|
}
|
||||||
else
|
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.
|
// Set the menu for the display rotation.
|
||||||
|
@ -591,6 +602,15 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
[inputManager setMappingsWithMappings:userMappings];
|
[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.
|
// Set up the rest of the emulation-related user defaults.
|
||||||
[emuControl setupUserDefaults];
|
[emuControl setupUserDefaults];
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Copyright (C) 2011 Roger Manuel
|
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
|
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
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -45,6 +45,7 @@
|
||||||
NSWindow *inputSettingsSaveStateSlot;
|
NSWindow *inputSettingsSaveStateSlot;
|
||||||
NSWindow *inputSettingsSetSpeedLimit;
|
NSWindow *inputSettingsSetSpeedLimit;
|
||||||
NSWindow *inputSettingsGPUState;
|
NSWindow *inputSettingsGPUState;
|
||||||
|
NSWindow *inputSettingsPaddleController;
|
||||||
|
|
||||||
InputManager *inputManager;
|
InputManager *inputManager;
|
||||||
NSString *configInputTargetID;
|
NSString *configInputTargetID;
|
||||||
|
@ -75,6 +76,7 @@
|
||||||
@property (readonly) IBOutlet NSWindow *inputSettingsSaveStateSlot;
|
@property (readonly) IBOutlet NSWindow *inputSettingsSaveStateSlot;
|
||||||
@property (readonly) IBOutlet NSWindow *inputSettingsSetSpeedLimit;
|
@property (readonly) IBOutlet NSWindow *inputSettingsSetSpeedLimit;
|
||||||
@property (readonly) IBOutlet NSWindow *inputSettingsGPUState;
|
@property (readonly) IBOutlet NSWindow *inputSettingsGPUState;
|
||||||
|
@property (readonly) IBOutlet NSWindow *inputSettingsPaddleController;
|
||||||
|
|
||||||
@property (readonly) IBOutlet InputManager *inputManager;
|
@property (readonly) IBOutlet InputManager *inputManager;
|
||||||
@property (retain) NSString *configInputTargetID;
|
@property (retain) NSString *configInputTargetID;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Copyright (C) 2011 Roger Manuel
|
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
|
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
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -42,6 +42,7 @@
|
||||||
@synthesize inputSettingsSaveStateSlot;
|
@synthesize inputSettingsSaveStateSlot;
|
||||||
@synthesize inputSettingsSetSpeedLimit;
|
@synthesize inputSettingsSetSpeedLimit;
|
||||||
@synthesize inputSettingsGPUState;
|
@synthesize inputSettingsGPUState;
|
||||||
|
@synthesize inputSettingsPaddleController;
|
||||||
@synthesize inputProfileSheet;
|
@synthesize inputProfileSheet;
|
||||||
@synthesize inputProfileRenameSheet;
|
@synthesize inputProfileRenameSheet;
|
||||||
@synthesize inputManager;
|
@synthesize inputManager;
|
||||||
|
@ -173,6 +174,7 @@
|
||||||
inputSettingsSaveStateSlot, @"Save State Slot",
|
inputSettingsSaveStateSlot, @"Save State Slot",
|
||||||
inputSettingsSetSpeedLimit, @"Set Speed",
|
inputSettingsSetSpeedLimit, @"Set Speed",
|
||||||
inputSettingsGPUState, @"Enable/Disable GPU State",
|
inputSettingsGPUState, @"Enable/Disable GPU State",
|
||||||
|
inputSettingsPaddleController, @"Paddle",
|
||||||
nil];
|
nil];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Copyright (C) 2011 Roger Manuel
|
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
|
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
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -30,6 +30,7 @@
|
||||||
{
|
{
|
||||||
NSObject *dummyObject;
|
NSObject *dummyObject;
|
||||||
NSWindow *window;
|
NSWindow *window;
|
||||||
|
NSToolbar *toolbar;
|
||||||
NSWindow *firmwareConfigSheet;
|
NSWindow *firmwareConfigSheet;
|
||||||
NSObjectController *cdsCoreController;
|
NSObjectController *cdsCoreController;
|
||||||
NSObjectController *emuController;
|
NSObjectController *emuController;
|
||||||
|
@ -42,6 +43,7 @@
|
||||||
NSView *viewDisplay;
|
NSView *viewDisplay;
|
||||||
NSView *viewSound;
|
NSView *viewSound;
|
||||||
NSView *viewEmulation;
|
NSView *viewEmulation;
|
||||||
|
NSDictionary *prefViewDict;
|
||||||
|
|
||||||
NSPopUpButton *displayRotationMenu;
|
NSPopUpButton *displayRotationMenu;
|
||||||
NSMenuItem *displayRotationMenuCustomItem;
|
NSMenuItem *displayRotationMenuCustomItem;
|
||||||
|
@ -62,6 +64,7 @@
|
||||||
|
|
||||||
@property (readonly) IBOutlet NSObject *dummyObject;
|
@property (readonly) IBOutlet NSObject *dummyObject;
|
||||||
@property (readonly) IBOutlet NSWindow *window;
|
@property (readonly) IBOutlet NSWindow *window;
|
||||||
|
@property (readonly) IBOutlet NSToolbar *toolbar;
|
||||||
@property (readonly) IBOutlet NSWindow *firmwareConfigSheet;
|
@property (readonly) IBOutlet NSWindow *firmwareConfigSheet;
|
||||||
@property (readonly) IBOutlet NSObjectController *cdsCoreController;
|
@property (readonly) IBOutlet NSObjectController *cdsCoreController;
|
||||||
@property (readonly) IBOutlet NSObjectController *emuController;
|
@property (readonly) IBOutlet NSObjectController *emuController;
|
||||||
|
@ -83,11 +86,7 @@
|
||||||
|
|
||||||
@property (readonly) NSMutableDictionary *bindings;
|
@property (readonly) NSMutableDictionary *bindings;
|
||||||
|
|
||||||
- (IBAction) showGeneralView:(id)sender;
|
- (IBAction) changePrefView:(id)sender;
|
||||||
- (IBAction) showInputView:(id)sender;
|
|
||||||
- (IBAction) showDisplayView:(id)sender;
|
|
||||||
- (IBAction) showSoundView:(id)sender;
|
|
||||||
- (IBAction) showEmulationView:(id)sender;
|
|
||||||
|
|
||||||
- (IBAction) chooseAdvansceneDatabase:(id)sender;
|
- (IBAction) chooseAdvansceneDatabase:(id)sender;
|
||||||
- (void) chooseAdvansceneDatabaseDidEnd:(NSOpenPanel *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo;
|
- (void) chooseAdvansceneDatabaseDidEnd:(NSOpenPanel *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Copyright (C) 2011 Roger Manuel
|
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
|
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
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -32,6 +32,7 @@
|
||||||
|
|
||||||
@synthesize dummyObject;
|
@synthesize dummyObject;
|
||||||
@synthesize window;
|
@synthesize window;
|
||||||
|
@synthesize toolbar;
|
||||||
@synthesize firmwareConfigSheet;
|
@synthesize firmwareConfigSheet;
|
||||||
@synthesize cdsCoreController;
|
@synthesize cdsCoreController;
|
||||||
@synthesize emuController;
|
@synthesize emuController;
|
||||||
|
@ -113,6 +114,8 @@
|
||||||
|
|
||||||
[bindings setObject:iconVolumeFull forKey:@"volumeIconImage"];
|
[bindings setObject:iconVolumeFull forKey:@"volumeIconImage"];
|
||||||
|
|
||||||
|
prefViewDict = nil;
|
||||||
|
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -124,34 +127,36 @@
|
||||||
[iconVolumeMute release];
|
[iconVolumeMute release];
|
||||||
[bindings release];
|
[bindings release];
|
||||||
[videoFilter release];
|
[videoFilter release];
|
||||||
|
[prefViewDict release];
|
||||||
|
|
||||||
[super dealloc];
|
[super dealloc];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction) showGeneralView:(id)sender
|
- (IBAction) changePrefView:(id)sender
|
||||||
{
|
{
|
||||||
[self switchContentView:viewGeneral];
|
if (prefViewDict == nil)
|
||||||
}
|
{
|
||||||
|
// Associates NSView objects to their respective toolbar identifiers.
|
||||||
- (IBAction) showInputView:(id)sender
|
prefViewDict = [[NSDictionary alloc] initWithObjectsAndKeys:
|
||||||
{
|
viewGeneral, @"General",
|
||||||
[self switchContentView:(NSView *)viewInput];
|
viewInput, @"Input",
|
||||||
[window makeFirstResponder:(NSView *)viewInput];
|
viewDisplay, @"Display",
|
||||||
}
|
viewSound, @"Sound",
|
||||||
|
viewEmulation, @"Emulation",
|
||||||
- (IBAction) showDisplayView:(id)sender
|
nil];
|
||||||
{
|
}
|
||||||
[self switchContentView:viewDisplay];
|
|
||||||
}
|
NSString *toolbarItemIdentifier = [[self toolbar] selectedItemIdentifier];
|
||||||
|
NSView *theView = [prefViewDict objectForKey:toolbarItemIdentifier];
|
||||||
- (IBAction) showSoundView:(id)sender
|
if (theView != nil)
|
||||||
{
|
{
|
||||||
[self switchContentView:viewSound];
|
[self switchContentView:theView];
|
||||||
}
|
|
||||||
|
if ([toolbarItemIdentifier isEqualToString:@"Input"])
|
||||||
- (IBAction) showEmulationView:(id)sender
|
{
|
||||||
{
|
[window makeFirstResponder:theView];
|
||||||
[self switchContentView:viewEmulation];
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction) chooseRomForAutoload:(id)sender
|
- (IBAction) chooseRomForAutoload:(id)sender
|
||||||
|
|
Loading…
Reference in New Issue