// // NJOutput.m // Enjoy // // Created by Sam McCall on 5/05/09. // #import "NJOutput.h" #import "NJOutputKeyPress.h" #import "NJOutputMapping.h" #import "NJOutputMouseMove.h" #import "NJOutputMouseButton.h" #import "NJOutputMouseScroll.h" @implementation NJOutput { BOOL running; } + (NSString *)serializationCode { [self doesNotRecognizeSelector:_cmd]; return nil; } - (NSDictionary *)serialize { [self doesNotRecognizeSelector:_cmd]; return nil; } - (BOOL)isEqual:(id)object { return [object isKindOfClass:NJOutput.class] && [[self serialize] isEqual:[object serialize]]; } - (NSUInteger)hash { return [[self serialize] hash]; } + (NJOutput *)outputDeserialize:(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 @[NJOutputKeyPress.class, NJOutputMapping.class, NJOutputMouseMove.class, NJOutputMouseButton.class, NJOutputMouseScroll.class ]) { if ([type isEqualToString:cls.serializationCode]) return [cls outputDeserialize:serialization withMappings:mappings]; } return nil; } - (void)trigger { } - (void)untrigger { } - (BOOL)update:(NJDeviceController *)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]; } } @end