Fix several cases where the UI did not properly reflect model changes.
authorJoe Wreschnig <joe.wreschnig@gmail.com>
Mon, 18 Mar 2013 13:40:50 +0000 (14:40 +0100)
committerJoe Wreschnig <joe.wreschnig@gmail.com>
Mon, 18 Mar 2013 13:40:50 +0000 (14:40 +0100)
13 files changed:
Classes/EnjoyableApplicationDelegate.m
Classes/NJDevice.m
Classes/NJDeviceController.m
Classes/NJDeviceViewController.h
Classes/NJDeviceViewController.m
Classes/NJInput.h
Classes/NJInputAnalog.m
Classes/NJInputButton.m
Classes/NJInputHat.m
Classes/NJMappingsController.h
Classes/NJMappingsController.m
Info.plist
Resources/English.lproj/MainMenu.xib

index 7c9ae7e7964689ed8ff0d1656266376b905fae7e..bf2a336bc54eec76ce2e1dcfe974d6595c1ed94b 100644 (file)
     } else if (self.mappingsController[mapping.name]) {
         [self.mappingsController[mapping.name] mergeEntriesFrom:mapping];
     } else if (mapping) {
+        [self.mvc beginUpdates];
         [self.mappingsController addMapping:mapping];
+        [self.mvc addedMappingAtIndex:self.mappingsController.count - 1 startEditing:NO];
+        [self.mvc endUpdates];
+        [self.mappingsController activateMapping:mapping];
     } else {
         [window presentError:error
               modalForWindow:window
     } else if (self.mappingsController[mapping.name]) {
         [self.mappingsController[mapping.name] mergeEntriesFrom:mapping];
     } else if (mapping) {
+        [self.mvc beginUpdates];
+        [self.mvc addedMappingAtIndex:index startEditing:NO];
         [self.mappingsController insertMapping:mapping atIndex:index];
+        [self.mvc endUpdates];
     }
     return !!mapping;
 }
index ddc6cdeccaf5444c7722f1e3bf477206c0318004..bf3925132189f868949e018599ecfe190f8db043 100644 (file)
@@ -72,6 +72,7 @@ static NSArray *InputsForElement(IOHIDDeviceRef device, id parent) {
         _vendorId = [(__bridge NSNumber *)IOHIDDeviceGetProperty(dev, CFSTR(kIOHIDVendorIDKey)) intValue];
         _productId = [(__bridge NSNumber *)IOHIDDeviceGetProperty(dev, CFSTR(kIOHIDProductIDKey)) intValue];
         self.children = InputsForElement(dev, self);
+        self.index = 1;
     }
     return self;
 }
index 000df5f60a4f4d6be91dd8f1e391b02bc2423de7..bdd1bbf9e0c21f382f861c97bf9ec95c0877b3e7 100644 (file)
     }
 }
 
-- (void)hidManager:(NJHIDManager *)manager deviceAdded:(IOHIDDeviceRef)device {
-    NJDevice *match = [[NJDevice alloc] initWithDevice:device];
-    match.index = 1;
+- (void)addDevice:(NJDevice *)device {
     BOOL available;
     do {
         available = YES;
         for (NJDevice *used in _devices) {
-            if ([used isEqual:match]) {
-                match.index += 1;
+            if ([used isEqual:device]) {
+                device.index += 1;
                 available = NO;
             }
         }
     } while (!available);
+    
+    [_devices addObject:device];
+}
 
-    [_devices addObject:match];
+- (void)hidManager:(NJHIDManager *)manager deviceAdded:(IOHIDDeviceRef)device {
+    NJDevice *match = [[NJDevice alloc] initWithDevice:device];
+    [devicesViewController beginUpdates];
+    [self addDevice:match];
     [devicesViewController addedDevice:match atIndex:_devices.count - 1];
+    [devicesViewController endUpdates];
 }
 
 - (NJDevice *)findDeviceByRef:(IOHIDDeviceRef)device {
     IOHIDDeviceRegisterInputValueCallback(device, NULL, NULL);
     if (match) {
         NSInteger idx = [_devices indexOfObjectIdenticalTo:match];
+        [devicesViewController beginUpdates];
         [_devices removeObjectAtIndex:idx];
         [devicesViewController removedDevice:match atIndex:idx];
+        [devicesViewController endUpdates];
     }
 }
 
index 6d039af93b69df6fb6718418685f51080d7c089d..6935322c568537fed615de25e30445f346d0beaa 100644 (file)
@@ -27,6 +27,9 @@
 - (void)hidStarted;
 - (void)hidStopped;
 
+- (void)beginUpdates;
+- (void)endUpdates;
+
 - (void)expandAndSelectItem:(NJInputPathElement *)item;
 
 - (NJInputPathElement *)selectedHandler;
index f9ff141d1e53a0c01e91d8478f397469e74623af..5d0bf6abe72593530525f63d3de7abb73a0d0ade 100644 (file)
     [self expandRecursive:[self.delegate deviceViewController:self elementForUID:uid]];
 }
 
+- (void)beginUpdates {
+    [self.inputsTree beginUpdates];
+}
+
+- (void)endUpdates {
+    [self.inputsTree endUpdates];
+}
+
 - (void)reexpandAll {
     for (NSString *uid in [_expanded copy])
         [self expandRecursiveByUID:uid];
 }
 
 - (void)addedDevice:(NJDevice *)device atIndex:(NSUInteger)idx {
-    [self.inputsTree beginUpdates];
     [self.inputsTree insertItemsAtIndexes:[[NSIndexSet alloc] initWithIndex:idx]
                                   inParent:nil
                              withAnimation:NSTableViewAnimationEffectFade];
     [self reexpandAll];
-    [self.inputsTree endUpdates];
     self.noDevicesNotice.hidden = YES;
 }
 
 - (void)removedDevice:(NJDevice *)device atIndex:(NSUInteger)idx {
     BOOL anyDevices = !![self.delegate numberOfDevicesInDeviceList:self];
-    [self.inputsTree beginUpdates];
     [self.inputsTree removeItemsAtIndexes:[[NSIndexSet alloc] initWithIndex:idx]
                                   inParent:nil
                              withAnimation:NSTableViewAnimationEffectFade];
-    [self.inputsTree endUpdates];
     self.noDevicesNotice.hidden = anyDevices || !self.hidStoppedNotice.isHidden;
 }
 
index b530c371bd23e0c04ab91e1f6d2474f62bceb15f..ad7320ecbdfda3361acacd49da179059c2c949a7 100644 (file)
@@ -10,7 +10,7 @@
 
 @interface NJInput : NJInputPathElement
 
-#define NJINPUT_DID(name, index) [[NSString alloc] initWithFormat:@"%s %d", name, index]
+#define NJINPUT_EID(name, index) [[NSString alloc] initWithFormat:@"%s %d", name, index]
 #define NJINPUT_NAME(name, index) [[NSString alloc] initWithFormat:name, index]
 
 - (id)initWithName:(NSString *)name
index 1f65f48a65f695628474f7540952ca3cc6487cbd..18a848b545fc8fa390be99b57025ec0eb65ca20a 100644 (file)
@@ -23,7 +23,7 @@ static float normalize(CFIndex p, CFIndex min, CFIndex max) {
                parent:(NJInputPathElement *)parent
 {
     if ((self = [super initWithName:NJINPUT_NAME(NSLocalizedString(@"axis %d", @"axis name"), index)
-                                eid:NJINPUT_DID("Axis", index)
+                                eid:NJINPUT_EID("Axis", index)
                             element:element
                              parent:parent])) {
         self.children = @[[[NJInput alloc] initWithName:NSLocalizedString(@"axis low", @"axis low trigger")
index 354220a739b784612e61d347b13e20103cc60f1e..44a0bebb90d2663d83d8e0bef3783f1382f87636 100644 (file)
@@ -16,7 +16,7 @@
                parent:(NJInputPathElement *)parent
 {
     if ((self = [super initWithName:NJINPUT_NAME(NSLocalizedString(@"button %d", @"button name"), index)
-                                eid:NJINPUT_DID("Button", index)
+                                eid:NJINPUT_EID("Button", index)
                             element:element
                              parent:parent])) {
         _max = IOHIDElementGetLogicalMax(element);
index 0a5afa2901149f2362e616512756baf8ed702898..b4506d4b44126f758dee872be2dc932b19c20791 100644 (file)
@@ -36,7 +36,7 @@ static BOOL active_fourway[20] = {
                parent:(NJInputPathElement *)parent
 {
     if ((self = [super initWithName:NJINPUT_NAME(NSLocalizedString(@"hat switch %d", @"hat switch name"), index)
-                                eid:NJINPUT_DID("Hat Switch", index)
+                                eid:NJINPUT_EID("Hat Switch", index)
                             element:element
                                parent:parent])) {
         self.children = @[[[NJInput alloc] initWithName:NSLocalizedString(@"hat up", @"hat switch up state")
index 83ed8ef5d8b61aa54f7d906e7545ec0f2161c4c3..9dd1e157da0005c66fa5ac7498438e7fe49ba0d2 100644 (file)
@@ -7,7 +7,6 @@
 //
 
 @class NJMapping;
-@class NJOutputController;
 
 @interface NJMappingsController : NSObject <NSFastEnumeration>
 
 - (void)moveMoveMappingFromIndex:(NSInteger)fromIdx toIndex:(NSInteger)toIdx;
 - (void)renameMapping:(NJMapping *)mapping to:(NSString *)name;
 
-- (void)mappingsChanged;
-
 - (void)activateMapping:(NJMapping *)mapping;
 - (void)activateMappingForProcess:(NSRunningApplication *)app;
+
 - (void)save;
 - (void)load;
 
index 8f0492cc7d88d3ac00c5aac8e7132f1e37e35849..760b41bac53546659cd28f346ef07b318e94cde0 100644 (file)
@@ -11,8 +11,6 @@
 #import "NJOutput.h"
 #import "NJEvents.h"
 
-#define PB_ROW @"com.yukkurigames.Enjoyable.MappingRow"
-
 @implementation NJMappingsController {
     NSMutableArray *_mappings;
     NJMapping *_manualMapping;
@@ -95,7 +93,7 @@
     NSLog(@"Switching to mapping %@.", mapping.name);
     _manualMapping = mapping;
     _currentMapping = mapping;
-    NSUInteger idx = [_mappings indexOfObjectIdenticalTo:_currentMapping];
+    NSUInteger idx = [self indexOfMapping:_currentMapping];
     [NSNotificationCenter.defaultCenter
          postNotificationName:NJEventMappingChanged
                        object:self
     NSArray *storedMappings = [NSUserDefaults.standardUserDefaults arrayForKey:@"mappings"];
     NSMutableArray* newMappings = [[NSMutableArray alloc] initWithCapacity:storedMappings.count];
 
-    for (unsigned i = 0; i < storedMappings.count; ++i) {
-        NJMapping *mapping = [[NJMapping alloc] initWithSerialization:storedMappings[i]];
-        [newMappings addObject:mapping];
-    }
-    
+    for (NSDictionary *serialization in storedMappings)
+        [newMappings addObject:
+         [[NJMapping alloc] initWithSerialization:serialization]];
     
     if (newMappings.count) {
         _mappings = newMappings;
 
 - (void)renameMapping:(NJMapping *)mapping to:(NSString *)name {
     mapping.name = name;
+    [self mappingsChanged];
     if (mapping == _currentMapping) {
         // FIXME: Hack to trigger updates in the rest of the UI.
         _currentMapping = nil;
         [self activateMapping:mapping];
         _manualMapping = manual;        
     }
-    [self mappingsChanged];
 }
 
 - (void)addMapping:(NJMapping *)mapping {
index 30bd0d278efafbab972e93008620f607d83dcf93..4a78c2b994e217ed64edcb343444d823f84b1dee 100644 (file)
@@ -46,7 +46,7 @@
        <key>CFBundleSignature</key>
        <string>????</string>
        <key>CFBundleVersion</key>
-       <string>519</string>
+       <string>526</string>
        <key>LSApplicationCategoryType</key>
        <string>public.app-category.utilities</string>
        <key>NSHumanReadableCopyright</key>
index 7306c41536691d3ff2687fce7ba0796a09056587..7cd0972cabde9e08a8c6152eb2e3ccc2865e7380 100644 (file)
                                                                        <int key="NSvFlags">-2147483374</int>
                                                                        <string key="NSFrame">{{20, 20}, {194, 283}}</string>
                                                                        <reference key="NSSuperview" ref="734312853"/>
-                                                                       <reference key="NSWindow"/>
                                                                        <reference key="NSNextKeyView" ref="471332453"/>
                                                                        <string key="NSReuseIdentifierKey">_NS:22</string>
                                                                        <bool key="NSEnabled">YES</bool>
@@ -530,7 +529,6 @@ Lg</string>
                                                                        <int key="NSvFlags">274</int>
                                                                        <string key="NSFrame">{{20, 20}, {194, 283}}</string>
                                                                        <reference key="NSSuperview" ref="734312853"/>
-                                                                       <reference key="NSWindow"/>
                                                                        <reference key="NSNextKeyView" ref="918286878"/>
                                                                        <string key="NSReuseIdentifierKey">_NS:22</string>
                                                                        <bool key="NSEnabled">YES</bool>
@@ -565,7 +563,6 @@ aW5nLg</string>
                                                                                                        <array class="NSMutableArray" key="NSSubviews"/>
                                                                                                        <string key="NSFrameSize">{232, 321}</string>
                                                                                                        <reference key="NSSuperview" ref="698362889"/>
-                                                                                                       <reference key="NSWindow"/>
                                                                                                        <reference key="NSNextKeyView" ref="892486973"/>
                                                                                                        <bool key="NSEnabled">YES</bool>
                                                                                                        <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
@@ -661,7 +658,6 @@ aW5nLg</string>
                                                                                        </array>
                                                                                        <string key="NSFrame">{{1, 1}, {232, 321}}</string>
                                                                                        <reference key="NSSuperview" ref="364857164"/>
-                                                                                       <reference key="NSWindow"/>
                                                                                        <reference key="NSNextKeyView" ref="365506042"/>
                                                                                        <reference key="NSDocView" ref="365506042"/>
                                                                                        <reference key="NSBGColor" ref="834857663"/>
@@ -672,7 +668,6 @@ aW5nLg</string>
                                                                                        <int key="NSvFlags">-2147483392</int>
                                                                                        <string key="NSFrame">{{1, 1}, {8, 298}}</string>
                                                                                        <reference key="NSSuperview" ref="364857164"/>
-                                                                                       <reference key="NSWindow"/>
                                                                                        <reference key="NSNextKeyView" ref="12898323"/>
                                                                                        <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
                                                                                        <reference key="NSTarget" ref="364857164"/>
@@ -684,7 +679,6 @@ aW5nLg</string>
                                                                                        <int key="NSvFlags">-2147483392</int>
                                                                                        <string key="NSFrame">{{-100, -100}, {473, 15}}</string>
                                                                                        <reference key="NSSuperview" ref="364857164"/>
-                                                                                       <reference key="NSWindow"/>
                                                                                        <reference key="NSNextKeyView" ref="698362889"/>
                                                                                        <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
                                                                                        <int key="NSsFlags">1</int>
@@ -695,7 +689,6 @@ aW5nLg</string>
                                                                        </array>
                                                                        <string key="NSFrameSize">{234, 323}</string>
                                                                        <reference key="NSSuperview" ref="734312853"/>
-                                                                       <reference key="NSWindow"/>
                                                                        <reference key="NSNextKeyView" ref="698362889"/>
                                                                        <int key="NSsFlags">150034</int>
                                                                        <reference key="NSVScroller" ref="1036252745"/>
@@ -709,7 +702,6 @@ aW5nLg</string>
                                                        </array>
                                                        <string key="NSFrameSize">{234, 323}</string>
                                                        <reference key="NSSuperview" ref="177223957"/>
-                                                       <reference key="NSWindow"/>
                                                        <reference key="NSNextKeyView" ref="364857164"/>
                                                        <string key="NSReuseIdentifierKey">_NS:9</string>
                                                        <string key="NSClassName">NSView</string>
@@ -723,7 +715,6 @@ aW5nLg</string>
                                                                        <int key="NSvFlags">268</int>
                                                                        <string key="NSFrame">{{197, 157}, {193, 21}}</string>
                                                                        <reference key="NSSuperview" ref="471332453"/>
-                                                                       <reference key="NSWindow"/>
                                                                        <reference key="NSNextKeyView" ref="875916470"/>
                                                                        <string key="NSReuseIdentifierKey">_NS:9</string>
                                                                        <bool key="NSEnabled">YES</bool>
@@ -748,7 +739,6 @@ aW5nLg</string>
                                                                        <int key="NSvFlags">265</int>
                                                                        <string key="NSFrame">{{189, 117}, {224, 20}}</string>
                                                                        <reference key="NSSuperview" ref="471332453"/>
-                                                                       <reference key="NSWindow"/>
                                                                        <reference key="NSNextKeyView" ref="385416822"/>
                                                                        <string key="NSReuseIdentifierKey">_NS:9</string>
                                                                        <bool key="NSEnabled">YES</bool>
@@ -790,7 +780,6 @@ aW5nLg</string>
                                                                        <int key="NSvFlags">268</int>
                                                                        <string key="NSFrame">{{343, 31}, {70, 18}}</string>
                                                                        <reference key="NSSuperview" ref="471332453"/>
-                                                                       <reference key="NSWindow"/>
                                                                        <string key="NSReuseIdentifierKey">_NS:9</string>
                                                                        <bool key="NSEnabled">YES</bool>
                                                                        <object class="NSButtonCell" key="NSCell" id="868379451">
@@ -821,7 +810,6 @@ aW5nLg</string>
                                                                        <int key="NSvFlags">265</int>
                                                                        <string key="NSFrame">{{189, 33}, {150, 20}}</string>
                                                                        <reference key="NSSuperview" ref="471332453"/>
-                                                                       <reference key="NSWindow"/>
                                                                        <reference key="NSNextKeyView" ref="792189805"/>
                                                                        <string key="NSReuseIdentifierKey">_NS:9</string>
                                                                        <bool key="NSEnabled">YES</bool>
@@ -866,7 +854,6 @@ aW5nLg</string>
                                                                        <int key="NSvFlags">265</int>
                                                                        <string key="NSFrame">{{191, 24}, {146, 16}}</string>
                                                                        <reference key="NSSuperview" ref="471332453"/>
-                                                                       <reference key="NSWindow"/>
                                                                        <reference key="NSNextKeyView" ref="20704797"/>
                                                                        <string key="NSReuseIdentifierKey">_NS:9</string>
                                                                        <bool key="NSEnabled">YES</bool>
@@ -892,7 +879,6 @@ aW5nLg</string>
                                                                        <int key="NSvFlags">265</int>
                                                                        <string key="NSFrame">{{189, 70}, {224, 24}}</string>
                                                                        <reference key="NSSuperview" ref="471332453"/>
-                                                                       <reference key="NSWindow"/>
                                                                        <reference key="NSNextKeyView" ref="921829691"/>
                                                                        <string key="NSReuseIdentifierKey">_NS:9</string>
                                                                        <bool key="NSEnabled">YES</bool>
@@ -946,7 +932,6 @@ aW5nLg</string>
                                                                        <int key="NSvFlags">265</int>
                                                                        <string key="NSFrame">{{191, 108}, {220, 16}}</string>
                                                                        <reference key="NSSuperview" ref="471332453"/>
-                                                                       <reference key="NSWindow"/>
                                                                        <reference key="NSNextKeyView" ref="125828224"/>
                                                                        <string key="NSReuseIdentifierKey">_NS:9</string>
                                                                        <bool key="NSEnabled">YES</bool>
@@ -972,7 +957,6 @@ aW5nLg</string>
                                                                        <int key="NSvFlags">265</int>
                                                                        <string key="NSFrame">{{191, 196}, {220, 23}}</string>
                                                                        <reference key="NSSuperview" ref="471332453"/>
-                                                                       <reference key="NSWindow"/>
                                                                        <reference key="NSNextKeyView" ref="194275224"/>
                                                                        <string key="NSReuseIdentifierKey">_NS:9</string>
                                                                        <string key="NSClassName">NJKeyInputField</string>
@@ -982,7 +966,6 @@ aW5nLg</string>
                                                                        <int key="NSvFlags">265</int>
                                                                        <string key="NSFrame">{{188, 153}, {226, 26}}</string>
                                                                        <reference key="NSSuperview" ref="471332453"/>
-                                                                       <reference key="NSWindow"/>
                                                                        <reference key="NSNextKeyView" ref="529992855"/>
                                                                        <bool key="NSEnabled">YES</bool>
                                                                        <object class="NSPopUpButtonCell" key="NSCell" id="74311158">
@@ -1015,7 +998,6 @@ aW5nLg</string>
                                                                        <int key="NSvFlags">268</int>
                                                                        <string key="NSFrame">{{24, 20}, {163, 250}}</string>
                                                                        <reference key="NSSuperview" ref="471332453"/>
-                                                                       <reference key="NSWindow"/>
                                                                        <reference key="NSNextKeyView" ref="57697638"/>
                                                                        <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
                                                                        <int key="NSNumRows">6</int>
@@ -1146,7 +1128,6 @@ aW5nLg</string>
                                                                        <int key="NSvFlags">266</int>
                                                                        <string key="NSFrame">{{9, 286}, {412, 17}}</string>
                                                                        <reference key="NSSuperview" ref="471332453"/>
-                                                                       <reference key="NSWindow"/>
                                                                        <reference key="NSNextKeyView" ref="497528019"/>
                                                                        <bool key="NSEnabled">YES</bool>
                                                                        <object class="NSTextFieldCell" key="NSCell" id="853503577">
@@ -1170,7 +1151,6 @@ aW5nLg</string>
                                                                        <int key="NSvFlags">10</int>
                                                                        <string key="NSFrame">{{12, 276}, {406, 5}}</string>
                                                                        <reference key="NSSuperview" ref="471332453"/>
-                                                                       <reference key="NSWindow"/>
                                                                        <reference key="NSNextKeyView" ref="120408205"/>
                                                                        <string key="NSOffsets">{0, 0}</string>
                                                                        <object class="NSTextFieldCell" key="NSTitleCell">
@@ -1197,7 +1177,6 @@ aW5nLg</string>
                                                        </array>
                                                        <string key="NSFrame">{{233, 0}, {431, 323}}</string>
                                                        <reference key="NSSuperview" ref="177223957"/>
-                                                       <reference key="NSWindow"/>
                                                        <reference key="NSNextKeyView" ref="1016088174"/>
                                                        <string key="NSReuseIdentifierKey">_NS:9</string>
                                                        <string key="NSClassName">NSView</string>
@@ -1205,7 +1184,6 @@ aW5nLg</string>
                                        </array>
                                        <string key="NSFrameSize">{664, 323}</string>
                                        <reference key="NSSuperview"/>
-                                       <reference key="NSWindow"/>
                                        <reference key="NSNextKeyView" ref="734312853"/>
                                </object>
                                <string key="NSScreenRect">{{0, 0}, {1440, 878}}</string>
@@ -1231,7 +1209,6 @@ aW5nLg</string>
                                                                                <int key="NSvFlags">256</int>
                                                                                <string key="NSFrameSize">{198, 198}</string>
                                                                                <reference key="NSSuperview" ref="947403733"/>
-                                                                               <reference key="NSWindow"/>
                                                                                <reference key="NSNextKeyView" ref="553414014"/>
                                                                                <bool key="NSEnabled">YES</bool>
                                                                                <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
@@ -1289,7 +1266,6 @@ aW5nLg</string>
                                                                </array>
                                                                <string key="NSFrame">{{1, 1}, {198, 198}}</string>
                                                                <reference key="NSSuperview" ref="443618264"/>
-                                                               <reference key="NSWindow"/>
                                                                <reference key="NSNextKeyView" ref="762432499"/>
                                                                <reference key="NSDocView" ref="762432499"/>
                                                                <reference key="NSBGColor" ref="834857663"/>
@@ -1300,7 +1276,6 @@ aW5nLg</string>
                                                                <int key="NSvFlags">-2147483392</int>
                                                                <string key="NSFrame">{{306, 1}, {15, 403}}</string>
                                                                <reference key="NSSuperview" ref="443618264"/>
-                                                               <reference key="NSWindow"/>
                                                                <reference key="NSNextKeyView" ref="861276216"/>
                                                                <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
                                                                <reference key="NSTarget" ref="443618264"/>
@@ -1312,7 +1287,6 @@ aW5nLg</string>
                                                                <int key="NSvFlags">-2147483392</int>
                                                                <string key="NSFrame">{{-100, -100}, {366, 16}}</string>
                                                                <reference key="NSSuperview" ref="443618264"/>
-                                                               <reference key="NSWindow"/>
                                                                <reference key="NSNextKeyView" ref="947403733"/>
                                                                <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
                                                                <int key="NSsFlags">1</int>
@@ -1323,7 +1297,6 @@ aW5nLg</string>
                                                </array>
                                                <string key="NSFrame">{{0, 20}, {200, 200}}</string>
                                                <reference key="NSSuperview" ref="671181514"/>
-                                               <reference key="NSWindow"/>
                                                <reference key="NSNextKeyView" ref="947403733"/>
                                                <int key="NSsFlags">150034</int>
                                                <reference key="NSVScroller" ref="968378655"/>
@@ -1339,7 +1312,6 @@ aW5nLg</string>
                                                <int key="NSvFlags">268</int>
                                                <string key="NSFrame">{{66, -1}, {68, 23}}</string>
                                                <reference key="NSSuperview" ref="671181514"/>
-                                               <reference key="NSWindow"/>
                                                <reference key="NSNextKeyView" ref="1023366520"/>
                                                <string key="NSReuseIdentifierKey">_NS:22</string>
                                                <bool key="NSEnabled">YES</bool>
@@ -1368,7 +1340,6 @@ aW5nLg</string>
                                                <int key="NSvFlags">292</int>
                                                <string key="NSFrame">{{0, -1}, {34, 23}}</string>
                                                <reference key="NSSuperview" ref="671181514"/>
-                                               <reference key="NSWindow"/>
                                                <reference key="NSNextKeyView" ref="456935010"/>
                                                <bool key="NSEnabled">YES</bool>
                                                <object class="NSButtonCell" key="NSCell" id="867532725">
@@ -1395,7 +1366,6 @@ aW5nLg</string>
                                                <int key="NSvFlags">292</int>
                                                <string key="NSFrame">{{166, -1}, {34, 23}}</string>
                                                <reference key="NSSuperview" ref="671181514"/>
-                                               <reference key="NSWindow"/>
                                                <bool key="NSEnabled">YES</bool>
                                                <object class="NSButtonCell" key="NSCell" id="828611353">
                                                        <int key="NSCellFlags">67108864</int>
@@ -1417,7 +1387,6 @@ aW5nLg</string>
                                                <int key="NSvFlags">292</int>
                                                <string key="NSFrame">{{133, -1}, {34, 23}}</string>
                                                <reference key="NSSuperview" ref="671181514"/>
-                                               <reference key="NSWindow"/>
                                                <reference key="NSNextKeyView" ref="1043784903"/>
                                                <bool key="NSEnabled">YES</bool>
                                                <object class="NSButtonCell" key="NSCell" id="57592747">
@@ -1440,7 +1409,6 @@ aW5nLg</string>
                                                <int key="NSvFlags">292</int>
                                                <string key="NSFrame">{{33, -1}, {34, 23}}</string>
                                                <reference key="NSSuperview" ref="671181514"/>
-                                               <reference key="NSWindow"/>
                                                <reference key="NSNextKeyView" ref="149148392"/>
                                                <bool key="NSEnabled">YES</bool>
                                                <object class="NSButtonCell" key="NSCell" id="1008023024">
@@ -1465,30 +1433,9 @@ aW5nLg</string>
                                </array>
                                <string key="NSFrameSize">{200, 220}</string>
                                <reference key="NSSuperview"/>
-                               <reference key="NSWindow"/>
                                <reference key="NSNextKeyView" ref="443618264"/>
                                <string key="NSClassName">NSView</string>
                        </object>
-                       <object class="NSCustomObject" id="207406104">
-                               <string key="NSClassName">EnjoyableApplicationDelegate</string>
-                       </object>
-                       <object class="NSCustomObject" id="468285243">
-                               <string key="NSClassName">NJMappingsController</string>
-                       </object>
-                       <object class="NSCustomObject" id="1007832501">
-                               <string key="NSClassName">NJDeviceController</string>
-                       </object>
-                       <object class="NSCustomObject" id="801536542">
-                               <string key="NSClassName">NJOutputController</string>
-                       </object>
-                       <object class="NSPopover" id="586993839">
-                               <nil key="NSNextResponder"/>
-                               <int key="NSAppearance">0</int>
-                               <int key="NSBehavior">1</int>
-                               <double key="NSContentWidth">0.0</double>
-                               <double key="NSContentHeight">0.0</double>
-                               <bool key="NSAnimates">YES</bool>
-                       </object>
                        <object class="NSMenu" id="388664617">
                                <string key="NSTitle"/>
                                <array class="NSMutableArray" key="NSMenuItems">
@@ -1561,6 +1508,32 @@ aW5nLg</string>
                                        </object>
                                </array>
                        </object>
+                       <object class="NSCustomObject" id="207406104">
+                               <string key="NSClassName">EnjoyableApplicationDelegate</string>
+                       </object>
+                       <object class="NSPopover" id="586993839">
+                               <nil key="NSNextResponder"/>
+                               <int key="NSAppearance">0</int>
+                               <int key="NSBehavior">1</int>
+                               <double key="NSContentWidth">0.0</double>
+                               <double key="NSContentHeight">0.0</double>
+                               <bool key="NSAnimates">YES</bool>
+                       </object>
+                       <object class="NSCustomObject" id="468285243">
+                               <string key="NSClassName">NJMappingsController</string>
+                       </object>
+                       <object class="NSCustomObject" id="1007832501">
+                               <string key="NSClassName">NJDeviceController</string>
+                       </object>
+                       <object class="NSCustomObject" id="801536542">
+                               <string key="NSClassName">NJOutputController</string>
+                       </object>
+                       <object class="NSCustomObject" id="647344717">
+                               <string key="NSClassName">NJDeviceViewController</string>
+                       </object>
+                       <object class="NSCustomObject" id="70919963">
+                               <string key="NSClassName">NJMappingsViewController</string>
+                       </object>
                        <object class="NSCustomObject" id="9563326">
                                <string key="NSClassName">NJMappingMenuController</string>
                        </object>
@@ -1573,12 +1546,6 @@ aW5nLg</string>
                        <object class="NSCustomObject" id="665704974">
                                <string key="NSClassName">SUUpdater</string>
                        </object>
-                       <object class="NSCustomObject" id="647344717">
-                               <string key="NSClassName">NJDeviceViewController</string>
-                       </object>
-                       <object class="NSCustomObject" id="70919963">
-                               <string key="NSClassName">NJMappingsViewController</string>
-                       </object>
                </array>
                <object class="IBObjectContainer" key="IBDocument.Objects">
                        <array class="NSMutableArray" key="connectionRecords">
@@ -3363,417 +3330,7 @@ aW5nLg</string>
                        <nil key="sourceID"/>
                        <int key="maxID">1024</int>
                </object>
-               <object class="IBClassDescriber" key="IBDocument.Classes">
-                       <array class="NSMutableArray" key="referencedPartialClassDescriptions">
-                               <object class="IBPartialClassDescription">
-                                       <string key="className">EnjoyableApplicationDelegate</string>
-                                       <string key="superclassName">NSObject</string>
-                                       <dictionary class="NSMutableDictionary" key="actions">
-                                               <string key="exportMappingClicked:">id</string>
-                                               <string key="importMappingClicked:">id</string>
-                                               <string key="restoreToForeground:">id</string>
-                                       </dictionary>
-                                       <dictionary class="NSMutableDictionary" key="actionInfosByName">
-                                               <object class="IBActionInfo" key="exportMappingClicked:">
-                                                       <string key="name">exportMappingClicked:</string>
-                                                       <string key="candidateClassName">id</string>
-                                               </object>
-                                               <object class="IBActionInfo" key="importMappingClicked:">
-                                                       <string key="name">importMappingClicked:</string>
-                                                       <string key="candidateClassName">id</string>
-                                               </object>
-                                               <object class="IBActionInfo" key="restoreToForeground:">
-                                                       <string key="name">restoreToForeground:</string>
-                                                       <string key="candidateClassName">id</string>
-                                               </object>
-                                       </dictionary>
-                                       <dictionary class="NSMutableDictionary" key="outlets">
-                                               <string key="dockMenu">NSMenu</string>
-                                               <string key="mappingsController">NJMappingsController</string>
-                                               <string key="mvc">NJMappingsViewController</string>
-                                               <string key="statusItemMenu">NSMenu</string>
-                                               <string key="window">NSWindow</string>
-                                       </dictionary>
-                                       <dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
-                                               <object class="IBToOneOutletInfo" key="dockMenu">
-                                                       <string key="name">dockMenu</string>
-                                                       <string key="candidateClassName">NSMenu</string>
-                                               </object>
-                                               <object class="IBToOneOutletInfo" key="mappingsController">
-                                                       <string key="name">mappingsController</string>
-                                                       <string key="candidateClassName">NJMappingsController</string>
-                                               </object>
-                                               <object class="IBToOneOutletInfo" key="mvc">
-                                                       <string key="name">mvc</string>
-                                                       <string key="candidateClassName">NJMappingsViewController</string>
-                                               </object>
-                                               <object class="IBToOneOutletInfo" key="statusItemMenu">
-                                                       <string key="name">statusItemMenu</string>
-                                                       <string key="candidateClassName">NSMenu</string>
-                                               </object>
-                                               <object class="IBToOneOutletInfo" key="window">
-                                                       <string key="name">window</string>
-                                                       <string key="candidateClassName">NSWindow</string>
-                                               </object>
-                                       </dictionary>
-                                       <object class="IBClassDescriptionSource" key="sourceIdentifier">
-                                               <string key="majorKey">IBProjectSource</string>
-                                               <string key="minorKey">./Classes/EnjoyableApplicationDelegate.h</string>
-                                       </object>
-                               </object>
-                               <object class="IBPartialClassDescription">
-                                       <string key="className">NJDeviceController</string>
-                                       <string key="superclassName">NSObject</string>
-                                       <object class="NSMutableDictionary" key="actions">
-                                               <string key="NS.key.0">simulatingEventsChanged:</string>
-                                               <string key="NS.object.0">NSButton</string>
-                                       </object>
-                                       <object class="NSMutableDictionary" key="actionInfosByName">
-                                               <string key="NS.key.0">simulatingEventsChanged:</string>
-                                               <object class="IBActionInfo" key="NS.object.0">
-                                                       <string key="name">simulatingEventsChanged:</string>
-                                                       <string key="candidateClassName">NSButton</string>
-                                               </object>
-                                       </object>
-                                       <dictionary class="NSMutableDictionary" key="outlets">
-                                               <string key="devicesViewController">NJDeviceViewController</string>
-                                               <string key="mappingsController">NJMappingsController</string>
-                                               <string key="outputController">NJOutputController</string>
-                                               <string key="simulatingEventsButton">NSButton</string>
-                                       </dictionary>
-                                       <dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
-                                               <object class="IBToOneOutletInfo" key="devicesViewController">
-                                                       <string key="name">devicesViewController</string>
-                                                       <string key="candidateClassName">NJDeviceViewController</string>
-                                               </object>
-                                               <object class="IBToOneOutletInfo" key="mappingsController">
-                                                       <string key="name">mappingsController</string>
-                                                       <string key="candidateClassName">NJMappingsController</string>
-                                               </object>
-                                               <object class="IBToOneOutletInfo" key="outputController">
-                                                       <string key="name">outputController</string>
-                                                       <string key="candidateClassName">NJOutputController</string>
-                                               </object>
-                                               <object class="IBToOneOutletInfo" key="simulatingEventsButton">
-                                                       <string key="name">simulatingEventsButton</string>
-                                                       <string key="candidateClassName">NSButton</string>
-                                               </object>
-                                       </dictionary>
-                                       <object class="IBClassDescriptionSource" key="sourceIdentifier">
-                                               <string key="majorKey">IBProjectSource</string>
-                                               <string key="minorKey">./Classes/NJDeviceController.h</string>
-                                       </object>
-                               </object>
-                               <object class="IBPartialClassDescription">
-                                       <string key="className">NJDeviceViewController</string>
-                                       <string key="superclassName">NSObject</string>
-                                       <dictionary class="NSMutableDictionary" key="outlets">
-                                               <string key="delegate">id</string>
-                                               <string key="hidStoppedNotice">NSView</string>
-                                               <string key="inputsTree">NSOutlineView</string>
-                                               <string key="noDevicesNotice">NSView</string>
-                                       </dictionary>
-                                       <dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
-                                               <object class="IBToOneOutletInfo" key="delegate">
-                                                       <string key="name">delegate</string>
-                                                       <string key="candidateClassName">id</string>
-                                               </object>
-                                               <object class="IBToOneOutletInfo" key="hidStoppedNotice">
-                                                       <string key="name">hidStoppedNotice</string>
-                                                       <string key="candidateClassName">NSView</string>
-                                               </object>
-                                               <object class="IBToOneOutletInfo" key="inputsTree">
-                                                       <string key="name">inputsTree</string>
-                                                       <string key="candidateClassName">NSOutlineView</string>
-                                               </object>
-                                               <object class="IBToOneOutletInfo" key="noDevicesNotice">
-                                                       <string key="name">noDevicesNotice</string>
-                                                       <string key="candidateClassName">NSView</string>
-                                               </object>
-                                       </dictionary>
-                                       <object class="IBClassDescriptionSource" key="sourceIdentifier">
-                                               <string key="majorKey">IBProjectSource</string>
-                                               <string key="minorKey">./Classes/NJDeviceViewController.h</string>
-                                       </object>
-                               </object>
-                               <object class="IBPartialClassDescription">
-                                       <string key="className">NJKeyInputField</string>
-                                       <string key="superclassName">NSControl</string>
-                                       <object class="NSMutableDictionary" key="outlets">
-                                               <string key="NS.key.0">delegate</string>
-                                               <string key="NS.object.0">id</string>
-                                       </object>
-                                       <object class="NSMutableDictionary" key="toOneOutletInfosByName">
-                                               <string key="NS.key.0">delegate</string>
-                                               <object class="IBToOneOutletInfo" key="NS.object.0">
-                                                       <string key="name">delegate</string>
-                                                       <string key="candidateClassName">id</string>
-                                               </object>
-                                       </object>
-                                       <object class="IBClassDescriptionSource" key="sourceIdentifier">
-                                               <string key="majorKey">IBProjectSource</string>
-                                               <string key="minorKey">./Classes/NJKeyInputField.h</string>
-                                       </object>
-                               </object>
-                               <object class="IBPartialClassDescription">
-                                       <string key="className">NJMappingMenuController</string>
-                                       <string key="superclassName">NSObject</string>
-                                       <dictionary class="NSMutableDictionary" key="outlets">
-                                               <string key="delegate">id</string>
-                                               <string key="eventSimulationToggle">NSMenuItem</string>
-                                               <string key="menu">NSMenu</string>
-                                       </dictionary>
-                                       <dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
-                                               <object class="IBToOneOutletInfo" key="delegate">
-                                                       <string key="name">delegate</string>
-                                                       <string key="candidateClassName">id</string>
-                                               </object>
-                                               <object class="IBToOneOutletInfo" key="eventSimulationToggle">
-                                                       <string key="name">eventSimulationToggle</string>
-                                                       <string key="candidateClassName">NSMenuItem</string>
-                                               </object>
-                                               <object class="IBToOneOutletInfo" key="menu">
-                                                       <string key="name">menu</string>
-                                                       <string key="candidateClassName">NSMenu</string>
-                                               </object>
-                                       </dictionary>
-                                       <object class="IBClassDescriptionSource" key="sourceIdentifier">
-                                               <string key="majorKey">IBProjectSource</string>
-                                               <string key="minorKey">./Classes/NJMappingMenuController.h</string>
-                                       </object>
-                               </object>
-                               <object class="IBPartialClassDescription">
-                                       <string key="className">NJMappingsController</string>
-                                       <string key="superclassName">NSObject</string>
-                                       <object class="IBClassDescriptionSource" key="sourceIdentifier">
-                                               <string key="majorKey">IBProjectSource</string>
-                                               <string key="minorKey">./Classes/NJMappingsController.h</string>
-                                       </object>
-                               </object>
-                               <object class="IBPartialClassDescription">
-                                       <string key="className">NJMappingsViewController</string>
-                                       <string key="superclassName">NSViewController</string>
-                                       <dictionary class="NSMutableDictionary" key="actions">
-                                               <string key="addClicked:">id</string>
-                                               <string key="mappingTriggerClicked:">id</string>
-                                               <string key="moveDownClicked:">id</string>
-                                               <string key="moveUpClicked:">id</string>
-                                               <string key="removeClicked:">id</string>
-                                       </dictionary>
-                                       <dictionary class="NSMutableDictionary" key="actionInfosByName">
-                                               <object class="IBActionInfo" key="addClicked:">
-                                                       <string key="name">addClicked:</string>
-                                                       <string key="candidateClassName">id</string>
-                                               </object>
-                                               <object class="IBActionInfo" key="mappingTriggerClicked:">
-                                                       <string key="name">mappingTriggerClicked:</string>
-                                                       <string key="candidateClassName">id</string>
-                                               </object>
-                                               <object class="IBActionInfo" key="moveDownClicked:">
-                                                       <string key="name">moveDownClicked:</string>
-                                                       <string key="candidateClassName">id</string>
-                                               </object>
-                                               <object class="IBActionInfo" key="moveUpClicked:">
-                                                       <string key="name">moveUpClicked:</string>
-                                                       <string key="candidateClassName">id</string>
-                                               </object>
-                                               <object class="IBActionInfo" key="removeClicked:">
-                                                       <string key="name">removeClicked:</string>
-                                                       <string key="candidateClassName">id</string>
-                                               </object>
-                                       </dictionary>
-                                       <dictionary class="NSMutableDictionary" key="outlets">
-                                               <string key="delegate">id</string>
-                                               <string key="mappingList">NSTableView</string>
-                                               <string key="mappingListPopover">NSPopover</string>
-                                               <string key="mappingListTrigger">NSButton</string>
-                                               <string key="moveDown">NSButton</string>
-                                               <string key="moveUp">NSButton</string>
-                                               <string key="removeMapping">NSButton</string>
-                                       </dictionary>
-                                       <dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
-                                               <object class="IBToOneOutletInfo" key="delegate">
-                                                       <string key="name">delegate</string>
-                                                       <string key="candidateClassName">id</string>
-                                               </object>
-                                               <object class="IBToOneOutletInfo" key="mappingList">
-                                                       <string key="name">mappingList</string>
-                                                       <string key="candidateClassName">NSTableView</string>
-                                               </object>
-                                               <object class="IBToOneOutletInfo" key="mappingListPopover">
-                                                       <string key="name">mappingListPopover</string>
-                                                       <string key="candidateClassName">NSPopover</string>
-                                               </object>
-                                               <object class="IBToOneOutletInfo" key="mappingListTrigger">
-                                                       <string key="name">mappingListTrigger</string>
-                                                       <string key="candidateClassName">NSButton</string>
-                                               </object>
-                                               <object class="IBToOneOutletInfo" key="moveDown">
-                                                       <string key="name">moveDown</string>
-                                                       <string key="candidateClassName">NSButton</string>
-                                               </object>
-                                               <object class="IBToOneOutletInfo" key="moveUp">
-                                                       <string key="name">moveUp</string>
-                                                       <string key="candidateClassName">NSButton</string>
-                                               </object>
-                                               <object class="IBToOneOutletInfo" key="removeMapping">
-                                                       <string key="name">removeMapping</string>
-                                                       <string key="candidateClassName">NSButton</string>
-                                               </object>
-                                       </dictionary>
-                                       <object class="IBClassDescriptionSource" key="sourceIdentifier">
-                                               <string key="majorKey">IBProjectSource</string>
-                                               <string key="minorKey">./Classes/NJMappingsViewController.h</string>
-                                       </object>
-                               </object>
-                               <object class="IBPartialClassDescription">
-                                       <string key="className">NJOutputController</string>
-                                       <string key="superclassName">NSObject</string>
-                                       <dictionary class="NSMutableDictionary" key="actions">
-                                               <string key="mbtnChanged:">id</string>
-                                               <string key="mdirChanged:">id</string>
-                                               <string key="mouseSpeedChanged:">id</string>
-                                               <string key="radioChanged:">id</string>
-                                               <string key="scrollSpeedChanged:">id</string>
-                                               <string key="scrollTypeChanged:">id</string>
-                                               <string key="sdirChanged:">id</string>
-                                       </dictionary>
-                                       <dictionary class="NSMutableDictionary" key="actionInfosByName">
-                                               <object class="IBActionInfo" key="mbtnChanged:">
-                                                       <string key="name">mbtnChanged:</string>
-                                                       <string key="candidateClassName">id</string>
-                                               </object>
-                                               <object class="IBActionInfo" key="mdirChanged:">
-                                                       <string key="name">mdirChanged:</string>
-                                                       <string key="candidateClassName">id</string>
-                                               </object>
-                                               <object class="IBActionInfo" key="mouseSpeedChanged:">
-                                                       <string key="name">mouseSpeedChanged:</string>
-                                                       <string key="candidateClassName">id</string>
-                                               </object>
-                                               <object class="IBActionInfo" key="radioChanged:">
-                                                       <string key="name">radioChanged:</string>
-                                                       <string key="candidateClassName">id</string>
-                                               </object>
-                                               <object class="IBActionInfo" key="scrollSpeedChanged:">
-                                                       <string key="name">scrollSpeedChanged:</string>
-                                                       <string key="candidateClassName">id</string>
-                                               </object>
-                                               <object class="IBActionInfo" key="scrollTypeChanged:">
-                                                       <string key="name">scrollTypeChanged:</string>
-                                                       <string key="candidateClassName">id</string>
-                                               </object>
-                                               <object class="IBActionInfo" key="sdirChanged:">
-                                                       <string key="name">sdirChanged:</string>
-                                                       <string key="candidateClassName">id</string>
-                                               </object>
-                                       </dictionary>
-                                       <dictionary class="NSMutableDictionary" key="outlets">
-                                               <string key="inputController">NJDeviceController</string>
-                                               <string key="keyInput">NJKeyInputField</string>
-                                               <string key="mappingPopup">NSPopUpButton</string>
-                                               <string key="mappingsController">NJMappingsController</string>
-                                               <string key="mouseBtnSelect">NSSegmentedControl</string>
-                                               <string key="mouseDirSelect">NSSegmentedControl</string>
-                                               <string key="mouseSpeedSlider">NSSlider</string>
-                                               <string key="radioButtons">NSMatrix</string>
-                                               <string key="scrollDirSelect">NSSegmentedControl</string>
-                                               <string key="scrollSpeedSlider">NSSlider</string>
-                                               <string key="smoothCheck">NSButton</string>
-                                               <string key="title">NSTextField</string>
-                                               <string key="unknownMapping">NSButton</string>
-                                       </dictionary>
-                                       <dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
-                                               <object class="IBToOneOutletInfo" key="inputController">
-                                                       <string key="name">inputController</string>
-                                                       <string key="candidateClassName">NJDeviceController</string>
-                                               </object>
-                                               <object class="IBToOneOutletInfo" key="keyInput">
-                                                       <string key="name">keyInput</string>
-                                                       <string key="candidateClassName">NJKeyInputField</string>
-                                               </object>
-                                               <object class="IBToOneOutletInfo" key="mappingPopup">
-                                                       <string key="name">mappingPopup</string>
-                                                       <string key="candidateClassName">NSPopUpButton</string>
-                                               </object>
-                                               <object class="IBToOneOutletInfo" key="mappingsController">
-                                                       <string key="name">mappingsController</string>
-                                                       <string key="candidateClassName">NJMappingsController</string>
-                                               </object>
-                                               <object class="IBToOneOutletInfo" key="mouseBtnSelect">
-                                                       <string key="name">mouseBtnSelect</string>
-                                                       <string key="candidateClassName">NSSegmentedControl</string>
-                                               </object>
-                                               <object class="IBToOneOutletInfo" key="mouseDirSelect">
-                                                       <string key="name">mouseDirSelect</string>
-                                                       <string key="candidateClassName">NSSegmentedControl</string>
-                                               </object>
-                                               <object class="IBToOneOutletInfo" key="mouseSpeedSlider">
-                                                       <string key="name">mouseSpeedSlider</string>
-                                                       <string key="candidateClassName">NSSlider</string>
-                                               </object>
-                                               <object class="IBToOneOutletInfo" key="radioButtons">
-                                                       <string key="name">radioButtons</string>
-                                                       <string key="candidateClassName">NSMatrix</string>
-                                               </object>
-                                               <object class="IBToOneOutletInfo" key="scrollDirSelect">
-                                                       <string key="name">scrollDirSelect</string>
-                                                       <string key="candidateClassName">NSSegmentedControl</string>
-                                               </object>
-                                               <object class="IBToOneOutletInfo" key="scrollSpeedSlider">
-                                                       <string key="name">scrollSpeedSlider</string>
-                                                       <string key="candidateClassName">NSSlider</string>
-                                               </object>
-                                               <object class="IBToOneOutletInfo" key="smoothCheck">
-                                                       <string key="name">smoothCheck</string>
-                                                       <string key="candidateClassName">NSButton</string>
-                                               </object>
-                                               <object class="IBToOneOutletInfo" key="title">
-                                                       <string key="name">title</string>
-                                                       <string key="candidateClassName">NSTextField</string>
-                                               </object>
-                                               <object class="IBToOneOutletInfo" key="unknownMapping">
-                                                       <string key="name">unknownMapping</string>
-                                                       <string key="candidateClassName">NSButton</string>
-                                               </object>
-                                       </dictionary>
-                                       <object class="IBClassDescriptionSource" key="sourceIdentifier">
-                                               <string key="majorKey">IBProjectSource</string>
-                                               <string key="minorKey">./Classes/NJOutputController.h</string>
-                                       </object>
-                               </object>
-                               <object class="IBPartialClassDescription">
-                                       <string key="className">SUUpdater</string>
-                                       <string key="superclassName">NSObject</string>
-                                       <object class="NSMutableDictionary" key="actions">
-                                               <string key="NS.key.0">checkForUpdates:</string>
-                                               <string key="NS.object.0">id</string>
-                                       </object>
-                                       <object class="NSMutableDictionary" key="actionInfosByName">
-                                               <string key="NS.key.0">checkForUpdates:</string>
-                                               <object class="IBActionInfo" key="NS.object.0">
-                                                       <string key="name">checkForUpdates:</string>
-                                                       <string key="candidateClassName">id</string>
-                                               </object>
-                                       </object>
-                                       <object class="NSMutableDictionary" key="outlets">
-                                               <string key="NS.key.0">delegate</string>
-                                               <string key="NS.object.0">id</string>
-                                       </object>
-                                       <object class="NSMutableDictionary" key="toOneOutletInfosByName">
-                                               <string key="NS.key.0">delegate</string>
-                                               <object class="IBToOneOutletInfo" key="NS.object.0">
-                                                       <string key="name">delegate</string>
-                                                       <string key="candidateClassName">id</string>
-                                               </object>
-                                       </object>
-                                       <object class="IBClassDescriptionSource" key="sourceIdentifier">
-                                               <string key="majorKey">IBProjectSource</string>
-                                               <string key="minorKey">./Classes/SUUpdater.h</string>
-                                       </object>
-                               </object>
-                       </array>
-               </object>
+               <object class="IBClassDescriber" key="IBDocument.Classes"/>
                <int key="IBDocument.localizationMode">0</int>
                <string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
                <bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>