diff --git a/lib/src/pages/editing_page.dart b/lib/src/pages/editing_page.dart index f2bee8d1..34bcfd66 100644 --- a/lib/src/pages/editing_page.dart +++ b/lib/src/pages/editing_page.dart @@ -537,6 +537,7 @@ class EditingPageState extends State with WindowListener { Consumer( builder: (context, value, _) { return MarkdownToolbar( + key: context.watch().markdownToolbarKey, useIncludedTextField: false, controller: value.controller, focusNode: focusNodeTextField, @@ -550,22 +551,28 @@ class EditingPageState extends State with WindowListener { dropdownTextColor: Theme.of(context).colorScheme.primary, headingTooltip: Localization.appLocalizations().tooltipHeading, - boldTooltip: Localization.appLocalizations().tooltipBold, - italicTooltip: Localization.appLocalizations().tooltipItalic, + boldTooltip: + '${Localization.appLocalizations().tooltipBold} [Ctrl+B]', + italicTooltip: + '${Localization.appLocalizations().tooltipItalic} [Ctrl+I]', strikethroughTooltip: Localization.appLocalizations().tooltipStrikethrough, - linkTooltip: Localization.appLocalizations().tooltipLink, - imageTooltip: Localization.appLocalizations().tooltipImage, - codeTooltip: Localization.appLocalizations().tooltipCode, + linkTooltip: + '${Localization.appLocalizations().tooltipLink} [Ctrl+K]', + imageTooltip: + '${Localization.appLocalizations().tooltipImage} [Ctrl+P]', + codeTooltip: + '${Localization.appLocalizations().tooltipCode} [Ctrl+E]', bulletedListTooltip: - Localization.appLocalizations().tooltipBulletedList, + '${Localization.appLocalizations().tooltipBulletedList} [Ctrl+Shift+8]', numberedListTooltip: - Localization.appLocalizations().tooltipNumberedList, + '${Localization.appLocalizations().tooltipNumberedList} [Ctrl+Shift+7]', checkboxTooltip: Localization.appLocalizations().tooltipCheckbox, - quoteTooltip: Localization.appLocalizations().tooltipQuote, + quoteTooltip: + '${Localization.appLocalizations().tooltipQuote} [Ctrl+.]', horizontalRuleTooltip: - Localization.appLocalizations().tooltipHorizontalRule, + '${Localization.appLocalizations().tooltipHorizontalRule} [Ctrl+Shift+H]', ); }, ), diff --git a/lib/src/provider/editing/editing_provider.dart b/lib/src/provider/editing/editing_provider.dart index f1cb714b..d5a64715 100644 --- a/lib/src/provider/editing/editing_provider.dart +++ b/lib/src/provider/editing/editing_provider.dart @@ -1,5 +1,6 @@ import 'package:buhocms/src/utils/preferences.dart'; import 'package:flutter/material.dart'; +import 'package:markdown_toolbar/markdown_toolbar.dart'; import '../../pages/editing_page.dart'; @@ -8,6 +9,10 @@ class EditingProvider extends ChangeNotifier { GlobalKey(); GlobalKey get editingPageKey => _editingPageKey; + final GlobalKey _markdownToolbarKey = + GlobalKey(); + GlobalKey get markdownToolbarKey => _markdownToolbarKey; + bool _isGUIMode = false; bool get isGUIMode { diff --git a/lib/src/widgets/menu_bar.dart b/lib/src/widgets/menu_bar.dart index 28187066..2ef0a7e3 100644 --- a/lib/src/widgets/menu_bar.dart +++ b/lib/src/widgets/menu_bar.dart @@ -1,3 +1,4 @@ +import 'package:buhocms/src/widgets/shortcuts.dart'; import 'package:buhocms/src/widgets/snackbar.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; @@ -341,8 +342,9 @@ class _CustomMenuBarState extends State { ), ]; _shortcutsEntry?.dispose(); - _shortcutsEntry = - ShortcutRegistry.of(context).addAll(MenuEntry.shortcuts(result)); + _shortcutsEntry = ShortcutRegistry.of(context).addAll( + MenuEntry.shortcuts(result)..addAll(markdownToolbarShortcuts(context))); + return result; } diff --git a/lib/src/widgets/shortcuts.dart b/lib/src/widgets/shortcuts.dart index 1c897776..39eebb95 100644 --- a/lib/src/widgets/shortcuts.dart +++ b/lib/src/widgets/shortcuts.dart @@ -1,4 +1,45 @@ import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:provider/provider.dart'; + +import '../provider/editing/editing_provider.dart'; + +Map markdownToolbarShortcuts( + BuildContext context) { + final markdownToolbarShortcuts = {}; + final markdownToolbarState = + context.read().markdownToolbarKey.currentState; + + markdownToolbarShortcuts.addEntries([ + MapEntry(const SingleActivator(LogicalKeyboardKey.keyB, control: true), + VoidCallbackIntent(() => markdownToolbarState?.onBoldPressed())), + MapEntry(const SingleActivator(LogicalKeyboardKey.keyI, control: true), + VoidCallbackIntent(() => markdownToolbarState?.onItalicPressed())), + MapEntry(const SingleActivator(LogicalKeyboardKey.keyK, control: true), + VoidCallbackIntent(() => markdownToolbarState?.onLinkPressed())), + MapEntry(const SingleActivator(LogicalKeyboardKey.keyP, control: true), + VoidCallbackIntent(() => markdownToolbarState?.onImagePressed())), + MapEntry(const SingleActivator(LogicalKeyboardKey.keyE, control: true), + VoidCallbackIntent(() => markdownToolbarState?.onCodePressed())), + MapEntry( + const SingleActivator(LogicalKeyboardKey.digit8, + control: true, shift: true), + VoidCallbackIntent( + () => markdownToolbarState?.onUnorderedListPressed())), + MapEntry( + const SingleActivator(LogicalKeyboardKey.digit7, + control: true, shift: true), + VoidCallbackIntent(() => markdownToolbarState?.onOrderedListPressed())), + MapEntry(const SingleActivator(LogicalKeyboardKey.period, control: true), + VoidCallbackIntent(() => markdownToolbarState?.onQuotePressed())), + MapEntry( + const SingleActivator(LogicalKeyboardKey.keyH, + control: true, shift: true), + VoidCallbackIntent( + () => markdownToolbarState?.onHorizontalRulePressed())), + ]); + return markdownToolbarShortcuts; +} class LoggingActionDispatcher extends ActionDispatcher { @override