Update manual and version numbers.
[enjoyable.git] / Enjoyable.xcodeproj / project.pbxproj
index bb1f67c..0e6ca04 100644 (file)
@@ -9,8 +9,25 @@
 /* Begin PBXBuildFile section */
                8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
                D594BF000FAE7397007A85F2 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D594BEFF0FAE7397007A85F2 /* IOKit.framework */; };
+               EE1F3CEA16EF4182008C6426 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = EE1F3CE816EF4182008C6426 /* Localizable.strings */; };
+               EE35A6E417BBCC9500413995 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EE35A6E317BBCC9500413995 /* CoreVideo.framework */; };
+               EE3D897A16EA7EFC00596D1F /* Status Menu Icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = EE3D897916EA7EFC00596D1F /* Status Menu Icon@2x.png */; };
+               EE3D897C16EA806E00596D1F /* Status Menu Icon Disabled@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = EE3D897B16EA806E00596D1F /* Status Menu Icon Disabled@2x.png */; };
+               EE3D897F16EA817E00596D1F /* Status Menu Icon Disabled.png in Resources */ = {isa = PBXBuildFile; fileRef = EE3D897D16EA817E00596D1F /* Status Menu Icon Disabled.png */; };
+               EE3D898016EA817E00596D1F /* Status Menu Icon.png in Resources */ = {isa = PBXBuildFile; fileRef = EE3D897E16EA817E00596D1F /* Status Menu Icon.png */; };
+               EE48263016F6680D001B0C64 /* NSProcessInfo+Debugging.m in Sources */ = {isa = PBXBuildFile; fileRef = EE48262F16F6680D001B0C64 /* NSProcessInfo+Debugging.m */; };
+               EE52145C16F3E8BD00E3C574 /* NSOutlineView+ItemAccessors.m in Sources */ = {isa = PBXBuildFile; fileRef = EE52145B16F3E8BD00E3C574 /* NSOutlineView+ItemAccessors.m */; };
+               EE52145F16F404D500E3C574 /* NJDeviceViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EE52145E16F404D500E3C574 /* NJDeviceViewController.m */; };
+               EE6A122E16E8F46300EDBD32 /* Icon.icns in Resources */ = {isa = PBXBuildFile; fileRef = EE6A122D16E8F46300EDBD32 /* Icon.icns */; };
+               EE83ACEC16F545EA00083E94 /* NJMappingsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EE83ACEB16F545EA00083E94 /* NJMappingsViewController.m */; };
+               EE8455DD16F0E46B00F32A01 /* NSRunningApplication+LoginItem.m in Sources */ = {isa = PBXBuildFile; fileRef = EE8455DC16F0E46B00F32A01 /* NSRunningApplication+LoginItem.m */; };
+               EED4CE6E16ED692400C65AA8 /* NJMappingMenuController.m in Sources */ = {isa = PBXBuildFile; fileRef = EED4CE6D16ED692400C65AA8 /* NJMappingMenuController.m */; };
+               EED4CE7716EE195100C65AA8 /* Sparkle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EED4CE7616EE195100C65AA8 /* Sparkle.framework */; };
+               EED4CE7816EE195B00C65AA8 /* Sparkle.framework in Copy Sparkle Framework */ = {isa = PBXBuildFile; fileRef = EED4CE7616EE195100C65AA8 /* Sparkle.framework */; };
+               EEE703DC16F089FE002FDD69 /* NJHIDManager.m in Sources */ = {isa = PBXBuildFile; fileRef = EEE703DB16F089FE002FDD69 /* NJHIDManager.m */; };
+               EEE703DE16F0B3F6002FDD69 /* NJInputPathElement.m in Sources */ = {isa = PBXBuildFile; fileRef = EEE703DD16F0B3F6002FDD69 /* NJInputPathElement.m */; };
+               EEE73B1616EA42E5009D9D99 /* NSRunningApplication+NJPossibleNames.m in Sources */ = {isa = PBXBuildFile; fileRef = EEE73B1516EA42E5009D9D99 /* NSRunningApplication+NJPossibleNames.m */; };
                EEF17D1916E8E21A00D7DC4D /* com.yukkurigames.Enjoyable.mapping.icns in Resources */ = {isa = PBXBuildFile; fileRef = EEF17D1716E8E21A00D7DC4D /* com.yukkurigames.Enjoyable.mapping.icns */; };
-               EEF17D1A16E8E21A00D7DC4D /* Icon.icns in Resources */ = {isa = PBXBuildFile; fileRef = EEF17D1816E8E21A00D7DC4D /* Icon.icns */; };
                EEF17D1F16E8E23A00D7DC4D /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = EEF17D1B16E8E23A00D7DC4D /* InfoPlist.strings */; };
                EEF17D2016E8E23A00D7DC4D /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = EEF17D1D16E8E23A00D7DC4D /* MainMenu.xib */; };
                EEF17D2216E8E24400D7DC4D /* Help in Resources */ = {isa = PBXBuildFile; fileRef = EEF17D2116E8E24400D7DC4D /* Help */; };
                EEF17D3816E8E2E100D7DC4D /* NSView+FirstResponder.m in Sources */ = {isa = PBXBuildFile; fileRef = EEF17D3216E8E2E100D7DC4D /* NSView+FirstResponder.m */; };
                EEF17D5C16E8E2EF00D7DC4D /* EnjoyableApplicationDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = EEF17D3A16E8E2EF00D7DC4D /* EnjoyableApplicationDelegate.m */; };
                EEF17D5D16E8E2EF00D7DC4D /* NJDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = EEF17D3C16E8E2EF00D7DC4D /* NJDevice.m */; };
-               EEF17D5E16E8E2EF00D7DC4D /* NJDeviceController.m in Sources */ = {isa = PBXBuildFile; fileRef = EEF17D3E16E8E2EF00D7DC4D /* NJDeviceController.m */; };
+               EEF17D5E16E8E2EF00D7DC4D /* NJInputController.m in Sources */ = {isa = PBXBuildFile; fileRef = EEF17D3E16E8E2EF00D7DC4D /* NJInputController.m */; };
                EEF17D5F16E8E2EF00D7DC4D /* NJInput.m in Sources */ = {isa = PBXBuildFile; fileRef = EEF17D4016E8E2EF00D7DC4D /* NJInput.m */; };
                EEF17D6016E8E2EF00D7DC4D /* NJInputAnalog.m in Sources */ = {isa = PBXBuildFile; fileRef = EEF17D4216E8E2EF00D7DC4D /* NJInputAnalog.m */; };
                EEF17D6116E8E2EF00D7DC4D /* NJInputButton.m in Sources */ = {isa = PBXBuildFile; fileRef = EEF17D4416E8E2EF00D7DC4D /* NJInputButton.m */; };
                EEF17D6216E8E2EF00D7DC4D /* NJInputHat.m in Sources */ = {isa = PBXBuildFile; fileRef = EEF17D4616E8E2EF00D7DC4D /* NJInputHat.m */; };
                EEF17D6316E8E2EF00D7DC4D /* NJKeyInputField.m in Sources */ = {isa = PBXBuildFile; fileRef = EEF17D4916E8E2EF00D7DC4D /* NJKeyInputField.m */; };
                EEF17D6416E8E2EF00D7DC4D /* NJMapping.m in Sources */ = {isa = PBXBuildFile; fileRef = EEF17D4B16E8E2EF00D7DC4D /* NJMapping.m */; };
-               EEF17D6516E8E2EF00D7DC4D /* NJMappingsController.m in Sources */ = {isa = PBXBuildFile; fileRef = EEF17D4D16E8E2EF00D7DC4D /* NJMappingsController.m */; };
                EEF17D6616E8E2EF00D7DC4D /* NJOutput.m in Sources */ = {isa = PBXBuildFile; fileRef = EEF17D4F16E8E2EF00D7DC4D /* NJOutput.m */; };
-               EEF17D6716E8E2EF00D7DC4D /* NJOutputController.m in Sources */ = {isa = PBXBuildFile; fileRef = EEF17D5116E8E2EF00D7DC4D /* NJOutputController.m */; };
+               EEF17D6716E8E2EF00D7DC4D /* NJOutputViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EEF17D5116E8E2EF00D7DC4D /* NJOutputViewController.m */; };
                EEF17D6816E8E2EF00D7DC4D /* NJOutputKeyPress.m in Sources */ = {isa = PBXBuildFile; fileRef = EEF17D5316E8E2EF00D7DC4D /* NJOutputKeyPress.m */; };
                EEF17D6916E8E2EF00D7DC4D /* NJOutputMapping.m in Sources */ = {isa = PBXBuildFile; fileRef = EEF17D5516E8E2EF00D7DC4D /* NJOutputMapping.m */; };
                EEF17D6A16E8E2EF00D7DC4D /* NJOutputMouseButton.m in Sources */ = {isa = PBXBuildFile; fileRef = EEF17D5716E8E2EF00D7DC4D /* NJOutputMouseButton.m */; };
                EEF17D6C16E8E2EF00D7DC4D /* NJOutputMouseScroll.m in Sources */ = {isa = PBXBuildFile; fileRef = EEF17D5B16E8E2EF00D7DC4D /* NJOutputMouseScroll.m */; };
 /* End PBXBuildFile section */
 
+/* Begin PBXCopyFilesBuildPhase section */
+               EED4CE7416EE0E6400C65AA8 /* Copy Sparkle Framework */ = {
+                       isa = PBXCopyFilesBuildPhase;
+                       buildActionMask = 2147483647;
+                       dstPath = "";
+                       dstSubfolderSpec = 10;
+                       files = (
+                               EED4CE7816EE195B00C65AA8 /* Sparkle.framework in Copy Sparkle Framework */,
+                       );
+                       name = "Copy Sparkle Framework";
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+/* End PBXCopyFilesBuildPhase section */
+
 /* Begin PBXFileReference section */
                1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
                29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; };
                8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
                8D1107320486CEB800E47090 /* Enjoyable.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Enjoyable.app; sourceTree = BUILT_PRODUCTS_DIR; };
                D594BEFF0FAE7397007A85F2 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = "<absolute>"; };
+               EE1F3CE916EF4182008C6426 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = Resources/English.lproj/Localizable.strings; sourceTree = "<group>"; };
+               EE35A6E317BBCC9500413995 /* CoreVideo.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreVideo.framework; path = System/Library/Frameworks/CoreVideo.framework; sourceTree = SDKROOT; };
+               EE3D897916EA7EFC00596D1F /* Status Menu Icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Status Menu Icon@2x.png"; path = "Resources/Status Menu Icon@2x.png"; sourceTree = "<group>"; };
+               EE3D897B16EA806E00596D1F /* Status Menu Icon Disabled@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Status Menu Icon Disabled@2x.png"; path = "Resources/Status Menu Icon Disabled@2x.png"; sourceTree = "<group>"; };
+               EE3D897D16EA817E00596D1F /* Status Menu Icon Disabled.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Status Menu Icon Disabled.png"; path = "Resources/Status Menu Icon Disabled.png"; sourceTree = "<group>"; };
+               EE3D897E16EA817E00596D1F /* Status Menu Icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Status Menu Icon.png"; path = "Resources/Status Menu Icon.png"; sourceTree = "<group>"; };
+               EE48262E16F6680D001B0C64 /* NSProcessInfo+Debugging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSProcessInfo+Debugging.h"; path = "Categories/NSProcessInfo+Debugging.h"; sourceTree = "<group>"; };
+               EE48262F16F6680D001B0C64 /* NSProcessInfo+Debugging.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSProcessInfo+Debugging.m"; path = "Categories/NSProcessInfo+Debugging.m"; sourceTree = "<group>"; };
+               EE52145A16F3E8BD00E3C574 /* NSOutlineView+ItemAccessors.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSOutlineView+ItemAccessors.h"; path = "Categories/NSOutlineView+ItemAccessors.h"; sourceTree = "<group>"; };
+               EE52145B16F3E8BD00E3C574 /* NSOutlineView+ItemAccessors.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSOutlineView+ItemAccessors.m"; path = "Categories/NSOutlineView+ItemAccessors.m"; sourceTree = "<group>"; };
+               EE52145D16F404D500E3C574 /* NJDeviceViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NJDeviceViewController.h; path = Classes/NJDeviceViewController.h; sourceTree = "<group>"; };
+               EE52145E16F404D500E3C574 /* NJDeviceViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NJDeviceViewController.m; path = Classes/NJDeviceViewController.m; sourceTree = "<group>"; };
+               EE6A122D16E8F46300EDBD32 /* Icon.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = Icon.icns; sourceTree = "<group>"; };
+               EE83ACEA16F545EA00083E94 /* NJMappingsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NJMappingsViewController.h; path = Classes/NJMappingsViewController.h; sourceTree = "<group>"; };
+               EE83ACEB16F545EA00083E94 /* NJMappingsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NJMappingsViewController.m; path = Classes/NJMappingsViewController.m; sourceTree = "<group>"; };
+               EE8455DB16F0E46B00F32A01 /* NSRunningApplication+LoginItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSRunningApplication+LoginItem.h"; path = "Categories/NSRunningApplication+LoginItem.h"; sourceTree = "<group>"; };
+               EE8455DC16F0E46B00F32A01 /* NSRunningApplication+LoginItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSRunningApplication+LoginItem.m"; path = "Categories/NSRunningApplication+LoginItem.m"; sourceTree = "<group>"; };
+               EED4CE6C16ED692400C65AA8 /* NJMappingMenuController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NJMappingMenuController.h; path = Classes/NJMappingMenuController.h; sourceTree = "<group>"; };
+               EED4CE6D16ED692400C65AA8 /* NJMappingMenuController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NJMappingMenuController.m; path = Classes/NJMappingMenuController.m; sourceTree = "<group>"; };
+               EED4CE7616EE195100C65AA8 /* Sparkle.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Sparkle.framework; sourceTree = "<group>"; };
+               EEE703DA16F089FE002FDD69 /* NJHIDManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NJHIDManager.h; path = Classes/NJHIDManager.h; sourceTree = "<group>"; };
+               EEE703DB16F089FE002FDD69 /* NJHIDManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NJHIDManager.m; path = Classes/NJHIDManager.m; sourceTree = "<group>"; };
+               EEE703DD16F0B3F6002FDD69 /* NJInputPathElement.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NJInputPathElement.m; path = Classes/NJInputPathElement.m; sourceTree = "<group>"; };
+               EEE73B1416EA42E5009D9D99 /* NSRunningApplication+NJPossibleNames.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSRunningApplication+NJPossibleNames.h"; path = "Categories/NSRunningApplication+NJPossibleNames.h"; sourceTree = "<group>"; };
+               EEE73B1516EA42E5009D9D99 /* NSRunningApplication+NJPossibleNames.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSRunningApplication+NJPossibleNames.m"; path = "Categories/NSRunningApplication+NJPossibleNames.m"; sourceTree = "<group>"; };
                EEF17D1716E8E21A00D7DC4D /* com.yukkurigames.Enjoyable.mapping.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = com.yukkurigames.Enjoyable.mapping.icns; path = Resources/com.yukkurigames.Enjoyable.mapping.icns; sourceTree = "<group>"; };
-               EEF17D1816E8E21A00D7DC4D /* Icon.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = Icon.icns; path = Resources/Icon.icns; sourceTree = "<group>"; };
                EEF17D1C16E8E23A00D7DC4D /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = Resources/English.lproj/InfoPlist.strings; sourceTree = "<group>"; };
                EEF17D1E16E8E23A00D7DC4D /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = Resources/English.lproj/MainMenu.xib; sourceTree = "<group>"; };
                EEF17D2116E8E24400D7DC4D /* Help */ = {isa = PBXFileReference; lastKnownFileType = folder; name = Help; path = Resources/Help; sourceTree = "<group>"; };
                EEF17D3A16E8E2EF00D7DC4D /* EnjoyableApplicationDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = EnjoyableApplicationDelegate.m; path = Classes/EnjoyableApplicationDelegate.m; sourceTree = "<group>"; };
                EEF17D3B16E8E2EF00D7DC4D /* NJDevice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NJDevice.h; path = Classes/NJDevice.h; sourceTree = "<group>"; };
                EEF17D3C16E8E2EF00D7DC4D /* NJDevice.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NJDevice.m; path = Classes/NJDevice.m; sourceTree = "<group>"; };
-               EEF17D3D16E8E2EF00D7DC4D /* NJDeviceController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NJDeviceController.h; path = Classes/NJDeviceController.h; sourceTree = "<group>"; };
-               EEF17D3E16E8E2EF00D7DC4D /* NJDeviceController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NJDeviceController.m; path = Classes/NJDeviceController.m; sourceTree = "<group>"; };
+               EEF17D3D16E8E2EF00D7DC4D /* NJInputController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NJInputController.h; path = Classes/NJInputController.h; sourceTree = "<group>"; };
+               EEF17D3E16E8E2EF00D7DC4D /* NJInputController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NJInputController.m; path = Classes/NJInputController.m; sourceTree = "<group>"; };
                EEF17D3F16E8E2EF00D7DC4D /* NJInput.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NJInput.h; path = Classes/NJInput.h; sourceTree = "<group>"; };
                EEF17D4016E8E2EF00D7DC4D /* NJInput.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NJInput.m; path = Classes/NJInput.m; sourceTree = "<group>"; };
                EEF17D4116E8E2EF00D7DC4D /* NJInputAnalog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NJInputAnalog.h; path = Classes/NJInputAnalog.h; sourceTree = "<group>"; };
                EEF17D4916E8E2EF00D7DC4D /* NJKeyInputField.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NJKeyInputField.m; path = Classes/NJKeyInputField.m; sourceTree = "<group>"; };
                EEF17D4A16E8E2EF00D7DC4D /* NJMapping.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NJMapping.h; path = Classes/NJMapping.h; sourceTree = "<group>"; };
                EEF17D4B16E8E2EF00D7DC4D /* NJMapping.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NJMapping.m; path = Classes/NJMapping.m; sourceTree = "<group>"; };
-               EEF17D4C16E8E2EF00D7DC4D /* NJMappingsController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NJMappingsController.h; path = Classes/NJMappingsController.h; sourceTree = "<group>"; };
-               EEF17D4D16E8E2EF00D7DC4D /* NJMappingsController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NJMappingsController.m; path = Classes/NJMappingsController.m; sourceTree = "<group>"; };
                EEF17D4E16E8E2EF00D7DC4D /* NJOutput.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NJOutput.h; path = Classes/NJOutput.h; sourceTree = "<group>"; };
                EEF17D4F16E8E2EF00D7DC4D /* NJOutput.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NJOutput.m; path = Classes/NJOutput.m; sourceTree = "<group>"; };
-               EEF17D5016E8E2EF00D7DC4D /* NJOutputController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NJOutputController.h; path = Classes/NJOutputController.h; sourceTree = "<group>"; };
-               EEF17D5116E8E2EF00D7DC4D /* NJOutputController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NJOutputController.m; path = Classes/NJOutputController.m; sourceTree = "<group>"; };
+               EEF17D5016E8E2EF00D7DC4D /* NJOutputViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NJOutputViewController.h; path = Classes/NJOutputViewController.h; sourceTree = "<group>"; };
+               EEF17D5116E8E2EF00D7DC4D /* NJOutputViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NJOutputViewController.m; path = Classes/NJOutputViewController.m; sourceTree = "<group>"; };
                EEF17D5216E8E2EF00D7DC4D /* NJOutputKeyPress.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NJOutputKeyPress.h; path = Classes/NJOutputKeyPress.h; sourceTree = "<group>"; };
                EEF17D5316E8E2EF00D7DC4D /* NJOutputKeyPress.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NJOutputKeyPress.m; path = Classes/NJOutputKeyPress.m; sourceTree = "<group>"; };
                EEF17D5416E8E2EF00D7DC4D /* NJOutputMapping.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NJOutputMapping.h; path = Classes/NJOutputMapping.h; sourceTree = "<group>"; };
                        isa = PBXFrameworksBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
+                               EE35A6E417BBCC9500413995 /* CoreVideo.framework in Frameworks */,
                                8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */,
                                D594BF000FAE7397007A85F2 /* IOKit.framework in Frameworks */,
+                               EED4CE7716EE195100C65AA8 /* Sparkle.framework in Frameworks */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                        children = (
                                EEF17D3916E8E2EF00D7DC4D /* EnjoyableApplicationDelegate.h */,
                                EEF17D3A16E8E2EF00D7DC4D /* EnjoyableApplicationDelegate.m */,
-                               EEF17D3D16E8E2EF00D7DC4D /* NJDeviceController.h */,
-                               EEF17D3E16E8E2EF00D7DC4D /* NJDeviceController.m */,
-                               EEF17D4C16E8E2EF00D7DC4D /* NJMappingsController.h */,
-                               EEF17D4D16E8E2EF00D7DC4D /* NJMappingsController.m */,
-                               EEF17D5016E8E2EF00D7DC4D /* NJOutputController.h */,
-                               EEF17D5116E8E2EF00D7DC4D /* NJOutputController.m */,
-                               EEF17D4816E8E2EF00D7DC4D /* NJKeyInputField.h */,
-                               EEF17D4916E8E2EF00D7DC4D /* NJKeyInputField.m */,
-                               EEF17D4A16E8E2EF00D7DC4D /* NJMapping.h */,
-                               EEF17D4B16E8E2EF00D7DC4D /* NJMapping.m */,
-                               EEF17D4716E8E2EF00D7DC4D /* NJInputPathElement.h */,
-                               EEF17D3B16E8E2EF00D7DC4D /* NJDevice.h */,
-                               EEF17D3C16E8E2EF00D7DC4D /* NJDevice.m */,
-                               EEF17D3F16E8E2EF00D7DC4D /* NJInput.h */,
-                               EEF17D4016E8E2EF00D7DC4D /* NJInput.m */,
-                               EEF17D4116E8E2EF00D7DC4D /* NJInputAnalog.h */,
-                               EEF17D4216E8E2EF00D7DC4D /* NJInputAnalog.m */,
-                               EEF17D4316E8E2EF00D7DC4D /* NJInputButton.h */,
-                               EEF17D4416E8E2EF00D7DC4D /* NJInputButton.m */,
-                               EEF17D4516E8E2EF00D7DC4D /* NJInputHat.h */,
-                               EEF17D4616E8E2EF00D7DC4D /* NJInputHat.m */,
-                               EEF17D4E16E8E2EF00D7DC4D /* NJOutput.h */,
-                               EEF17D4F16E8E2EF00D7DC4D /* NJOutput.m */,
-                               EEF17D5216E8E2EF00D7DC4D /* NJOutputKeyPress.h */,
-                               EEF17D5316E8E2EF00D7DC4D /* NJOutputKeyPress.m */,
-                               EEF17D5416E8E2EF00D7DC4D /* NJOutputMapping.h */,
-                               EEF17D5516E8E2EF00D7DC4D /* NJOutputMapping.m */,
-                               EEF17D5616E8E2EF00D7DC4D /* NJOutputMouseButton.h */,
-                               EEF17D5716E8E2EF00D7DC4D /* NJOutputMouseButton.m */,
-                               EEF17D5816E8E2EF00D7DC4D /* NJOutputMouseMove.h */,
-                               EEF17D5916E8E2EF00D7DC4D /* NJOutputMouseMove.m */,
-                               EEF17D5A16E8E2EF00D7DC4D /* NJOutputMouseScroll.h */,
-                               EEF17D5B16E8E2EF00D7DC4D /* NJOutputMouseScroll.m */,
+                               EEDB86A216FA4C42000E91C3 /* Input */,
+                               EEDB86A316FA4C5C000E91C3 /* Output */,
+                               EEDB86A516FA4CE4000E91C3 /* Views */,
+                               EEDB86A416FA4CD1000E91C3 /* View Controllers */,
                        );
                        name = Classes;
                        sourceTree = "<group>";
                1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */ = {
                        isa = PBXGroup;
                        children = (
+                               EED4CE7616EE195100C65AA8 /* Sparkle.framework */,
                                D594BEFF0FAE7397007A85F2 /* IOKit.framework */,
+                               EE35A6E317BBCC9500413995 /* CoreVideo.framework */,
                                1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */,
                        );
                        name = "Linked Frameworks";
                29B97317FDCFA39411CA2CEA /* Resources */ = {
                        isa = PBXGroup;
                        children = (
+                               EE3D897D16EA817E00596D1F /* Status Menu Icon Disabled.png */,
+                               EE3D897E16EA817E00596D1F /* Status Menu Icon.png */,
+                               EE3D897B16EA806E00596D1F /* Status Menu Icon Disabled@2x.png */,
+                               EE3D897916EA7EFC00596D1F /* Status Menu Icon@2x.png */,
+                               EE6A122D16E8F46300EDBD32 /* Icon.icns */,
                                EEF17D2116E8E24400D7DC4D /* Help */,
+                               EE1F3CE816EF4182008C6426 /* Localizable.strings */,
                                EEF17D1B16E8E23A00D7DC4D /* InfoPlist.strings */,
                                EEF17D1D16E8E23A00D7DC4D /* MainMenu.xib */,
                                EEF17D1716E8E21A00D7DC4D /* com.yukkurigames.Enjoyable.mapping.icns */,
-                               EEF17D1816E8E21A00D7DC4D /* Icon.icns */,
                        );
                        name = Resources;
                        sourceTree = "<group>";
                EE1D5F8B16E403D600749C36 /* Categories */ = {
                        isa = PBXGroup;
                        children = (
+                               EE8455DB16F0E46B00F32A01 /* NSRunningApplication+LoginItem.h */,
+                               EE8455DC16F0E46B00F32A01 /* NSRunningApplication+LoginItem.m */,
                                EEF17D2716E8E2E100D7DC4D /* NSError+Description.h */,
                                EEF17D2816E8E2E100D7DC4D /* NSError+Description.m */,
                                EEF17D2916E8E2E100D7DC4D /* NSFileManager+UniqueNames.h */,
                                EEF17D3016E8E2E100D7DC4D /* NSString+FixFilename.m */,
                                EEF17D3116E8E2E100D7DC4D /* NSView+FirstResponder.h */,
                                EEF17D3216E8E2E100D7DC4D /* NSView+FirstResponder.m */,
+                               EEE73B1416EA42E5009D9D99 /* NSRunningApplication+NJPossibleNames.h */,
+                               EEE73B1516EA42E5009D9D99 /* NSRunningApplication+NJPossibleNames.m */,
+                               EE52145A16F3E8BD00E3C574 /* NSOutlineView+ItemAccessors.h */,
+                               EE52145B16F3E8BD00E3C574 /* NSOutlineView+ItemAccessors.m */,
+                               EE48262E16F6680D001B0C64 /* NSProcessInfo+Debugging.h */,
+                               EE48262F16F6680D001B0C64 /* NSProcessInfo+Debugging.m */,
                        );
                        name = Categories;
                        sourceTree = "<group>";
                };
+               EEDB86A216FA4C42000E91C3 /* Input */ = {
+                       isa = PBXGroup;
+                       children = (
+                               EEE703DA16F089FE002FDD69 /* NJHIDManager.h */,
+                               EEE703DB16F089FE002FDD69 /* NJHIDManager.m */,
+                               EEF17D3D16E8E2EF00D7DC4D /* NJInputController.h */,
+                               EEF17D3E16E8E2EF00D7DC4D /* NJInputController.m */,
+                               EEF17D4716E8E2EF00D7DC4D /* NJInputPathElement.h */,
+                               EEE703DD16F0B3F6002FDD69 /* NJInputPathElement.m */,
+                               EEF17D4A16E8E2EF00D7DC4D /* NJMapping.h */,
+                               EEF17D4B16E8E2EF00D7DC4D /* NJMapping.m */,
+                               EEF17D3B16E8E2EF00D7DC4D /* NJDevice.h */,
+                               EEF17D3C16E8E2EF00D7DC4D /* NJDevice.m */,
+                               EEF17D3F16E8E2EF00D7DC4D /* NJInput.h */,
+                               EEF17D4016E8E2EF00D7DC4D /* NJInput.m */,
+                               EEF17D4116E8E2EF00D7DC4D /* NJInputAnalog.h */,
+                               EEF17D4216E8E2EF00D7DC4D /* NJInputAnalog.m */,
+                               EEF17D4316E8E2EF00D7DC4D /* NJInputButton.h */,
+                               EEF17D4416E8E2EF00D7DC4D /* NJInputButton.m */,
+                               EEF17D4516E8E2EF00D7DC4D /* NJInputHat.h */,
+                               EEF17D4616E8E2EF00D7DC4D /* NJInputHat.m */,
+                       );
+                       name = Input;
+                       sourceTree = "<group>";
+               };
+               EEDB86A316FA4C5C000E91C3 /* Output */ = {
+                       isa = PBXGroup;
+                       children = (
+                               EEF17D4E16E8E2EF00D7DC4D /* NJOutput.h */,
+                               EEF17D4F16E8E2EF00D7DC4D /* NJOutput.m */,
+                               EEF17D5216E8E2EF00D7DC4D /* NJOutputKeyPress.h */,
+                               EEF17D5316E8E2EF00D7DC4D /* NJOutputKeyPress.m */,
+                               EEF17D5416E8E2EF00D7DC4D /* NJOutputMapping.h */,
+                               EEF17D5516E8E2EF00D7DC4D /* NJOutputMapping.m */,
+                               EEF17D5616E8E2EF00D7DC4D /* NJOutputMouseButton.h */,
+                               EEF17D5716E8E2EF00D7DC4D /* NJOutputMouseButton.m */,
+                               EEF17D5816E8E2EF00D7DC4D /* NJOutputMouseMove.h */,
+                               EEF17D5916E8E2EF00D7DC4D /* NJOutputMouseMove.m */,
+                               EEF17D5A16E8E2EF00D7DC4D /* NJOutputMouseScroll.h */,
+                               EEF17D5B16E8E2EF00D7DC4D /* NJOutputMouseScroll.m */,
+                       );
+                       name = Output;
+                       sourceTree = "<group>";
+               };
+               EEDB86A416FA4CD1000E91C3 /* View Controllers */ = {
+                       isa = PBXGroup;
+                       children = (
+                               EEF17D5016E8E2EF00D7DC4D /* NJOutputViewController.h */,
+                               EEF17D5116E8E2EF00D7DC4D /* NJOutputViewController.m */,
+                               EED4CE6C16ED692400C65AA8 /* NJMappingMenuController.h */,
+                               EED4CE6D16ED692400C65AA8 /* NJMappingMenuController.m */,
+                               EE52145D16F404D500E3C574 /* NJDeviceViewController.h */,
+                               EE52145E16F404D500E3C574 /* NJDeviceViewController.m */,
+                               EE83ACEA16F545EA00083E94 /* NJMappingsViewController.h */,
+                               EE83ACEB16F545EA00083E94 /* NJMappingsViewController.m */,
+                       );
+                       name = "View Controllers";
+                       sourceTree = "<group>";
+               };
+               EEDB86A516FA4CE4000E91C3 /* Views */ = {
+                       isa = PBXGroup;
+                       children = (
+                               EEF17D4816E8E2EF00D7DC4D /* NJKeyInputField.h */,
+                               EEF17D4916E8E2EF00D7DC4D /* NJKeyInputField.m */,
+                       );
+                       name = Views;
+                       sourceTree = "<group>";
+               };
 /* End PBXGroup section */
 
 /* Begin PBXNativeTarget section */
                        isa = PBXNativeTarget;
                        buildConfigurationList = C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "Enjoyable" */;
                        buildPhases = (
+                               EE3D898416EAAE1600596D1F /* Increment build number */,
                                EED7E81616E7B547004A0BA4 /* Generate Help Index */,
                                8D1107290486CEB800E47090 /* Resources */,
                                8D11072C0486CEB800E47090 /* Sources */,
                                8D11072E0486CEB800E47090 /* Frameworks */,
+                               EED4CE7416EE0E6400C65AA8 /* Copy Sparkle Framework */,
                        );
                        buildRules = (
                        );
                        buildActionMask = 2147483647;
                        files = (
                                EEF17D1916E8E21A00D7DC4D /* com.yukkurigames.Enjoyable.mapping.icns in Resources */,
-                               EEF17D1A16E8E21A00D7DC4D /* Icon.icns in Resources */,
                                EEF17D1F16E8E23A00D7DC4D /* InfoPlist.strings in Resources */,
                                EEF17D2016E8E23A00D7DC4D /* MainMenu.xib in Resources */,
                                EEF17D2216E8E24400D7DC4D /* Help in Resources */,
+                               EE6A122E16E8F46300EDBD32 /* Icon.icns in Resources */,
+                               EE3D897A16EA7EFC00596D1F /* Status Menu Icon@2x.png in Resources */,
+                               EE3D897C16EA806E00596D1F /* Status Menu Icon Disabled@2x.png in Resources */,
+                               EE3D897F16EA817E00596D1F /* Status Menu Icon Disabled.png in Resources */,
+                               EE3D898016EA817E00596D1F /* Status Menu Icon.png in Resources */,
+                               EE1F3CEA16EF4182008C6426 /* Localizable.strings in Resources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
 /* End PBXResourcesBuildPhase section */
 
 /* Begin PBXShellScriptBuildPhase section */
+               EE3D898416EAAE1600596D1F /* Increment build number */ = {
+                       isa = PBXShellScriptBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                       );
+                       inputPaths = (
+                       );
+                       name = "Increment build number";
+                       outputPaths = (
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+                       shellPath = /bin/sh;
+                       shellScript = "#!/bin/sh\n\nplist=\"${PROJECT_DIR}/${INFOPLIST_FILE}\"\ndir=\"$(dirname \"$plist\")\"\n\n# Only increment the build number if source files have changed\nif [ -n \"$(find \"$dir\" \\! -path \"*xcuserdata*\" \\! -path \"*.git*\" \\! -name .DS_Store \\! -path \"*Website*\" -newer \"$plist\")\" ]; then\n    buildnum=$(/usr/libexec/Plistbuddy -c \"Print CFBundleVersion\" \"$plist\")\n    if [ -z \"$buildnum\" ]; then\n        echo \"No build number in $plist\"\n        exit 2\n    fi\n    buildnum=$(expr $buildnum + 1)\n    /usr/libexec/Plistbuddy -c \"Set CFBundleVersion $buildnum\" \"$plist\"\n    echo \"Incremented build number to $buildnum\"\nelse\n    echo \"Not incrementing build number as source files have not changed\"\nfi\n";
+               };
                EED7E81616E7B547004A0BA4 /* Generate Help Index */ = {
                        isa = PBXShellScriptBuildPhase;
                        buildActionMask = 2147483647;
                                EEF17D3816E8E2E100D7DC4D /* NSView+FirstResponder.m in Sources */,
                                EEF17D5C16E8E2EF00D7DC4D /* EnjoyableApplicationDelegate.m in Sources */,
                                EEF17D5D16E8E2EF00D7DC4D /* NJDevice.m in Sources */,
-                               EEF17D5E16E8E2EF00D7DC4D /* NJDeviceController.m in Sources */,
+                               EEF17D5E16E8E2EF00D7DC4D /* NJInputController.m in Sources */,
                                EEF17D5F16E8E2EF00D7DC4D /* NJInput.m in Sources */,
                                EEF17D6016E8E2EF00D7DC4D /* NJInputAnalog.m in Sources */,
                                EEF17D6116E8E2EF00D7DC4D /* NJInputButton.m in Sources */,
                                EEF17D6216E8E2EF00D7DC4D /* NJInputHat.m in Sources */,
                                EEF17D6316E8E2EF00D7DC4D /* NJKeyInputField.m in Sources */,
                                EEF17D6416E8E2EF00D7DC4D /* NJMapping.m in Sources */,
-                               EEF17D6516E8E2EF00D7DC4D /* NJMappingsController.m in Sources */,
                                EEF17D6616E8E2EF00D7DC4D /* NJOutput.m in Sources */,
-                               EEF17D6716E8E2EF00D7DC4D /* NJOutputController.m in Sources */,
+                               EEF17D6716E8E2EF00D7DC4D /* NJOutputViewController.m in Sources */,
                                EEF17D6816E8E2EF00D7DC4D /* NJOutputKeyPress.m in Sources */,
                                EEF17D6916E8E2EF00D7DC4D /* NJOutputMapping.m in Sources */,
                                EEF17D6A16E8E2EF00D7DC4D /* NJOutputMouseButton.m in Sources */,
                                EEF17D6B16E8E2EF00D7DC4D /* NJOutputMouseMove.m in Sources */,
                                EEF17D6C16E8E2EF00D7DC4D /* NJOutputMouseScroll.m in Sources */,
+                               EEE73B1616EA42E5009D9D99 /* NSRunningApplication+NJPossibleNames.m in Sources */,
+                               EED4CE6E16ED692400C65AA8 /* NJMappingMenuController.m in Sources */,
+                               EEE703DC16F089FE002FDD69 /* NJHIDManager.m in Sources */,
+                               EEE703DE16F0B3F6002FDD69 /* NJInputPathElement.m in Sources */,
+                               EE8455DD16F0E46B00F32A01 /* NSRunningApplication+LoginItem.m in Sources */,
+                               EE52145C16F3E8BD00E3C574 /* NSOutlineView+ItemAccessors.m in Sources */,
+                               EE52145F16F404D500E3C574 /* NJDeviceViewController.m in Sources */,
+                               EE83ACEC16F545EA00083E94 /* NJMappingsViewController.m in Sources */,
+                               EE48263016F6680D001B0C64 /* NSProcessInfo+Debugging.m in Sources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
 /* End PBXSourcesBuildPhase section */
 
 /* Begin PBXVariantGroup section */
+               EE1F3CE816EF4182008C6426 /* Localizable.strings */ = {
+                       isa = PBXVariantGroup;
+                       children = (
+                               EE1F3CE916EF4182008C6426 /* English */,
+                       );
+                       name = Localizable.strings;
+                       sourceTree = "<group>";
+               };
                EEF17D1B16E8E23A00D7DC4D /* InfoPlist.strings */ = {
                        isa = PBXVariantGroup;
                        children = (
                                CLANG_ENABLE_OBJC_ARC = YES;
                                CLANG_WARN_EMPTY_BODY = YES;
                                CLANG_WARN_IMPLICIT_SIGN_CONVERSION = NO;
+                               CODE_SIGN_IDENTITY = "Joe Wreschnig's Self-Signed OS X Applications";
                                COMBINE_HIDPI_IMAGES = YES;
                                COPY_PHASE_STRIP = NO;
+                               FRAMEWORK_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "\"$(SRCROOT)\"",
+                               );
                                GCC_C_LANGUAGE_STANDARD = c99;
                                GCC_DYNAMIC_NO_PIC = NO;
                                GCC_MODEL_TUNING = G5;
                                INSTALL_PATH = "$(HOME)/Applications";
                                MACOSX_DEPLOYMENT_TARGET = 10.7;
                                PRODUCT_NAME = Enjoyable;
+                               PROVISIONING_PROFILE = "";
                        };
                        name = Debug;
                };
                                CLANG_ENABLE_OBJC_ARC = YES;
                                CLANG_WARN_EMPTY_BODY = YES;
                                CLANG_WARN_IMPLICIT_SIGN_CONVERSION = NO;
+                               CODE_SIGN_IDENTITY = "Joe Wreschnig's Self-Signed OS X Applications";
                                COMBINE_HIDPI_IMAGES = YES;
                                DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+                               FRAMEWORK_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "\"$(SRCROOT)\"",
+                               );
                                GCC_C_LANGUAGE_STANDARD = c99;
                                GCC_MODEL_TUNING = G5;
                                GCC_PRECOMPILE_PREFIX_HEADER = YES;
                                INSTALL_PATH = "$(HOME)/Applications";
                                MACOSX_DEPLOYMENT_TARGET = 10.7;
                                PRODUCT_NAME = Enjoyable;
+                               PROVISIONING_PROFILE = "";
                        };
                        name = Release;
                };
                                CLANG_WARN__DUPLICATE_METHOD_MATCH = NO;
                                GCC_C_LANGUAGE_STANDARD = c99;
                                GCC_OPTIMIZATION_LEVEL = 0;
+                               GCC_PREPROCESSOR_DEFINITIONS = "DEBUG=1";
                                GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = YES;
                                GCC_TREAT_INCOMPATIBLE_POINTER_TYPE_WARNINGS_AS_ERRORS = YES;
                                GCC_TREAT_WARNINGS_AS_ERRORS = YES;