mirror of
https://github.com/GitJournal/GitJournal.git
synced 2025-06-29 18:38:36 +08:00
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.
This commit is contained in:
@ -174,6 +174,7 @@ class ChecklistEditorState extends State<ChecklistEditor>
|
|||||||
editor: widget,
|
editor: widget,
|
||||||
editorState: this,
|
editorState: this,
|
||||||
noteModified: _noteModified,
|
noteModified: _noteModified,
|
||||||
|
isNewNote: widget.isNewNote,
|
||||||
parentFolder: widget.note.parent,
|
parentFolder: widget.note.parent,
|
||||||
body: Column(
|
body: Column(
|
||||||
children: <Widget>[
|
children: <Widget>[
|
||||||
|
@ -41,12 +41,16 @@ class EditorAppBar extends StatelessWidget implements PreferredSizeWidget {
|
|||||||
final EditorState editorState;
|
final EditorState editorState;
|
||||||
final bool noteModified;
|
final bool noteModified;
|
||||||
final IconButton extraButton;
|
final IconButton extraButton;
|
||||||
|
final bool allowEdits;
|
||||||
|
final Func0<void> onEditingModeChange;
|
||||||
|
|
||||||
EditorAppBar({
|
EditorAppBar({
|
||||||
Key key,
|
Key key,
|
||||||
@required this.editor,
|
@required this.editor,
|
||||||
@required this.editorState,
|
@required this.editorState,
|
||||||
@required this.noteModified,
|
@required this.noteModified,
|
||||||
|
@required this.allowEdits,
|
||||||
|
@required this.onEditingModeChange,
|
||||||
this.extraButton,
|
this.extraButton,
|
||||||
}) : preferredSize = const Size.fromHeight(kToolbarHeight),
|
}) : preferredSize = const Size.fromHeight(kToolbarHeight),
|
||||||
super(key: key);
|
super(key: key);
|
||||||
@ -66,6 +70,12 @@ class EditorAppBar extends StatelessWidget implements PreferredSizeWidget {
|
|||||||
),
|
),
|
||||||
actions: <Widget>[
|
actions: <Widget>[
|
||||||
if (extraButton != null) extraButton,
|
if (extraButton != null) extraButton,
|
||||||
|
IconButton(
|
||||||
|
icon: allowEdits
|
||||||
|
? const Icon(Icons.remove_red_eye)
|
||||||
|
: const Icon(Icons.edit),
|
||||||
|
onPressed: onEditingModeChange,
|
||||||
|
),
|
||||||
IconButton(
|
IconButton(
|
||||||
key: const ValueKey("EditorSelector"),
|
key: const ValueKey("EditorSelector"),
|
||||||
icon: const Icon(Icons.library_books),
|
icon: const Icon(Icons.library_books),
|
||||||
|
@ -103,6 +103,7 @@ class JournalEditorState extends State<JournalEditor>
|
|||||||
editor: widget,
|
editor: widget,
|
||||||
editorState: this,
|
editorState: this,
|
||||||
noteModified: _noteModified,
|
noteModified: _noteModified,
|
||||||
|
isNewNote: widget.isNewNote,
|
||||||
parentFolder: note.parent,
|
parentFolder: note.parent,
|
||||||
body: editor,
|
body: editor,
|
||||||
);
|
);
|
||||||
|
@ -2,8 +2,6 @@ import 'dart:io';
|
|||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
import 'package:provider/provider.dart';
|
|
||||||
|
|
||||||
import 'package:gitjournal/core/note.dart';
|
import 'package:gitjournal/core/note.dart';
|
||||||
import 'package:gitjournal/core/notes_folder.dart';
|
import 'package:gitjournal/core/notes_folder.dart';
|
||||||
import 'package:gitjournal/editors/common.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_body_editor.dart';
|
||||||
import 'package:gitjournal/editors/note_title_editor.dart';
|
import 'package:gitjournal/editors/note_title_editor.dart';
|
||||||
import 'package:gitjournal/error_reporting.dart';
|
import 'package:gitjournal/error_reporting.dart';
|
||||||
import 'package:gitjournal/settings.dart';
|
|
||||||
import 'package:gitjournal/utils/logger.dart';
|
import 'package:gitjournal/utils/logger.dart';
|
||||||
import 'package:gitjournal/widgets/editor_scroll_view.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 {
|
class MarkdownEditor extends StatefulWidget implements Editor {
|
||||||
final Note note;
|
final Note note;
|
||||||
@ -70,31 +65,18 @@ class MarkdownEditorState extends State<MarkdownEditor>
|
|||||||
|
|
||||||
String _oldText;
|
String _oldText;
|
||||||
|
|
||||||
bool editingMode = true;
|
|
||||||
bool _noteModified;
|
bool _noteModified;
|
||||||
|
|
||||||
MarkdownEditorState(this.note) {
|
MarkdownEditorState(this.note) {
|
||||||
_textController = TextEditingController(text: note.body);
|
_textController = TextEditingController(text: note.body);
|
||||||
_titleTextController = TextEditingController(text: note.title);
|
_titleTextController = TextEditingController(text: note.title);
|
||||||
_oldText = note.body;
|
_oldText = note.body;
|
||||||
|
|
||||||
var settings = Settings.instance;
|
|
||||||
if (settings.markdownDefaultView == SettingsMarkdownDefaultView.LastUsed) {
|
|
||||||
editingMode =
|
|
||||||
settings.markdownLastUsedView == SettingsMarkdownDefaultView.Edit;
|
|
||||||
} else {
|
|
||||||
editingMode =
|
|
||||||
settings.markdownDefaultView == SettingsMarkdownDefaultView.Edit;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
_noteModified = widget.noteModified;
|
_noteModified = widget.noteModified;
|
||||||
if (widget.isNewNote) {
|
|
||||||
editingMode = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@ -133,12 +115,7 @@ class MarkdownEditorState extends State<MarkdownEditor>
|
|||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
Widget body = editingMode
|
/*
|
||||||
? editor
|
|
||||||
: NoteViewer(
|
|
||||||
note: note,
|
|
||||||
parentFolder: widget.parentFolder,
|
|
||||||
);
|
|
||||||
|
|
||||||
var settings = Provider.of<Settings>(context);
|
var settings = Provider.of<Settings>(context);
|
||||||
if (settings.experimentalMarkdownToolbar && editingMode) {
|
if (settings.experimentalMarkdownToolbar && editingMode) {
|
||||||
@ -154,43 +131,18 @@ class MarkdownEditorState extends State<MarkdownEditor>
|
|||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
var extraButton = IconButton(
|
|
||||||
icon: editingMode
|
|
||||||
? const Icon(Icons.remove_red_eye)
|
|
||||||
: const Icon(Icons.edit),
|
|
||||||
onPressed: _switchMode,
|
|
||||||
);
|
|
||||||
|
|
||||||
return EditorScaffold(
|
return EditorScaffold(
|
||||||
editor: widget,
|
editor: widget,
|
||||||
editorState: this,
|
editorState: this,
|
||||||
extraButton: extraButton,
|
|
||||||
noteModified: _noteModified,
|
noteModified: _noteModified,
|
||||||
|
isNewNote: widget.isNewNote,
|
||||||
parentFolder: note.parent,
|
parentFolder: note.parent,
|
||||||
allowEdits: editingMode,
|
body: editor,
|
||||||
body: body,
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void _switchMode() {
|
|
||||||
var settings = Provider.of<Settings>(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() {
|
void _updateNote() {
|
||||||
note.title = _titleTextController.text.trim();
|
note.title = _titleTextController.text.trim();
|
||||||
note.body = _textController.text.trim();
|
note.body = _textController.text.trim();
|
||||||
|
@ -101,6 +101,7 @@ class RawEditorState extends State<RawEditor>
|
|||||||
editor: widget,
|
editor: widget,
|
||||||
editorState: this,
|
editorState: this,
|
||||||
noteModified: _noteModified,
|
noteModified: _noteModified,
|
||||||
|
isNewNote: widget.isNewNote,
|
||||||
parentFolder: note.parent,
|
parentFolder: note.parent,
|
||||||
body: editor,
|
body: editor,
|
||||||
);
|
);
|
||||||
|
@ -2,27 +2,29 @@ import 'package:flutter/material.dart';
|
|||||||
|
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
|
import 'package:gitjournal/core/note.dart';
|
||||||
import 'package:gitjournal/core/notes_folder_fs.dart';
|
import 'package:gitjournal/core/notes_folder_fs.dart';
|
||||||
import 'package:gitjournal/editors/common.dart';
|
import 'package:gitjournal/editors/common.dart';
|
||||||
import 'package:gitjournal/settings.dart';
|
import 'package:gitjournal/settings.dart';
|
||||||
|
import 'package:gitjournal/widgets/note_viewer.dart';
|
||||||
|
|
||||||
class EditorScaffold extends StatefulWidget {
|
class EditorScaffold extends StatefulWidget {
|
||||||
final Editor editor;
|
final Editor editor;
|
||||||
final EditorState editorState;
|
final EditorState editorState;
|
||||||
final bool noteModified;
|
final bool noteModified;
|
||||||
|
final bool isNewNote;
|
||||||
final IconButton extraButton;
|
final IconButton extraButton;
|
||||||
final Widget body;
|
final Widget body;
|
||||||
final NotesFolderFS parentFolder;
|
final NotesFolderFS parentFolder;
|
||||||
final bool allowEdits;
|
|
||||||
|
|
||||||
EditorScaffold({
|
EditorScaffold({
|
||||||
@required this.editor,
|
@required this.editor,
|
||||||
@required this.editorState,
|
@required this.editorState,
|
||||||
@required this.noteModified,
|
@required this.noteModified,
|
||||||
|
@required this.isNewNote,
|
||||||
@required this.body,
|
@required this.body,
|
||||||
@required this.parentFolder,
|
@required this.parentFolder,
|
||||||
this.extraButton,
|
this.extraButton,
|
||||||
this.allowEdits = true,
|
|
||||||
});
|
});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@ -31,13 +33,33 @@ class EditorScaffold extends StatefulWidget {
|
|||||||
|
|
||||||
class _EditorScaffoldState extends State<EditorScaffold> {
|
class _EditorScaffoldState extends State<EditorScaffold> {
|
||||||
var hideUIElements = false;
|
var hideUIElements = false;
|
||||||
|
var editingMode = true;
|
||||||
|
Note note;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
|
|
||||||
hideUIElements = Settings.instance.zenMode;
|
var settings = Settings.instance;
|
||||||
|
|
||||||
|
hideUIElements = settings.zenMode;
|
||||||
widget.editorState.addListener(_editorChanged);
|
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
|
@override
|
||||||
@ -57,9 +79,33 @@ class _EditorScaffoldState extends State<EditorScaffold> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _switchMode() {
|
||||||
|
var settings = Provider.of<Settings>(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
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
var settings = Provider.of<Settings>(context);
|
var settings = Provider.of<Settings>(context);
|
||||||
|
Widget body = editingMode
|
||||||
|
? widget.body
|
||||||
|
: NoteViewer(
|
||||||
|
note: note,
|
||||||
|
parentFolder: widget.parentFolder,
|
||||||
|
);
|
||||||
|
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
body: GestureDetector(
|
body: GestureDetector(
|
||||||
@ -80,16 +126,18 @@ class _EditorScaffoldState extends State<EditorScaffold> {
|
|||||||
editorState: widget.editorState,
|
editorState: widget.editorState,
|
||||||
noteModified: widget.noteModified,
|
noteModified: widget.noteModified,
|
||||||
extraButton: widget.extraButton,
|
extraButton: widget.extraButton,
|
||||||
|
allowEdits: editingMode,
|
||||||
|
onEditingModeChange: _switchMode,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
Expanded(child: widget.body),
|
Expanded(child: body),
|
||||||
_AnimatedOpacityIgnorePointer(
|
_AnimatedOpacityIgnorePointer(
|
||||||
visible: !hideUIElements,
|
visible: !hideUIElements,
|
||||||
child: EditorBottomBar(
|
child: EditorBottomBar(
|
||||||
editor: widget.editor,
|
editor: widget.editor,
|
||||||
editorState: widget.editorState,
|
editorState: widget.editorState,
|
||||||
parentFolder: widget.parentFolder,
|
parentFolder: widget.parentFolder,
|
||||||
allowEdits: widget.allowEdits,
|
allowEdits: editingMode,
|
||||||
zenMode: settings.zenMode,
|
zenMode: settings.zenMode,
|
||||||
onZenModeChanged: () {
|
onZenModeChanged: () {
|
||||||
setState(() {
|
setState(() {
|
||||||
|
Reference in New Issue
Block a user