Skip to content

Commit

Permalink
Skip keyboard shortcut override when setting defaults
Browse files Browse the repository at this point in the history
  • Loading branch information
Maxime Ollivier authored and ryanolsonk committed Jul 15, 2020
1 parent d46f917 commit 216a012
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 18 deletions.
40 changes: 25 additions & 15 deletions Classes/Manager/FLEXManager+Extensibility.m
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ - (void)registerGlobalEntryWithName:(NSString *)entryName viewControllerFutureBl

- (void)registerSimulatorShortcutWithKey:(NSString *)key modifiers:(UIKeyModifierFlags)modifiers action:(dispatch_block_t)action description:(NSString *)description {
#if TARGET_OS_SIMULATOR
[FLEXKeyboardShortcutManager.sharedManager registerSimulatorShortcutWithKey:key modifiers:modifiers action:action description:description];
[FLEXKeyboardShortcutManager.sharedManager registerSimulatorShortcutWithKey:key modifiers:modifiers action:action description:description allowOverride:YES];
#endif
}

Expand All @@ -81,37 +81,47 @@ - (BOOL)simulatorShortcutsEnabled {
#endif
}


#pragma mark - Shortcuts Defaults

- (void)registerDefaultSimulatorShortcutWithKey:(NSString *)key modifiers:(UIKeyModifierFlags)modifiers action:(dispatch_block_t)action description:(NSString *)description {
#if TARGET_OS_SIMULATOR
// Don't allow override to avoid changing keys registered by the app
[FLEXKeyboardShortcutManager.sharedManager registerSimulatorShortcutWithKey:key modifiers:modifiers action:action description:description allowOverride:NO];
#endif
}

- (void)registerDefaultSimulatorShortcuts {
[self registerSimulatorShortcutWithKey:@"f" modifiers:0 action:^{
[self registerDefaultSimulatorShortcutWithKey:@"f" modifiers:0 action:^{
[self toggleExplorer];
} description:@"Toggle FLEX toolbar"];

[self registerSimulatorShortcutWithKey:@"g" modifiers:0 action:^{
[self registerDefaultSimulatorShortcutWithKey:@"g" modifiers:0 action:^{
[self showExplorerIfNeeded];
[self.explorerViewController toggleMenuTool];
} description:@"Toggle FLEX globals menu"];

[self registerSimulatorShortcutWithKey:@"v" modifiers:0 action:^{
[self registerDefaultSimulatorShortcutWithKey:@"v" modifiers:0 action:^{
[self showExplorerIfNeeded];
[self.explorerViewController toggleViewsTool];
} description:@"Toggle view hierarchy menu"];

[self registerSimulatorShortcutWithKey:@"s" modifiers:0 action:^{
[self registerDefaultSimulatorShortcutWithKey:@"s" modifiers:0 action:^{
[self showExplorerIfNeeded];
[self.explorerViewController toggleSelectTool];
} description:@"Toggle select tool"];

[self registerSimulatorShortcutWithKey:@"m" modifiers:0 action:^{
[self registerDefaultSimulatorShortcutWithKey:@"m" modifiers:0 action:^{
[self showExplorerIfNeeded];
[self.explorerViewController toggleMoveTool];
} description:@"Toggle move tool"];

[self registerSimulatorShortcutWithKey:@"n" modifiers:0 action:^{
[self registerDefaultSimulatorShortcutWithKey:@"n" modifiers:0 action:^{
[self toggleTopViewControllerOfClass:[FLEXNetworkMITMViewController class]];
} description:@"Toggle network history view"];

// 't' is for testing: quickly present an object explorer for debugging
[self registerSimulatorShortcutWithKey:@"t" modifiers:0 action:^{
[self registerDefaultSimulatorShortcutWithKey:@"t" modifiers:0 action:^{
[self showExplorerIfNeeded];

[self.explorerViewController toggleToolWithViewControllerProvider:^UINavigationController *{
Expand All @@ -121,41 +131,41 @@ - (void)registerDefaultSimulatorShortcuts {
} completion:nil];
} description:@"Present an object explorer for debugging"];

[self registerSimulatorShortcutWithKey:UIKeyInputDownArrow modifiers:0 action:^{
[self registerDefaultSimulatorShortcutWithKey:UIKeyInputDownArrow modifiers:0 action:^{
if (self.isHidden || ![self.explorerViewController handleDownArrowKeyPressed]) {
[self tryScrollDown];
}
} description:@"Cycle view selection\n\t\tMove view down\n\t\tScroll down"];

[self registerSimulatorShortcutWithKey:UIKeyInputUpArrow modifiers:0 action:^{
[self registerDefaultSimulatorShortcutWithKey:UIKeyInputUpArrow modifiers:0 action:^{
if (self.isHidden || ![self.explorerViewController handleUpArrowKeyPressed]) {
[self tryScrollUp];
}
} description:@"Cycle view selection\n\t\tMove view up\n\t\tScroll up"];

[self registerSimulatorShortcutWithKey:UIKeyInputRightArrow modifiers:0 action:^{
[self registerDefaultSimulatorShortcutWithKey:UIKeyInputRightArrow modifiers:0 action:^{
if (!self.isHidden) {
[self.explorerViewController handleRightArrowKeyPressed];
}
} description:@"Move selected view right"];

[self registerSimulatorShortcutWithKey:UIKeyInputLeftArrow modifiers:0 action:^{
[self registerDefaultSimulatorShortcutWithKey:UIKeyInputLeftArrow modifiers:0 action:^{
if (self.isHidden) {
[self tryGoBack];
} else {
[self.explorerViewController handleLeftArrowKeyPressed];
}
} description:@"Move selected view left"];

[self registerSimulatorShortcutWithKey:@"?" modifiers:0 action:^{
[self registerDefaultSimulatorShortcutWithKey:@"?" modifiers:0 action:^{
[self toggleTopViewControllerOfClass:[FLEXKeyboardHelpViewController class]];
} description:@"Toggle (this) help menu"];

[self registerSimulatorShortcutWithKey:UIKeyInputEscape modifiers:0 action:^{
[self registerDefaultSimulatorShortcutWithKey:UIKeyInputEscape modifiers:0 action:^{
[[self.topViewController presentingViewController] dismissViewControllerAnimated:YES completion:nil];
} description:@"End editing text\n\t\tDismiss top view controller"];

[self registerSimulatorShortcutWithKey:@"o" modifiers:UIKeyModifierCommand|UIKeyModifierShift action:^{
[self registerDefaultSimulatorShortcutWithKey:@"o" modifiers:UIKeyModifierCommand|UIKeyModifierShift action:^{
[self toggleTopViewControllerOfClass:[FLEXFileBrowserController class]];
} description:@"Toggle file browser menu"];
}
Expand Down
8 changes: 7 additions & 1 deletion Classes/Utility/Keyboard/FLEXKeyboardShortcutManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,16 @@

@property (nonatomic, readonly, class) FLEXKeyboardShortcutManager *sharedManager;

/// @param key A single character string matching a key on the keyboard
/// @param modifiers Modifier keys such as shift, command, or alt/option
/// @param action The block to run on the main thread when the key & modifier combination is recognized.
/// @param description Shown the the keyboard shortcut help menu, which is accessed via the '?' key.
/// @param allowOverride Allow registering even if there's an existing action associated with that key/modifier.
- (void)registerSimulatorShortcutWithKey:(NSString *)key
modifiers:(UIKeyModifierFlags)modifiers
action:(dispatch_block_t)action
description:(NSString *)description;
description:(NSString *)description
allowOverride:(BOOL)allowOverride;

@property (nonatomic, getter=isEnabled) BOOL enabled;
@property (nonatomic, readonly) NSString *keyboardShortcutsDescription;
Expand Down
9 changes: 7 additions & 2 deletions Classes/Utility/Keyboard/FLEXKeyboardShortcutManager.m
Original file line number Diff line number Diff line change
Expand Up @@ -212,9 +212,14 @@ - (instancetype)init {
- (void)registerSimulatorShortcutWithKey:(NSString *)key
modifiers:(UIKeyModifierFlags)modifiers
action:(dispatch_block_t)action
description:(NSString *)description {
description:(NSString *)description
allowOverride:(BOOL)allowOverride {
FLEXKeyInput *keyInput = [FLEXKeyInput keyInputForKey:key flags:modifiers helpDescription:description];
[self.actionsForKeyInputs setObject:action forKey:keyInput];
if (!allowOverride && self.actionsForKeyInputs[keyInput] != nil) {
return;
} else {
[self.actionsForKeyInputs setObject:action forKey:keyInput];
}
}

static const long kFLEXControlKeyCode = 0xe0;
Expand Down

0 comments on commit 216a012

Please sign in to comment.