From afe94da638a4ad428e1c576c63a2b415ab5b77c3 Mon Sep 17 00:00:00 2001 From: Vishesh Handa Date: Thu, 16 Apr 2020 13:16:02 +0200 Subject: [PATCH] MarkdownEditor: Allow the default view to be configurable Fixes #98 --- lib/editors/markdown_editor.dart | 4 +++ lib/screens/settings_editors.dart | 22 ++++++++++--- lib/settings.dart | 55 +++++++++++++++++++++++++++++++ 3 files changed, 76 insertions(+), 5 deletions(-) diff --git a/lib/editors/markdown_editor.dart b/lib/editors/markdown_editor.dart index 1418d115..03205c37 100644 --- a/lib/editors/markdown_editor.dart +++ b/lib/editors/markdown_editor.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import 'package:gitjournal/core/note.dart'; import 'package:gitjournal/editors/common.dart'; import 'package:gitjournal/editors/note_title_editor.dart'; +import 'package:gitjournal/settings.dart'; import 'package:gitjournal/widgets/note_viewer.dart'; class MarkdownEditor extends StatefulWidget implements Editor { @@ -51,6 +52,9 @@ class MarkdownEditorState extends State implements EditorState { MarkdownEditorState(this.note) { _textController = TextEditingController(text: note.body); _titleTextController = TextEditingController(text: note.title); + + editingMode = Settings.instance.markdownDefaultView == + SettingsMarkdownDefaultView.Edit; } @override diff --git a/lib/screens/settings_editors.dart b/lib/screens/settings_editors.dart index 74a3c798..f13d507d 100644 --- a/lib/screens/settings_editors.dart +++ b/lib/screens/settings_editors.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:gitjournal/screens/settings_screen.dart'; import 'package:gitjournal/settings.dart'; import 'package:gitjournal/screens/settings_widgets.dart'; @@ -12,7 +13,7 @@ class SettingsEditorsScreenState extends State { Widget build(BuildContext context) { var settings = Settings.instance; - var body = Column(children: [ + var body = ListView(children: [ ListPreference( title: "Default Editor", currentOption: settings.defaultEditor.toPublicString(), @@ -25,6 +26,20 @@ class SettingsEditorsScreenState extends State { setState(() {}); }, ), + SettingsHeader("Markdown Editor Settings"), + ListPreference( + title: "Default State", + currentOption: settings.markdownDefaultView.toPublicString(), + options: SettingsMarkdownDefaultView.options + .map((f) => f.toPublicString()) + .toList(), + onChange: (String publicStr) { + var val = SettingsMarkdownDefaultView.fromPublicString(publicStr); + Settings.instance.markdownDefaultView = val; + Settings.instance.save(); + setState(() {}); + }, + ), ]); return Scaffold( @@ -37,10 +52,7 @@ class SettingsEditorsScreenState extends State { }, ), ), - body: Padding( - padding: const EdgeInsets.all(16.0), - child: body, - ), + body: body, ); } } diff --git a/lib/settings.dart b/lib/settings.dart index 92220541..27702aa0 100644 --- a/lib/settings.dart +++ b/lib/settings.dart @@ -39,6 +39,9 @@ class Settings { String _pseudoId; String get pseudoId => _pseudoId; + SettingsMarkdownDefaultView markdownDefaultView = + SettingsMarkdownDefaultView.Default; + void load(SharedPreferences pref) { gitAuthor = pref.getString("gitAuthor") ?? gitAuthor; gitAuthorEmail = pref.getString("gitAuthorEmail") ?? gitAuthorEmail; @@ -64,6 +67,8 @@ class Settings { SettingsEditorType.fromInternalString(pref.getString("defaultEditor")); defaultView = SettingsFolderViewType.fromInternalString( pref.getString("defaultView")); + markdownDefaultView = SettingsMarkdownDefaultView.fromInternalString( + pref.getString("markdownDefaultView")); showNoteSummary = pref.getBool("showNoteSummary") ?? showNoteSummary; folderViewHeaderType = @@ -94,6 +99,8 @@ class Settings { pref.setString("sortingMode", sortingMode.toInternalString()); pref.setString("defaultEditor", defaultEditor.toInternalString()); pref.setString("defaultView", defaultView.toInternalString()); + pref.setString( + "markdownDefaultView", markdownDefaultView.toInternalString()); pref.setBool("showNoteSummary", showNoteSummary); pref.setString("folderViewHeaderType", folderViewHeaderType); pref.setInt("settingsVersion", version); @@ -124,6 +131,7 @@ class Settings { "version": version, "proMode": proMode, 'pseudoId': pseudoId, + 'markdownDefaultView': markdownDefaultView, }; } @@ -399,3 +407,50 @@ class SettingsFolderViewType { return SettingsFolderViewType.Default; } } + +class SettingsMarkdownDefaultView { + static const Edit = SettingsMarkdownDefaultView("Edit"); + static const View = SettingsMarkdownDefaultView("View"); + static const Default = Edit; + + final String _str; + const SettingsMarkdownDefaultView(this._str); + + String toInternalString() { + return _str; + } + + String toPublicString() { + return _str; + } + + static const options = [ + Edit, + View, + ]; + + static SettingsMarkdownDefaultView fromInternalString(String str) { + for (var opt in options) { + if (opt.toInternalString() == str) { + return opt; + } + } + return Default; + } + + static SettingsMarkdownDefaultView fromPublicString(String str) { + for (var opt in options) { + if (opt.toPublicString() == str) { + return opt; + } + } + return Default; + } + + @override + String toString() { + assert( + false, "SettingsMarkdownDefaultView toString should never be called"); + return ""; + } +}