X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Fwinterwell.markdown%2Fsrc%2Fwinterwell%2Fmarkdown%2Fpreferences%2FMarkdownPreferencePage.java;fp=bundles%2Fwinterwell.markdown%2Fsrc%2Fwinterwell%2Fmarkdown%2Fpreferences%2FMarkdownPreferencePage.java;h=36dadbc4c0fef10f3d2e3dfaf5117ddefd131df7;hb=2531cdf245f42bce854d43f4d49a23983c79db96;hp=0000000000000000000000000000000000000000;hpb=857dbc869796d772864327ce02f19dc252b159fc;p=simantics%2Fplatform.git diff --git a/bundles/winterwell.markdown/src/winterwell/markdown/preferences/MarkdownPreferencePage.java b/bundles/winterwell.markdown/src/winterwell/markdown/preferences/MarkdownPreferencePage.java new file mode 100644 index 000000000..36dadbc4c --- /dev/null +++ b/bundles/winterwell.markdown/src/winterwell/markdown/preferences/MarkdownPreferencePage.java @@ -0,0 +1,214 @@ +package winterwell.markdown.preferences; + +import org.eclipse.jface.preference.BooleanFieldEditor; +import org.eclipse.jface.preference.ColorFieldEditor; +import org.eclipse.jface.preference.FieldEditor; +import org.eclipse.jface.preference.FieldEditorPreferencePage; +import org.eclipse.jface.preference.IPreferenceStore; +import org.eclipse.jface.preference.PreferenceConverter; +import org.eclipse.jface.preference.StringFieldEditor; +import org.eclipse.swt.graphics.RGB; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.ui.IWorkbench; +import org.eclipse.ui.IWorkbenchPreferencePage; + +import winterwell.markdown.Activator; + +/** + * This class represents a preference page that + * is contributed to the Preferences dialog. By + * subclassing FieldEditorPreferencePage, we + * can use the field support built into JFace that allows + * us to create a page that is small and knows how to + * save, restore and apply itself. + *

+ * This page is used to modify preferences only. They + * are stored in the preference store that belongs to + * the main plug-in class. That way, preferences can + * be accessed directly via the preference store. + */ + +public class MarkdownPreferencePage + extends FieldEditorPreferencePage + implements IWorkbenchPreferencePage { + + public static final String PREF_FOLDING = "Pref_Folding"; + public static final String PREF_WORD_WRAP = "Pref_WordWrap"; + public static final String PREF_TASK_TAGS = "Pref_TaskTagsOn"; + public static final String PREF_TASK_TAGS_DEFINED = "Pref_TaskTags"; + public static final String PREF_SECTION_NUMBERS = "Pref_SectionNumbers"; + + public static final String PREF_MARKDOWN_COMMAND = "Pref_Markdown_Command"; + private static final String MARKDOWNJ = "(use built-in MarkdownJ converter)"; + + + public static final String PREF_DEFUALT = "Pref_Default"; + public static final String PREF_COMMENT = "Pref_Comment"; + public static final String PREF_HEADER = "Pref_Header"; + public static final String PREF_LINK = "Pref_Link"; + public static final String PREF_CODE = "Pref_Code"; + public static final String PREF_CODE_BG = "Pref_Code_Background"; + + public static final String PREF_GITHUB_SYNTAX = "Pref_Github_Syntax"; + public static final String PREF_MULTIMARKDOWN_METADATA = "Pref_MultiMarkdown_Metadata"; + + private static final RGB DEF_DEFAULT = new RGB(0, 0, 0); + private static final RGB DEF_COMMENT = new RGB(128, 0, 0); + private static final RGB DEF_HEADER = new RGB(0, 128, 0); + private static final RGB DEF_LINK = new RGB(106, 131, 199); + private static final RGB DEF_CODE = new RGB(0, 0, 0); + private static final RGB DEF_CODE_BG = new RGB(244,244,244); + + public MarkdownPreferencePage() { + super(GRID); + IPreferenceStore pStore = Activator.getDefault().getPreferenceStore(); + setDefaultPreferences(pStore); + setPreferenceStore(pStore); + setDescription("Settings for the Markdown text editor. See also the general text editor preferences."); + } + + public static void setDefaultPreferences(IPreferenceStore pStore) { + pStore.setDefault(PREF_WORD_WRAP, false); + pStore.setDefault(PREF_FOLDING, true); + pStore.setDefault(PREF_TASK_TAGS, true); + pStore.setDefault(PREF_TASK_TAGS_DEFINED, "TODO,FIXME,??"); + pStore.setDefault(PREF_MARKDOWN_COMMAND, MARKDOWNJ); + pStore.setDefault(PREF_SECTION_NUMBERS, true); + pStore.setDefault(PREF_GITHUB_SYNTAX, true); + pStore.setDefault(PREF_MULTIMARKDOWN_METADATA, false); + + PreferenceConverter.setDefault(pStore, PREF_DEFUALT, DEF_DEFAULT); + PreferenceConverter.setDefault(pStore, PREF_COMMENT, DEF_COMMENT); + PreferenceConverter.setDefault(pStore, PREF_HEADER, DEF_HEADER); + PreferenceConverter.setDefault(pStore, PREF_LINK, DEF_LINK); + PreferenceConverter.setDefault(pStore, PREF_CODE, DEF_CODE); + PreferenceConverter.setDefault(pStore, PREF_CODE_BG, DEF_CODE_BG); + } + + /** + * Creates the field editors. Field editors are abstractions of + * the common GUI blocks needed to manipulate various types + * of preferences. Each field editor knows how to save and + * restore itself. + */ + @Override + public void createFieldEditors() { + // Word wrap + BooleanFieldEditor fd = new BooleanFieldEditor(PREF_WORD_WRAP, + "Soft word wrapping \r\n" ++"Note: may cause line numbers and related \r\n" + + "functionality to act a bit strangely", + getFieldEditorParent()); + addField(fd); + // Task tags + fd = new BooleanFieldEditor(PREF_TASK_TAGS, + "Manage tasks using task tags \r\n" + + "If true, this will add and delete tags in sync with edits.", + getFieldEditorParent()); + addField(fd); + StringFieldEditor tags = new StringFieldEditor(PREF_TASK_TAGS_DEFINED, + "Task tags\nComma separated list of recognised task tags.", getFieldEditorParent()); + addField(tags); + // Code folding + fd = new BooleanFieldEditor(PREF_FOLDING, + "Document folding, a.k.a. outline support", + getFieldEditorParent()); + addField(fd); + // Command line +// addField(new DummyField() { +// protected void makeComponent(Composite parent) { +// Label label = new Label(parent, 0); +// label.setText("Hello!"); +// GridData gd = new GridData(100, 20); +// label.setLayoutData(gd); +// } +// }); + StringFieldEditor cmd = new StringFieldEditor(PREF_MARKDOWN_COMMAND, + "UNSTABLE: Command-line to run Markdown.\r\n" + + "This should take in a file and output to std-out.\n" + + "Leave blank to use the built-in Java converter.", getFieldEditorParent()); + addField(cmd); + + ColorFieldEditor def = new ColorFieldEditor(PREF_DEFUALT, "Default text", getFieldEditorParent()); + addField(def); + + ColorFieldEditor com = new ColorFieldEditor(PREF_COMMENT, "Comment", getFieldEditorParent()); + addField(com); + + ColorFieldEditor link = new ColorFieldEditor(PREF_LINK, "Link", getFieldEditorParent()); + addField(link); + + ColorFieldEditor head = new ColorFieldEditor(PREF_HEADER, "Header and List indicator", getFieldEditorParent()); + addField(head); + + ColorFieldEditor code = new ColorFieldEditor(PREF_CODE, "Code", getFieldEditorParent()); + addField(code); + + ColorFieldEditor codeBg = new ColorFieldEditor(PREF_CODE_BG, "Code Background", getFieldEditorParent()); + addField(codeBg); + + /* + * Fields for the preview window + */ + + // Github Syntax support + fd = new BooleanFieldEditor(PREF_GITHUB_SYNTAX, + "Support Github Syntax", + getFieldEditorParent()); + addField(fd); + + // Multi-Markdown support + fd = new BooleanFieldEditor(PREF_MULTIMARKDOWN_METADATA, + "Support Multi-Markdown Metadata", + getFieldEditorParent()); + addField(fd); + } + + /* (non-Javadoc) + * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench) + */ + public void init(IWorkbench workbench) { + + } + + public static boolean wordWrap() { + IPreferenceStore pStore = Activator.getDefault().getPreferenceStore(); + if (! pStore.contains(MarkdownPreferencePage.PREF_WORD_WRAP)) { + return false; + } + return pStore.getBoolean(MarkdownPreferencePage.PREF_WORD_WRAP); + } + +} + +abstract class DummyField extends FieldEditor { + @Override + protected void adjustForNumColumns(int numColumns) { + // do nothing + } + @Override + protected void doFillIntoGrid(Composite parent, int numColumns) { + makeComponent(parent); + } + abstract protected void makeComponent(Composite parent); + + @Override + protected void doLoad() { + // + } + @Override + protected void doLoadDefault() { + // + } + + @Override + protected void doStore() { + // + } + + @Override + public int getNumberOfControls() { + return 1; + } + +} \ No newline at end of file