aboutsummaryrefslogtreecommitdiffstats
path: root/Framework
diff options
context:
space:
mode:
authorTomáš Znamenáček2014-08-07 11:26:34 +0200
committerTomáš Znamenáček2015-01-07 15:42:21 +0100
commitd687545083839db1218ab874f59a7290d516b46b (patch)
treef32e7b88fe1554ab9f38d91b7c69e467180fddc1 /Framework
parentf03fad7b629d3fac525bed5e37d064343fe773cd (diff)
downloadMASShortcut-d687545083839db1218ab874f59a7290d516b46b.tar.bz2
Added a convenience call to register default shortcuts.
Diffstat (limited to 'Framework')
-rw-r--r--Framework/MASShortcutBinder.h10
-rw-r--r--Framework/MASShortcutBinder.m22
-rw-r--r--Framework/MASShortcutBinderTests.m9
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