package org.erlide.ui.editors.erl.autoedit; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Group; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; import org.erlide.ui.prefs.plugin.ErlEditorMessages; import org.erlide.ui.prefs.plugin.ErlidePreferencePage; import org.erlide.ui.prefs.plugin.internal.ScrolledPageContent; public class SmartTypingPreferencePage extends ErlidePreferencePage implements IWorkbenchPreferencePage { public SmartTypingPreferencePage() { super(); setDescription(ErlEditorMessages.SmartTypingPrefs_Desc); } public static final String SMART_TYPING_KEY = "smartTyping"; //$NON-NLS-1$ private static final String[] SMART_TYPING_KEYS = new String[] { "strings", "atoms", //$NON-NLS-1$ //$NON-NLS-2$ "braces", "brackets", //$NON-NLS-1$ //$NON-NLS-2$ "parens", "embraceSelection", "pasteReindent" }; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ // public static final String AUTO_NL_KEY = "indentation"; //$NON-NLS-1$ public static final String[] AUTO_NL_KEYS = { "semicolon_nl", "dot_nl", "arrow_nl", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ "comma_nl" }; //$NON-NLS-1$ public static final int STRINGS = 0; public static final int ATOMS = 1; public static final int BRACES = 2; public static final int BRACKETS = 3; public static final int PARENS = 4; public static final int EMBRACE_SELECTION = 5; public static final int PASTE_REINDENT = 6; private static final String[] SMART_TYPING_DEFAULTS = new String[] { "1", //$NON-NLS-1$ "0", "1", "1", "1", "1", "1" }; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ private static final String[] AUTO_NL_DEFAULTS = new String[] { "0", "0", //$NON-NLS-1$ //$NON-NLS-2$ "0", "0" }; //$NON-NLS-1$ //$NON-NLS-2$ private final List<Button> buttons = new ArrayList<>(); private final List<Button> autoNLButtons = new ArrayList<>(); @Override protected Control createContents(final Composite parent) { final ScrolledPageContent scrolled = new ScrolledPageContent(parent, SWT.H_SCROLL | SWT.V_SCROLL); scrolled.setExpandHorizontal(true); scrolled.setExpandVertical(true); final Composite control = new Composite(scrolled, SWT.NONE); final GridLayout layout = new GridLayout(); layout.marginWidth = 0; layout.marginHeight = 0; control.setLayout(layout); Composite composite; composite = createSubsection(control, ErlEditorMessages.SmartTypingPrefs_AutomaticallyClose); addAutoclosingSection(composite); // composite = createSubsection(control,"Automove"); // addAutopositionSection(composite); // composite = createSubsection(control, "Tabs"); // addTabSection(composite); composite = createSubsection(control, ErlEditorMessages.SmartTypingPrefs_WhenPasting); addPasteSection(composite); // composite = createSubsection(control, "strings"); // addStringsSection(composite); composite = createSubsection(control, ErlEditorMessages.SmartTypingPrefs_autoNewLine); addAutoNLSection(composite); scrolled.setContent(control); final Point size = control.computeSize(SWT.DEFAULT, SWT.DEFAULT); scrolled.setMinSize(size.x, size.y); setToPreferences(); return scrolled; } private void addPasteSection(final Composite composite) { buttons.add(addCheckBox(composite, ErlEditorMessages.SmartTypingPrefs_AdjustIndentation)); } protected Composite createSubsection(final Composite parent, final String label) { final Group group = new Group(parent, SWT.SHADOW_NONE); group.setText(label); final GridData data = new GridData(SWT.FILL, SWT.CENTER, true, false); group.setLayoutData(data); final GridLayout layout = new GridLayout(); layout.numColumns = 1; group.setLayout(layout); return group; } private void addAutoclosingSection(final Composite composite) { final String strings[] = { ErlEditorMessages.SmartTypingPrefs_Strings, ErlEditorMessages.SmartTypingPrefs_atoms, ErlEditorMessages.SmartTypingPrefs_Braces, ErlEditorMessages.SmartTypingPrefs_Brackets, ErlEditorMessages.SmartTypingPrefs_Parens, ErlEditorMessages.SmartTypingPrefs_EmbraceSelection }; addCheckboxes(composite, strings, buttons); } private void addAutoNLSection(final Composite composite) { final String[] nlStrings = { ErlEditorMessages.Prefs_Semicolon_nl, ErlEditorMessages.Prefs_Dot_nl, ErlEditorMessages.Prefs_Arrow_nl, ErlEditorMessages.Prefs_Comma_nl }; addCheckboxes(composite, nlStrings, autoNLButtons); } @Override public void init(final IWorkbench workbench) { } /* * @see PreferencePage#performDefaults() */ @Override protected void performDefaults() { setToDefaults(SMART_TYPING_KEYS, SMART_TYPING_DEFAULTS, buttons); setToDefaults(AUTO_NL_KEYS, AUTO_NL_DEFAULTS, autoNLButtons); super.performDefaults(); } @Override protected void putPreferences() { putBooleanPreferences(SMART_TYPING_KEYS, buttons); putBooleanPreferences(AUTO_NL_KEYS, autoNLButtons); } private void setToPreferences() { setToPreferences(SMART_TYPING_KEYS, SMART_TYPING_DEFAULTS, buttons); setToPreferences(AUTO_NL_KEYS, AUTO_NL_DEFAULTS, autoNLButtons); } public static void addAutoNLKeysAndPrefs(final Map<String, String> prefs) { addKeysAndPrefs(SMART_TYPING_KEY, AUTO_NL_KEYS, AUTO_NL_DEFAULTS, prefs); } public static List<Boolean> getBracketInserterPreferences() { return getBooleanPreferences(getPreferences(SMART_TYPING_KEY, SMART_TYPING_KEYS, SMART_TYPING_DEFAULTS)); } @Override protected String getDialogPreferenceKey() { return SMART_TYPING_KEY; } }