aboutsummaryrefslogtreecommitdiffstats
path: root/Framework/MASShortcutView.h
AgeCommit message (Collapse)Author
2016-11-01Use properly typedef’d enumerations to improve Swift syntaxTony Arnold
Signed-off-by: Tony Arnold <tony@thecocoabots.com>
2015-02-16Allow first responder support to be turned on and offJason Perkins
2015-01-07Removed explicit @synthesize and renamed “appearance” to “style”.Tomáš Znamenáček
The “appearance” property didn’t play nice with auto-synthesizing, not really sure why.
2015-01-07Refactored the shortcut dispatcher and bindings to user defaults.Tomáš Znamenáček
This is a big change that was hard to split into smaller commits. There’s now a new class to bind shortcuts to actions, a new class to bind user defaults’ keys to actions, and a new way to associate user defaults with the recorder control (MASShortcutView). I have also updated the demo app to go with the changes. The new class to associate shortcuts with actions is called MASShortcutMonitor. It wraps the Carbon hotkey magic and offers a simple interface to add a shortcut along with a block that should be run when the shortcut is pressed. It’s the lowest-level interface. Since the usual requirement is to store the shortcuts into user defaults, there’s also a higher-level interface offered by the MASShortcutBinder class. That takes a defaults key and associates it with a block. When the shortcut stored under the defaults key changes, the binder automatically switches to the new shortcut. The class is a wrapper built atop of the previous one, the MASShortcutMonitor – it simply adds, updates and removes shortcuts as the user defaults change. I have removed the special user defaults integration code from the recorder control (MASShortcutView) and replaced it with a small Cocoa Bindings shim. This means that in order to keep the recorder control in sync with the defaults you just have to call the usual bind:toObject:withKeyPath:options: method, like this: [_shortcutView bind:MASShortcutBinding toObject:[NSUserDefaultsController sharedUserDefaultsController] withKeyPath[@"values.ExampleDefaultsKey" options:@{NSValueTransformerNameBindingOption:NSKeyedUnarchiveFromDataTransformerName}]; That’s more verbose than the previous solution, but it’s much cleaner and can be swept under a convenience call if needed. I might also add a dictionaryValue property later that would make it possible to bind the value to user defaults directly, without a transformer, and would enable backward compatibility with Shortcut Recorder.
2015-01-07Introduced a standalone MASShortcutValidator class to validate shortcuts.Tomáš Znamenáček
It’s a natural simplification of the MASShortcut class. All MASShortcutView objects use a shared validator by default, but can be reconfigured to use a different validator if needed through the shortcutValidator property.
2015-01-07Converted keycode macros to plain functions.Tomáš Znamenáček
Plain functions are less prone to bugs, the compiler understands them better and can offer better error messages, and plain functions can be refactored more easily.
2015-01-07Repackaged the code as a framework and included the demo.Tomáš Znamenáček
Packaging the code as a framework is mostly just a formality. It doesn’t really change much, it just turns the code into a regular component. What it does change is that the code now has its own Xcode settings, which could make compatibility easier in the long run. Including the demo in the main repository makes it easier to hack on the library, since you can try the changes immediately. It also shows how to bundle the framework into an app that uses it.