diff options
Diffstat (limited to 'Framework/MASDictionaryTransformer.m')
| -rw-r--r-- | Framework/MASDictionaryTransformer.m | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/Framework/MASDictionaryTransformer.m b/Framework/MASDictionaryTransformer.m new file mode 100644 index 0000000..f0d9b2e --- /dev/null +++ b/Framework/MASDictionaryTransformer.m @@ -0,0 +1,42 @@ +#import "MASDictionaryTransformer.h" +#import "MASShortcut.h" + +static NSString *const MASKeyCodeKey = @"keyCode"; +static NSString *const MASModifierFlagsKey = @"modifierFlags"; + +@implementation MASDictionaryTransformer + ++ (BOOL) allowsReverseTransformation +{ + return YES; +} + +- (NSDictionary*) reverseTransformedValue: (MASShortcut*) shortcut +{ + return @{ + MASKeyCodeKey: @([shortcut keyCode]), + MASModifierFlagsKey: @([shortcut modifierFlags]) + }; +} + +- (MASShortcut*) transformedValue: (NSDictionary*) dictionary +{ + // We have to be defensive here as the value may come from user defaults. + if (![dictionary isKindOfClass:[NSDictionary class]]) { + return nil; + } + + id keyCodeBox = [dictionary objectForKey:MASKeyCodeKey]; + id modifierFlagsBox = [dictionary objectForKey:MASModifierFlagsKey]; + + SEL integerValue = @selector(integerValue); + if (![keyCodeBox respondsToSelector:integerValue] || ![modifierFlagsBox respondsToSelector:integerValue]) { + return nil; + } + + return [MASShortcut + shortcutWithKeyCode:[keyCodeBox integerValue] + modifierFlags:[modifierFlagsBox integerValue]]; +} + +@end |
