diff options
Diffstat (limited to 'Framework')
| -rw-r--r-- | Framework/MASShortcutView+Bindings.h | 25 | ||||
| -rw-r--r-- | Framework/MASShortcutView+Bindings.m | 50 | ||||
| -rw-r--r-- | Framework/Shortcut.h | 1 |
3 files changed, 76 insertions, 0 deletions
diff --git a/Framework/MASShortcutView+Bindings.h b/Framework/MASShortcutView+Bindings.h new file mode 100644 index 0000000..b0148e7 --- /dev/null +++ b/Framework/MASShortcutView+Bindings.h @@ -0,0 +1,25 @@ +#import "MASShortcutView.h" + +/** + @brief A simplified interface to bind the recorder value to user defaults. + + You can bind the @p shortcutValue to user defaults using the standard + @p bind:toObject:withKeyPath:options: call, but since that’s a lot to type + and read, here’s a simpler option. + + Setting the @p associatedUserDefaultsKey binds the view’s shortcut value + to the given user defaults key. You can supply a value transformer to convert + values between user defaults and @p MASShortcut. If you don’t supply + a transformer, the @p NSUnarchiveFromDataTransformerName will be used + automatically. + + Set @p associatedUserDefaultsKey to @p nil to disconnect the binding. +*/ +@interface MASShortcutView (Bindings) + +@property(copy) NSString *associatedUserDefaultsKey; + +- (void) setAssociatedUserDefaultsKey: (NSString*) newKey withTransformer: (NSValueTransformer*) transformer; +- (void) setAssociatedUserDefaultsKey: (NSString*) newKey withTransformerName: (NSString*) transformerName; + +@end diff --git a/Framework/MASShortcutView+Bindings.m b/Framework/MASShortcutView+Bindings.m new file mode 100644 index 0000000..7a6064c --- /dev/null +++ b/Framework/MASShortcutView+Bindings.m @@ -0,0 +1,50 @@ +#import "MASShortcutView+Bindings.h" + +@implementation MASShortcutView (Bindings) + +- (NSString*) associatedUserDefaultsKey +{ + NSDictionary* bindingInfo = [self infoForBinding:MASShortcutBinding]; + if (bindingInfo != nil) { + NSString *keyPath = [bindingInfo objectForKey:NSObservedKeyPathKey]; + NSString *key = [keyPath stringByReplacingOccurrencesOfString:@"values." withString:@""]; + return key; + } else { + return nil; + } +} + +- (void) setAssociatedUserDefaultsKey: (NSString*) newKey withTransformer: (NSValueTransformer*) transformer +{ + // Break previous binding if any + NSString *currentKey = [self associatedUserDefaultsKey]; + if (currentKey != nil) { + [self unbind:currentKey]; + } + + // Stop if the new binding is nil + if (newKey == nil) { + return; + } + + NSDictionary *options = transformer ? + @{NSValueTransformerBindingOption:transformer} : + nil; + + [self bind:MASShortcutBinding + toObject:[NSUserDefaultsController sharedUserDefaultsController] + withKeyPath:[@"values." stringByAppendingString:newKey] + options:options]; +} + +- (void) setAssociatedUserDefaultsKey: (NSString*) newKey withTransformerName: (NSString*) transformerName +{ + [self setAssociatedUserDefaultsKey:newKey withTransformer:[NSValueTransformer valueTransformerForName:transformerName]]; +} + +- (void) setAssociatedUserDefaultsKey: (NSString*) newKey +{ + [self setAssociatedUserDefaultsKey:newKey withTransformerName:NSUnarchiveFromDataTransformerName]; +} + +@end diff --git a/Framework/Shortcut.h b/Framework/Shortcut.h index df33f17..e131395 100644 --- a/Framework/Shortcut.h +++ b/Framework/Shortcut.h @@ -4,3 +4,4 @@ #import "MASShortcutBinder.h" #import "MASDictionaryTransformer.h" #import "MASShortcutView.h" +#import "MASShortcutView+Bindings.h"
\ No newline at end of file |
