From 7e7503ca2fb10a264fe11a8ac6a38e0a7e9fefd4 Mon Sep 17 00:00:00 2001 From: Vishesh Handa Date: Thu, 20 Aug 2020 11:47:31 +0200 Subject: [PATCH] Editors: Expose the preview markdown button on all editors It's nice to sometimes use the RawEditor to edit something and then later you want to see what it looks, and having to switch to the Markdown Editor for that is very annoying. --- lib/editors/checklist_editor.dart | 1 + lib/editors/common.dart | 10 ++++++ lib/editors/journal_editor.dart | 1 + lib/editors/markdown_editor.dart | 56 +++-------------------------- lib/editors/raw_editor.dart | 1 + lib/editors/scaffold.dart | 58 ++++++++++++++++++++++++++++--- 6 files changed, 70 insertions(+), 57 deletions(-) diff --git a/lib/editors/checklist_editor.dart b/lib/editors/checklist_editor.dart index 9f03fb05..3d61270f 100644 --- a/lib/editors/checklist_editor.dart +++ b/lib/editors/checklist_editor.dart @@ -174,6 +174,7 @@ class ChecklistEditorState extends State editor: widget, editorState: this, noteModified: _noteModified, + isNewNote: widget.isNewNote, parentFolder: widget.note.parent, body: Column( children: [ diff --git a/lib/editors/common.dart b/lib/editors/common.dart index 49fde6a1..4ae8fd72 100644 --- a/lib/editors/common.dart +++ b/lib/editors/common.dart @@ -41,12 +41,16 @@ class EditorAppBar extends StatelessWidget implements PreferredSizeWidget { final EditorState editorState; final bool noteModified; final IconButton extraButton; + final bool allowEdits; + final Func0 onEditingModeChange; EditorAppBar({ Key key, @required this.editor, @required this.editorState, @required this.noteModified, + @required this.allowEdits, + @required this.onEditingModeChange, this.extraButton, }) : preferredSize = const Size.fromHeight(kToolbarHeight), super(key: key); @@ -66,6 +70,12 @@ class EditorAppBar extends StatelessWidget implements PreferredSizeWidget { ), actions: [ if (extraButton != null) extraButton, + IconButton( + icon: allowEdits + ? const Icon(Icons.remove_red_eye) + : const Icon(Icons.edit), + onPressed: onEditingModeChange, + ), IconButton( key: const ValueKey("EditorSelector"), icon: const Icon(Icons.library_books), diff --git a/lib/editors/journal_editor.dart b/lib/editors/journal_editor.dart index ce4b1845..77c80bd1 100644 --- a/lib/editors/journal_editor.dart +++ b/lib/editors/journal_editor.dart @@ -103,6 +103,7 @@ class JournalEditorState extends State editor: widget, editorState: this, noteModified: _noteModified, + isNewNote: widget.isNewNote, parentFolder: note.parent, body: editor, ); diff --git a/lib/editors/markdown_editor.dart b/lib/editors/markdown_editor.dart index dcd6545e..b4e1b437 100644 --- a/lib/editors/markdown_editor.dart +++ b/lib/editors/markdown_editor.dart @@ -2,8 +2,6 @@ import 'dart:io'; import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; - import 'package:gitjournal/core/note.dart'; import 'package:gitjournal/core/notes_folder.dart'; import 'package:gitjournal/editors/common.dart'; @@ -12,11 +10,8 @@ import 'package:gitjournal/editors/heuristics.dart'; import 'package:gitjournal/editors/note_body_editor.dart'; import 'package:gitjournal/editors/note_title_editor.dart'; import 'package:gitjournal/error_reporting.dart'; -import 'package:gitjournal/settings.dart'; import 'package:gitjournal/utils/logger.dart'; import 'package:gitjournal/widgets/editor_scroll_view.dart'; -import 'package:gitjournal/widgets/markdown_toolbar.dart'; -import 'package:gitjournal/widgets/note_viewer.dart'; class MarkdownEditor extends StatefulWidget implements Editor { final Note note; @@ -70,31 +65,18 @@ class MarkdownEditorState extends State String _oldText; - bool editingMode = true; bool _noteModified; MarkdownEditorState(this.note) { _textController = TextEditingController(text: note.body); _titleTextController = TextEditingController(text: note.title); _oldText = note.body; - - var settings = Settings.instance; - if (settings.markdownDefaultView == SettingsMarkdownDefaultView.LastUsed) { - editingMode = - settings.markdownLastUsedView == SettingsMarkdownDefaultView.Edit; - } else { - editingMode = - settings.markdownDefaultView == SettingsMarkdownDefaultView.Edit; - } } @override void initState() { super.initState(); _noteModified = widget.noteModified; - if (widget.isNewNote) { - editingMode = true; - } } @override @@ -133,12 +115,7 @@ class MarkdownEditorState extends State ), ); - Widget body = editingMode - ? editor - : NoteViewer( - note: note, - parentFolder: widget.parentFolder, - ); + /* var settings = Provider.of(context); if (settings.experimentalMarkdownToolbar && editingMode) { @@ -154,43 +131,18 @@ class MarkdownEditorState extends State ), ); } - - var extraButton = IconButton( - icon: editingMode - ? const Icon(Icons.remove_red_eye) - : const Icon(Icons.edit), - onPressed: _switchMode, - ); + */ return EditorScaffold( editor: widget, editorState: this, - extraButton: extraButton, noteModified: _noteModified, + isNewNote: widget.isNewNote, parentFolder: note.parent, - allowEdits: editingMode, - body: body, + body: editor, ); } - void _switchMode() { - var settings = Provider.of(context); - - setState(() { - editingMode = !editingMode; - switch (editingMode) { - case true: - settings.markdownLastUsedView = SettingsMarkdownDefaultView.Edit; - break; - case false: - settings.markdownLastUsedView = SettingsMarkdownDefaultView.View; - break; - } - settings.save(); - _updateNote(); - }); - } - void _updateNote() { note.title = _titleTextController.text.trim(); note.body = _textController.text.trim(); diff --git a/lib/editors/raw_editor.dart b/lib/editors/raw_editor.dart index faa788a4..05e42d52 100644 --- a/lib/editors/raw_editor.dart +++ b/lib/editors/raw_editor.dart @@ -101,6 +101,7 @@ class RawEditorState extends State editor: widget, editorState: this, noteModified: _noteModified, + isNewNote: widget.isNewNote, parentFolder: note.parent, body: editor, ); diff --git a/lib/editors/scaffold.dart b/lib/editors/scaffold.dart index db4fdfd4..fedb823d 100644 --- a/lib/editors/scaffold.dart +++ b/lib/editors/scaffold.dart @@ -2,27 +2,29 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; +import 'package:gitjournal/core/note.dart'; import 'package:gitjournal/core/notes_folder_fs.dart'; import 'package:gitjournal/editors/common.dart'; import 'package:gitjournal/settings.dart'; +import 'package:gitjournal/widgets/note_viewer.dart'; class EditorScaffold extends StatefulWidget { final Editor editor; final EditorState editorState; final bool noteModified; + final bool isNewNote; final IconButton extraButton; final Widget body; final NotesFolderFS parentFolder; - final bool allowEdits; EditorScaffold({ @required this.editor, @required this.editorState, @required this.noteModified, + @required this.isNewNote, @required this.body, @required this.parentFolder, this.extraButton, - this.allowEdits = true, }); @override @@ -31,13 +33,33 @@ class EditorScaffold extends StatefulWidget { class _EditorScaffoldState extends State { var hideUIElements = false; + var editingMode = true; + Note note; @override void initState() { super.initState(); - hideUIElements = Settings.instance.zenMode; + var settings = Settings.instance; + + hideUIElements = settings.zenMode; widget.editorState.addListener(_editorChanged); + + if (settings.markdownDefaultView == SettingsMarkdownDefaultView.LastUsed) { + editingMode = + settings.markdownLastUsedView == SettingsMarkdownDefaultView.Edit; + } else { + editingMode = + settings.markdownDefaultView == SettingsMarkdownDefaultView.Edit; + } + + if (widget.isNewNote) { + editingMode = true; + } + + if (editingMode == false) { + note = widget.editorState.getNote(); + } } @override @@ -57,9 +79,33 @@ class _EditorScaffoldState extends State { } } + void _switchMode() { + var settings = Provider.of(context); + + setState(() { + editingMode = !editingMode; + switch (editingMode) { + case true: + settings.markdownLastUsedView = SettingsMarkdownDefaultView.Edit; + break; + case false: + settings.markdownLastUsedView = SettingsMarkdownDefaultView.View; + break; + } + settings.save(); + note = widget.editorState.getNote(); + }); + } + @override Widget build(BuildContext context) { var settings = Provider.of(context); + Widget body = editingMode + ? widget.body + : NoteViewer( + note: note, + parentFolder: widget.parentFolder, + ); return Scaffold( body: GestureDetector( @@ -80,16 +126,18 @@ class _EditorScaffoldState extends State { editorState: widget.editorState, noteModified: widget.noteModified, extraButton: widget.extraButton, + allowEdits: editingMode, + onEditingModeChange: _switchMode, ), ), - Expanded(child: widget.body), + Expanded(child: body), _AnimatedOpacityIgnorePointer( visible: !hideUIElements, child: EditorBottomBar( editor: widget.editor, editorState: widget.editorState, parentFolder: widget.parentFolder, - allowEdits: widget.allowEdits, + allowEdits: editingMode, zenMode: settings.zenMode, onZenModeChanged: () { setState(() {