Split view management out of NJDeviceController. Right now this probably just makes...
[enjoyable.git] / Classes / NJOutputController.m
index d022406..07c077b 100644 (file)
             selector:@selector(mappingListDidChange:)
             name:NJEventMappingListChanged
             object:nil];
+        [NSNotificationCenter.defaultCenter
+             addObserver:self
+             selector:@selector(mappingDidChange:)
+             name:NJEventMappingChanged
+             object:nil];
     }
     return self;
 }
     if (row != 5) {
         scrollDirSelect.selectedSegment = -1;
         scrollSpeedSlider.floatValue = scrollSpeedSlider.minValue;
+        smoothCheck.state = NSOffState;
         [scrollDirSelect resignIfFirstResponder];
+        [scrollSpeedSlider resignIfFirstResponder];
+        [smoothCheck resignIfFirstResponder];
     } else {
         if (scrollDirSelect.selectedSegment == -1)
             scrollDirSelect.selectedSegment = 0;
-        if (scrollDirSelect.selectedSegment < 2
-            && !scrollSpeedSlider.floatValue)
-            scrollSpeedSlider.floatValue = 15;
-        else if (scrollDirSelect.selectedSegment >= 2
-                 && scrollSpeedSlider.floatValue)
-            scrollSpeedSlider.floatValue = scrollSpeedSlider.minValue;
     }
         
 }
 
 - (void)sdirChanged:(NSView *)sender {
     [radioButtons selectCellAtRow:5 column:0];
-    if (scrollDirSelect.selectedSegment >= 2)
-        scrollSpeedSlider.floatValue = 0;
     [sender.window makeFirstResponder:sender];
     [self commit];
 }
 - (void)scrollSpeedChanged:(NSSlider *)sender {
     [radioButtons selectCellAtRow:5 column:0];
     [sender.window makeFirstResponder:sender];
-    if (!sender.floatValue && scrollDirSelect.selectedSegment < 2)
-        scrollDirSelect.selectedSegment += 2;
-    else if (sender.floatValue && scrollDirSelect.selectedSegment >= 2)
-        scrollDirSelect.selectedSegment -= 2;
+    [self commit];
+}
+
+- (IBAction)scrollTypeChanged:(NSButton *)sender {
+    [radioButtons selectCellAtRow:5 column:0];
+    [sender.window makeFirstResponder:sender];
+    if (sender.state == NSOnState) {
+        scrollSpeedSlider.floatValue =
+            scrollSpeedSlider.minValue + (scrollSpeedSlider.maxValue - scrollSpeedSlider.minValue) / 2;
+        scrollSpeedSlider.enabled = YES;
+    } else {
+        scrollSpeedSlider.floatValue = scrollSpeedSlider.minValue;
+        scrollSpeedSlider.enabled = NO;
+    }
     [self commit];
 }
 
         case 1:
             if (keyInput.hasKeyCode) {
                 NJOutputKeyPress *k = [[NJOutputKeyPress alloc] init];
-                k.vk = keyInput.keyCode;
+                k.keyCode = keyInput.keyCode;
                 return k;
             } else {
                 return nil;
         }
         case 5: {
             NJOutputMouseScroll *ms = [[NJOutputMouseScroll alloc] init];
-            ms.direction = (scrollDirSelect.selectedSegment & 1) ? 1 : -1;
-            ms.speed = scrollDirSelect.selectedSegment < 2
-                ? scrollSpeedSlider.floatValue
-                : 0.f;
+            ms.direction = [scrollDirSelect.cell tagForSegment:scrollDirSelect.selectedSegment];
+            ms.speed = scrollSpeedSlider.floatValue;
+            ms.smooth = smoothCheck.state == NSOnState;
             return ms;
         }
         default:
 }
 
 - (BOOL)enabled {
-    return [radioButtons isEnabled];
+    return radioButtons.isEnabled;
 }
 
 - (void)setEnabled:(BOOL)enabled {
-    [radioButtons setEnabled:enabled];
-    [keyInput setEnabled:enabled];
-    [mappingPopup setEnabled:enabled];
-    [mouseDirSelect setEnabled:enabled];
-    [mouseSpeedSlider setEnabled:enabled];
-    [mouseBtnSelect setEnabled:enabled];
-    [scrollDirSelect setEnabled:enabled];
-    [scrollSpeedSlider setEnabled:enabled];
+    radioButtons.enabled = enabled;
+    keyInput.enabled = enabled;
+    mappingPopup.enabled = enabled;
+    mouseDirSelect.enabled = enabled;
+    mouseSpeedSlider.enabled = enabled;
+    mouseBtnSelect.enabled = enabled;
+    scrollDirSelect.enabled = enabled;
+    smoothCheck.enabled = enabled;
+    scrollSpeedSlider.enabled = enabled && smoothCheck.state;
 }
 
 - (void)loadOutput:(NJOutput *)output forInput:(NJInput *)input {
     } else {
         self.enabled = YES;
         NSString *inpFullName = input.name;
-        for (id <NJInputPathElement> cur = input.base; cur; cur = cur.base) {
-            inpFullName = [[NSString alloc] initWithFormat:@"%@ > %@", cur.name, inpFullName];
+        for (NJInputPathElement *cur = input.parent; cur; cur = cur.parent) {
+            inpFullName = [[NSString alloc] initWithFormat:@"%@  %@", cur.name, inpFullName];
         }
         title.stringValue = inpFullName;
     }
 
     if ([output isKindOfClass:NJOutputKeyPress.class]) {
         [radioButtons selectCellAtRow:1 column:0];
-        keyInput.keyCode = [(NJOutputKeyPress*)output vk];
+        keyInput.keyCode = [(NJOutputKeyPress*)output keyCode];
     } else if ([output isKindOfClass:NJOutputMapping.class]) {
         [radioButtons selectCellAtRow:2 column:0];
         NSMenuItem *item = [mappingPopup itemWithRepresentedObject:[(NJOutputMapping *)output mapping]];
         [radioButtons selectCellAtRow:5 column:0];
         int direction = [(NJOutputMouseScroll *)output direction];
         float speed = [(NJOutputMouseScroll *)output speed];
-        scrollDirSelect.selectedSegment = (direction > 0) + !speed * 2;
+        BOOL smooth = [(NJOutputMouseScroll *)output smooth];
+        [scrollDirSelect selectSegmentWithTag:direction];
         scrollSpeedSlider.floatValue = speed;
+        smoothCheck.state = smooth ? NSOnState : NSOffState;
+        scrollSpeedSlider.enabled = smooth;
     } else {
         [radioButtons selectCellAtRow:self.enabled ? 0 : -1 column:0];
     }
 }
 
 - (void)mappingListDidChange:(NSNotification *)note {
-    NSArray *mappings = note.object;
+    NSArray *mappings = note.userInfo[NJMappingListKey];
     NJMapping *current = mappingPopup.selectedItem.representedObject;
     [mappingPopup.menu removeAllItems];
     for (NJMapping *mapping in mappings) {
     [mappingPopup selectItemWithRepresentedObject:current];
 }
 
+- (void)mappingDidChange:(NSNotification *)note {
+    [self loadCurrent];
+}
+
 @end