Use represented objects rather than index hackery. Remove the mapping name from the...
[enjoyable.git] / NJMappingsController.m
index e01cb91..193edfe 100644 (file)
@@ -7,7 +7,7 @@
 
 #import "NJMappingsController.h"
 
-#import "ApplicationController.h"
+#import "EnjoyableApplicationDelegate.h"
 #import "NJMapping.h"
 #import "NJMappingsController.h"
 #import "NJOutput.h"
     return nil;
 }
 
+- (NJMapping *)objectAtIndexedSubscript:(NSUInteger)idx {
+    return idx < _mappings.count ? _mappings[idx] : nil;
+}
+
+- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state
+                                  objects:(__unsafe_unretained id [])buffer
+                                    count:(NSUInteger)len {
+    return [_mappings countByEnumeratingWithState:state
+                                          objects:buffer
+                                            count:len];
+}
+
+
 - (void)activateMappingForProcess:(NSString *)processName {
     NJMapping *oldMapping = manualMapping;
     NJMapping *newMapping = self[processName];
@@ -54,6 +67,7 @@
     _currentMapping = mapping;
     [removeButton setEnabled:_mappings[0] != mapping];
     [outputController loadCurrent];
+    popoverActivate.title = _currentMapping.name;
     [NSNotificationCenter.defaultCenter postNotificationName:NJEventMappingChanged
                                                       object:_currentMapping];
     [tableView selectRowIndexes:[NSIndexSet indexSetWithIndex:[_mappings indexOfObject:mapping]] byExtendingSelection:NO];
@@ -62,7 +76,7 @@
 - (IBAction)addPressed:(id)sender {
     NJMapping *newMapping = [[NJMapping alloc] initWithName:@"Untitled"];
     [_mappings addObject:newMapping];
-    [(ApplicationController *)NSApplication.sharedApplication.delegate mappingsChanged];
+    [(EnjoyableApplicationDelegate *)NSApplication.sharedApplication.delegate mappingsChanged];
     [tableView reloadData];
     [tableView selectRowIndexes:[NSIndexSet indexSetWithIndex:_mappings.count - 1] byExtendingSelection:NO];
     [tableView editColumn:0 row:_mappings.count - 1 withEvent:nil select:YES];
@@ -75,7 +89,7 @@
     
     [_mappings removeObjectAtIndex:tableView.selectedRow];
     [tableView reloadData];
-    [(ApplicationController *)NSApplication.sharedApplication.delegate mappingsChanged];
+    [(EnjoyableApplicationDelegate *)NSApplication.sharedApplication.delegate mappingsChanged];
     [self activateMapping:_mappings[0]];
     [self save];
 }
 }
 
 - (id)tableView:(NSTableView *)view objectValueForTableColumn:(NSTableColumn *)column row:(NSInteger)index {
-    return [_mappings[index] name];
+    return self[index].name;
 }
 
-- (void)tableView:(NSTableView *)view setObjectValue:(NSString *)obj forTableColumn:(NSTableColumn *)col row:(NSInteger)index {
-    [(NJMapping *)_mappings[index] setName:obj];
+- (void)tableView:(NSTableView *)view
+   setObjectValue:(NSString *)obj
+   forTableColumn:(NSTableColumn *)col
+              row:(NSInteger)index {
+    self[index].name = obj;
+    [self save];
     [tableView reloadData];
-    [(ApplicationController *)NSApplication.sharedApplication.delegate mappingsChanged];
+    [(EnjoyableApplicationDelegate *)NSApplication.sharedApplication.delegate mappingsChanged];
 }
 
 - (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView {
             current = 0;
         _mappings = newMappings;
         [tableView reloadData];
-        [(ApplicationController *)NSApplication.sharedApplication.delegate mappingsChanged];
+        [(EnjoyableApplicationDelegate *)NSApplication.sharedApplication.delegate mappingsChanged];
         [self activateMapping:_mappings[current]];
     }
 }
                           }
                           
                           [self save];
-                          [(ApplicationController *)NSApplication.sharedApplication.delegate mappingsChanged];
+                          [(EnjoyableApplicationDelegate *)NSApplication.sharedApplication.delegate mappingsChanged];
                           [self activateMapping:mapping];
                           [outputController loadCurrent];
                           
                   }];
 }
 
+- (IBAction)mappingPressed:(id)sender {
+    [popover showRelativeToRect:popoverActivate.bounds ofView:popoverActivate preferredEdge:NSMinXEdge];
+}
+
 @end