Improved analog support for scrolling, and allow speed adjustments.
[enjoyable.git] / 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 #import "NJOutputSwitchMouseMode.h"
16
17 @implementation NJOutput {
18 BOOL running;
19 }
20
21 + (NSString *)serializationCode {
22 [self doesNotRecognizeSelector:_cmd];
23 return nil;
24 }
25
26 - (NSDictionary *)serialize {
27 [self doesNotRecognizeSelector:_cmd];
28 return nil;
29 }
30
31 - (BOOL)isEqual:(id)object {
32 return [object isKindOfClass:NJOutput.class]
33 && [[self serialize] isEqual:[object serialize]];
34 }
35
36 - (NSUInteger)hash {
37 return [[self serialize] hash];
38 }
39
40 + (NJOutput *)outputDeserialize:(NSDictionary *)serialization
41 withMappings:(NSArray *)mappings {
42 // Don't crash loading old/bad mappings (but don't load them either).
43 if (![serialization isKindOfClass:NSDictionary.class])
44 return nil;
45 NSString *type = serialization[@"type"];
46 for (Class cls in @[NJOutputKeyPress.class,
47 NJOutputMapping.class,
48 NJOutputMouseMove.class,
49 NJOutputMouseButton.class,
50 NJOutputMouseScroll.class,
51 NJOutputSwitchMouseMode.class
52 ]) {
53 if ([type isEqualToString:cls.serializationCode])
54 return [cls outputDeserialize:serialization withMappings:mappings];
55 }
56
57 return nil;
58 }
59
60 - (void)trigger {
61 }
62
63 - (void)untrigger {
64 }
65
66 - (BOOL)update:(NJDeviceController *)jc {
67 return NO;
68 }
69
70 - (BOOL)isContinuous {
71 return NO;
72 }
73
74 - (BOOL)running {
75 return running;
76 }
77
78 - (void)setRunning:(BOOL)newRunning {
79 if (running != newRunning) {
80 running = newRunning;
81 if (running)
82 [self trigger];
83 else
84 [self untrigger];
85 }
86 }
87
88
89 @end