From c42f9001c4007bb865f9a1b3d0a86df504df3c1a Mon Sep 17 00:00:00 2001 From: Vincent Chan Date: Thu, 11 Aug 2022 16:40:07 +0800 Subject: [PATCH] feat: select all --- .../copy_paste_handler.dart | 1 - .../default_key_event_handlers.dart | 2 ++ .../select_all_handler.dart | 26 +++++++++++++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 frontend/app_flowy/packages/flowy_editor/lib/src/service/internal_key_event_handlers/select_all_handler.dart diff --git a/frontend/app_flowy/packages/flowy_editor/lib/src/service/internal_key_event_handlers/copy_paste_handler.dart b/frontend/app_flowy/packages/flowy_editor/lib/src/service/internal_key_event_handlers/copy_paste_handler.dart index 0b87fc0fd4..a5f392a4eb 100644 --- a/frontend/app_flowy/packages/flowy_editor/lib/src/service/internal_key_event_handlers/copy_paste_handler.dart +++ b/frontend/app_flowy/packages/flowy_editor/lib/src/service/internal_key_event_handlers/copy_paste_handler.dart @@ -1,5 +1,4 @@ import 'package:flowy_editor/flowy_editor.dart'; -import 'package:flowy_editor/src/service/keyboard_service.dart'; import 'package:flowy_editor/src/infra/html_converter.dart'; import 'package:flowy_editor/src/document/node_iterator.dart'; import 'package:flutter/material.dart'; diff --git a/frontend/app_flowy/packages/flowy_editor/lib/src/service/internal_key_event_handlers/default_key_event_handlers.dart b/frontend/app_flowy/packages/flowy_editor/lib/src/service/internal_key_event_handlers/default_key_event_handlers.dart index d03211461c..f99caab04a 100644 --- a/frontend/app_flowy/packages/flowy_editor/lib/src/service/internal_key_event_handlers/default_key_event_handlers.dart +++ b/frontend/app_flowy/packages/flowy_editor/lib/src/service/internal_key_event_handlers/default_key_event_handlers.dart @@ -7,6 +7,7 @@ import 'package:flowy_editor/src/service/internal_key_event_handlers/redo_undo_h import 'package:flowy_editor/src/service/internal_key_event_handlers/slash_handler.dart'; import 'package:flowy_editor/src/service/internal_key_event_handlers/update_text_style_by_command_x_handler.dart'; import 'package:flowy_editor/src/service/internal_key_event_handlers/whitespace_handler.dart'; +import 'package:flowy_editor/src/service/internal_key_event_handlers/select_all_handler.dart'; import 'package:flowy_editor/src/service/keyboard_service.dart'; List defaultKeyEventHandlers = [ @@ -19,4 +20,5 @@ List defaultKeyEventHandlers = [ enterWithoutShiftInTextNodesHandler, updateTextStyleByCommandXHandler, whiteSpaceHandler, + selectAllHandler, ]; diff --git a/frontend/app_flowy/packages/flowy_editor/lib/src/service/internal_key_event_handlers/select_all_handler.dart b/frontend/app_flowy/packages/flowy_editor/lib/src/service/internal_key_event_handlers/select_all_handler.dart new file mode 100644 index 0000000000..f99569218c --- /dev/null +++ b/frontend/app_flowy/packages/flowy_editor/lib/src/service/internal_key_event_handlers/select_all_handler.dart @@ -0,0 +1,26 @@ +import 'package:flowy_editor/flowy_editor.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; + +KeyEventResult _selectAll(EditorState editorState) { + if (editorState.document.root.children.isEmpty) { + return KeyEventResult.handled; + } + final firstNode = editorState.document.root.children.first; + final lastNode = editorState.document.root.children.last; + var offset = 0; + if (lastNode is TextNode) { + offset = lastNode.delta.length; + } + editorState.updateCursorSelection(Selection( + start: Position(path: firstNode.path, offset: 0), + end: Position(path: lastNode.path, offset: offset))); + return KeyEventResult.handled; +} + +FlowyKeyEventHandler selectAllHandler = (editorState, event) { + if (event.isMetaPressed && event.logicalKey == LogicalKeyboardKey.keyA) { + return _selectAll(editorState); + } + return KeyEventResult.ignored; +};