#import "NJOutput.h"
#import "NJEvents.h"
-#define PB_ROW @"com.yukkurigames.Enjoyable.MappingRow"
-
@implementation NJMappingsController {
NSMutableArray *_mappings;
NJMapping *_manualMapping;
return self;
}
-- (NJMapping *)objectForKeyedSubscript:(NSString *)name {
+- (NJMapping *)mappingForKey:(NSString *)name {
for (NJMapping *mapping in _mappings)
if ([name isEqualToString:mapping.name])
return mapping;
return nil;
}
-- (NJMapping *)objectAtIndexedSubscript:(NSUInteger)idx {
- return idx < _mappings.count ? _mappings[idx] : nil;
-}
-
- (void)mappingsSet {
[self postLoadProcess];
[NSNotificationCenter.defaultCenter
[self mappingsSet];
}
-- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state
- objects:(__unsafe_unretained id [])buffer
- count:(NSUInteger)len {
- return [_mappings countByEnumeratingWithState:state
- objects:buffer
- count:len];
-}
-
- (void)activateMappingForProcess:(NSRunningApplication *)app {
NJMapping *oldMapping = _manualMapping;
NSArray *names = app.possibleMappingNames;
BOOL found = NO;
for (NSString *name in names) {
- NJMapping *mapping = self[name];
+ NJMapping *mapping = [self mappingForKey:name];
if (mapping) {
[self activateMapping:mapping];
found = YES;
_manualMapping = oldMapping;
}
+- (void)activateMappingForcibly:(NJMapping *)mapping {
+ NSLog(@"Switching to mapping %@.", mapping.name);
+ _currentMapping = mapping;
+ NSUInteger idx = [self indexOfMapping:_currentMapping];
+ [NSNotificationCenter.defaultCenter
+ postNotificationName:NJEventMappingChanged
+ object:self
+ userInfo:@{ NJMappingKey : _currentMapping,
+ NJMappingIndexKey: @(idx) }];
+}
+
- (void)activateMapping:(NJMapping *)mapping {
if (!mapping)
mapping = _manualMapping;
if (mapping == _currentMapping)
return;
- NSLog(@"Switching to mapping %@.", mapping.name);
_manualMapping = mapping;
- _currentMapping = mapping;
- NSUInteger idx = [_mappings indexOfObjectIdenticalTo:_currentMapping];
- [NSNotificationCenter.defaultCenter
- postNotificationName:NJEventMappingChanged
- object:self
- userInfo:@{ NJMappingKey : _currentMapping,
- NJMappingIndexKey: @(idx) }];
+ [self activateMappingForcibly:mapping];
}
- (void)save {
}
- (void)postLoadProcess {
- for (NJMapping *mapping in self)
- [mapping postLoadProcess:self];
+ for (NJMapping *mapping in self.mappings)
+ [mapping postLoadProcess:self.mappings];
}
- (void)load {
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)mergeMapping:(NJMapping *)mapping intoMapping:(NJMapping *)existing {
[existing mergeEntriesFrom:mapping];
[self mappingsChanged];
- if (existing == _currentMapping) {
- // FIXME: Hack to trigger updates in the rest of the UI.
- _currentMapping = nil;
- NJMapping *manual = _manualMapping;
- [self activateMapping:existing];
- _manualMapping = manual;
- }
+ if (existing == _currentMapping)
+ [self activateMappingForcibly:mapping];
}
- (void)renameMapping:(NJMapping *)mapping to:(NSString *)name {
mapping.name = name;
- if (mapping == _currentMapping) {
- // FIXME: Hack to trigger updates in the rest of the UI.
- _currentMapping = nil;
- NJMapping *manual = _manualMapping;
- [self activateMapping:mapping];
- _manualMapping = manual;
- }
[self mappingsChanged];
+ if (mapping == _currentMapping)
+ [self activateMappingForcibly:mapping];
}
- (void)addMapping:(NJMapping *)mapping {
- (void)removeMappingAtIndex:(NSInteger)idx {
NSInteger currentIdx = [self indexOfMapping:_currentMapping];
[_mappings removeObjectAtIndex:idx];
- [self activateMapping:self[MIN(currentIdx, _mappings.count - 1)]];
+ [self activateMapping:self.mappings[MIN(currentIdx, _mappings.count - 1)]];
[self mappingsChanged];
}
[self mappingsChanged];
}
-- (NSUInteger)count {
- return _mappings.count;
-}
-
@end