diff options
| -rw-r--r-- | Framework/MASShortcutBinder.h | 10 | ||||
| -rw-r--r-- | Framework/MASShortcutBinder.m | 22 | ||||
| -rw-r--r-- | Framework/MASShortcutBinderTests.m | 9 |
3 files changed, 40 insertions, 1 deletions
diff --git a/Framework/MASShortcutBinder.h b/Framework/MASShortcutBinder.h index 3cd54dd..c38dbd4 100644 --- a/Framework/MASShortcutBinder.h +++ b/Framework/MASShortcutBinder.h @@ -8,4 +8,14 @@ - (void) bindShortcutWithDefaultsKey: (NSString*) defaultsKeyName toAction: (dispatch_block_t) action; - (void) breakBindingWithDefaultsKey: (NSString*) defaultsKeyName; +/** + @brief Register default shortcuts in user defaults. + + This is a convenience frontent to [NSUserDefaults registerDefaults]. + The dictionary should contain a map of user defaults’ keys to appropriate + keyboard shortcuts. The shortcuts will be transformed according to + @p bindingOptions and registered using @p registerDefaults. +*/ +- (void) registerDefaultShortcuts: (NSDictionary*) defaultShortcuts; + @end diff --git a/Framework/MASShortcutBinder.m b/Framework/MASShortcutBinder.m index 2b30157..1039f64 100644 --- a/Framework/MASShortcutBinder.m +++ b/Framework/MASShortcutBinder.m @@ -27,7 +27,7 @@ } } -#pragma mark Bindings +#pragma mark Registration - (void) bindShortcutWithDefaultsKey: (NSString*) defaultsKeyName toAction: (dispatch_block_t) action { @@ -44,6 +44,26 @@ [self unbind:defaultsKeyName]; } +- (void) registerDefaultShortcuts: (NSDictionary*) defaultShortcuts +{ + NSValueTransformer *transformer = [_bindingOptions valueForKey:NSValueTransformerBindingOption]; + if (transformer == nil) { + NSString *transformerName = [_bindingOptions valueForKey:NSValueTransformerNameBindingOption]; + if (transformerName) { + transformer = [NSValueTransformer valueTransformerForName:transformerName]; + } + } + + NSAssert(transformer != nil, @"Can’t register default shortcuts without a transformer."); + + [defaultShortcuts enumerateKeysAndObjectsUsingBlock:^(NSString *defaultsKey, MASShortcut *shortcut, BOOL *stop) { + id value = [transformer reverseTransformedValue:shortcut]; + [[NSUserDefaults standardUserDefaults] registerDefaults:@{defaultsKey:value}]; + }]; +} + +#pragma mark Bindings + - (BOOL) isRegisteredAction: (NSString*) name { return !![_actions objectForKey:name]; diff --git a/Framework/MASShortcutBinderTests.m b/Framework/MASShortcutBinderTests.m index 50d093d..9f90a94 100644 --- a/Framework/MASShortcutBinderTests.m +++ b/Framework/MASShortcutBinderTests.m @@ -86,4 +86,13 @@ static NSString *const SampleDefaultsKey = @"sampleShortcut"; @"Deserialize shortcut from user defaults using a custom transformer."); } +- (void) testDefaultShortcuts +{ + MASShortcut *shortcut = [MASShortcut shortcutWithKeyCode:5 modifierFlags:1048576]; + [_binder registerDefaultShortcuts:@{SampleDefaultsKey: shortcut}]; + [_binder bindShortcutWithDefaultsKey:SampleDefaultsKey toAction:^{}]; + XCTAssertTrue([_monitor isShortcutRegistered:shortcut], + @"Bind shortcut using a default value."); +} + @end |
