]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/winterwell.markdown/src/winterwell/markdown/preferences/MarkdownPreferencePage.java
migrated to svn revision 33108
[simantics/platform.git] / bundles / winterwell.markdown / src / winterwell / markdown / preferences / MarkdownPreferencePage.java
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 (file)
index 0000000..36dadbc
--- /dev/null
@@ -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 <samp>FieldEditorPreferencePage</samp>, 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.
+ * <p>
+ * 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