// Created by Sam McCall on 5/05/09.
//
-@implementation Target
+#import "Target.h"
-+(Target*) unstringify: (NSString*) str withConfigList: (NSArray*) configs {
- NSArray* components = [str componentsSeparatedByString:@"~"];
- NSParameterAssert([components count]);
- NSString* typeTag = [components objectAtIndex:0];
- if([typeTag isEqualToString:@"key"])
- return [TargetKeyboard unstringifyImpl:components];
- if([typeTag isEqualToString:@"cfg"])
- return [TargetConfig unstringifyImpl:components withConfigList:configs];
- if([typeTag isEqualToString:@"mmove"])
- return [TargetMouseMove unstringifyImpl:components];
- if([typeTag isEqualToString:@"mbtn"])
- return [TargetMouseBtn unstringifyImpl:components];
-
- NSParameterAssert(NO);
- return NULL;
+#import "TargetKeyboard.h"
+#import "TargetConfig.h"
+#import "TargetMouseMove.h"
+#import "TargetMouseBtn.h"
+#import "TargetMouseScroll.h"
+#import "TargetToggleMouseScope.h"
+
+@implementation Target {
+ BOOL running;
+}
+
++ (NSString *)serializationCode {
+ [self doesNotRecognizeSelector:_cmd];
+ return nil;
+}
+
+- (NSDictionary *)serialize {
+ [self doesNotRecognizeSelector:_cmd];
+ return nil;
+}
+
+- (BOOL)isEqual:(id)object {
+ return [object isKindOfClass:Target.class]
+ && [[self serialize] isEqual:[object serialize]];
}
--(NSString*) stringify {
- [self doesNotRecognizeSelector:_cmd];
- return NULL;
+- (NSUInteger)hash {
+ return [[self serialize] hash];
}
--(void) trigger {
- [self doesNotRecognizeSelector:_cmd];
++ (Target *)targetDeserialize:(NSDictionary *)serialization
+ withMappings:(NSArray *)mappings {
+ // Don't crash loading old/bad mappings (but don't load them either).
+ if (![serialization isKindOfClass:NSDictionary.class])
+ return nil;
+ NSString *type = serialization[@"type"];
+ for (Class cls in @[TargetKeyboard.class,
+ TargetConfig.class,
+ TargetMouseMove.class,
+ TargetMouseBtn.class,
+ TargetMouseScroll.class,
+ TargetToggleMouseScope.class
+ ]) {
+ if ([type isEqualToString:cls.serializationCode])
+ return [cls targetDeserialize:serialization withMappings:mappings];
+ }
+
+ return nil;
}
--(void) untrigger {
- // no-op by default
+- (void)trigger {
}
--(BOOL) running {
- return running;
+- (void)untrigger {
}
--(void) setRunning: (BOOL) newRunning {
- if(newRunning == running)
- return;
- if(newRunning)
- [self trigger];
- else
- [self untrigger];
- running = newRunning;
+
+- (BOOL)update:(NJInputController *)jc {
+ return NO;
+}
+
+- (BOOL)isContinuous {
+ return NO;
+}
+
+- (BOOL)running {
+ return running;
+}
+
+- (void)setRunning:(BOOL)newRunning {
+ if (running != newRunning) {
+ running = newRunning;
+ if (running)
+ [self trigger];
+ else
+ [self untrigger];
+ }
}
-@synthesize inputValue;
@end