54809ceaee1ab7b1dd203899c2f5417b647ab864
[enjoyable.git] / Classes / NJOutput.m
1 //
2 // NJOutput.m
3 // Enjoy
4 //
5 // Created by Sam McCall on 5/05/09.
6 //
7
8 #import "NJOutput.h"
9
10 #import "NJOutputKeyPress.h"
11 #import "NJOutputMapping.h"
12 #import "NJOutputMouseMove.h"
13 #import "NJOutputMouseButton.h"
14 #import "NJOutputMouseScroll.h"
15
16 @implementation NJOutput {
17 BOOL running;
18 }
19
20 + (NSString *)serializationCode {
21 [self doesNotRecognizeSelector:_cmd];
22 return nil;
23 }
24
25 - (NSDictionary *)serialize {
26 [self doesNotRecognizeSelector:_cmd];
27 return nil;
28 }
29
30 - (BOOL)isEqual:(id)object {
31 return [object isKindOfClass:NJOutput.class]
32 && [[self serialize] isEqual:[object serialize]];
33 }
34
35 - (NSUInteger)hash {
36 return [[self serialize] hash];
37 }
38
39 + (NJOutput *)outputDeserialize:(NSDictionary *)serialization {
40 // Don't crash loading old/bad mappings (but don't load them either).
41 if (![serialization isKindOfClass:NSDictionary.class])
42 return nil;
43 NSString *type = serialization[@"type"];
44 for (Class cls in @[NJOutputKeyPress.class,
45 NJOutputMapping.class,
46 NJOutputMouseMove.class,
47 NJOutputMouseButton.class,
48 NJOutputMouseScroll.class
49 ]) {
50 if ([type isEqualToString:cls.serializationCode])
51 return [cls outputDeserialize:serialization];
52 }
53
54 return nil;
55 }
56
57 - (void)trigger {
58 }
59
60 - (void)untrigger {
61 }
62
63 - (BOOL)update:(NJDeviceController *)jc {
64 return NO;
65 }
66
67 - (BOOL)isContinuous {
68 return NO;
69 }
70
71 - (BOOL)running {
72 return running;
73 }
74
75 - (void)setRunning:(BOOL)newRunning {
76 if (running != newRunning) {
77 running = newRunning;
78 if (running)
79 [self trigger];
80 else
81 [self untrigger];
82 }
83 }
84
85 - (void)postLoadProcess:(id <NSFastEnumeration>)allMappings {
86 }
87
88 @end