Fix several cases where the UI did not properly reflect model changes.
[enjoyable.git] / Classes / NJDeviceController.m
index 000df5f..bdd1bbf 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];
     }
 }