/******************************************************************************* * Copyright (c) 2007, 2008 Edgar Espina. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * *******************************************************************************/ package org.deved.antlride.internal.ui.preferences; import java.util.ArrayList; import java.util.List; import org.eclipse.dltk.ui.CodeFormatterConstants; import org.eclipse.dltk.ui.PreferenceConstants; import org.eclipse.dltk.ui.preferences.AbstractConfigurationBlock; import org.eclipse.dltk.ui.preferences.FormatterMessages; import org.eclipse.dltk.ui.preferences.OverlayPreferenceStore; import org.eclipse.dltk.ui.preferences.PreferencesMessages; import org.eclipse.jface.preference.PreferencePage; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; public class AntlrEditorBlock extends AbstractConfigurationBlock { private boolean smartDisabled = false; boolean tabAlwaysIndent = false; public AntlrEditorBlock(PreferencePage mainPreferencePage, OverlayPreferenceStore store) { super(store, mainPreferencePage); getPreferenceStore().addKeys(createOverlayStoreKeys()); } public AntlrEditorBlock(PreferencePage mainPreferencePage, OverlayPreferenceStore store, boolean disableSmart) { super(store, mainPreferencePage); getPreferenceStore().addKeys(createOverlayStoreKeys()); this.smartDisabled = disableSmart; } public AntlrEditorBlock(PreferencePage mainPreferencePage, OverlayPreferenceStore store, boolean disableSmart, boolean tabAlwaysIndent) { super(store, mainPreferencePage); getPreferenceStore().addKeys(createOverlayStoreKeys()); this.smartDisabled = disableSmart; this.tabAlwaysIndent = tabAlwaysIndent; } private OverlayPreferenceStore.OverlayKey[] createOverlayStoreKeys() { List<OverlayPreferenceStore.OverlayKey> overlayKeys = new ArrayList<OverlayPreferenceStore.OverlayKey>(); overlayKeys.add(new OverlayPreferenceStore.OverlayKey( OverlayPreferenceStore.BOOLEAN, PreferenceConstants.EDITOR_SMART_HOME_END)); overlayKeys.add(new OverlayPreferenceStore.OverlayKey( OverlayPreferenceStore.BOOLEAN, PreferenceConstants.EDITOR_SUB_WORD_NAVIGATION)); overlayKeys.add(new OverlayPreferenceStore.OverlayKey( OverlayPreferenceStore.BOOLEAN, PreferenceConstants.EDITOR_SMART_INDENT)); // Automatically close overlayKeys.add(new OverlayPreferenceStore.OverlayKey( OverlayPreferenceStore.BOOLEAN, PreferenceConstants.EDITOR_CLOSE_STRINGS)); overlayKeys.add(new OverlayPreferenceStore.OverlayKey( OverlayPreferenceStore.BOOLEAN, PreferenceConstants.EDITOR_CLOSE_BRACKETS)); overlayKeys.add(new OverlayPreferenceStore.OverlayKey( OverlayPreferenceStore.BOOLEAN, PreferenceConstants.EDITOR_CLOSE_BRACES)); // indentation overlayKeys.add(new OverlayPreferenceStore.OverlayKey( OverlayPreferenceStore.STRING, CodeFormatterConstants.FORMATTER_TAB_CHAR)); overlayKeys.add(new OverlayPreferenceStore.OverlayKey( OverlayPreferenceStore.INT, CodeFormatterConstants.FORMATTER_TAB_SIZE)); overlayKeys.add(new OverlayPreferenceStore.OverlayKey( OverlayPreferenceStore.INT, CodeFormatterConstants.FORMATTER_INDENTATION_SIZE)); overlayKeys.add(new OverlayPreferenceStore.OverlayKey( OverlayPreferenceStore.BOOLEAN, PreferenceConstants.EDITOR_TAB_ALWAYS_INDENT)); OverlayPreferenceStore.OverlayKey[] keys = overlayKeys .toArray(new OverlayPreferenceStore.OverlayKey[overlayKeys .size()]); overlayKeys.clear(); return keys; } /** * Creates page for appearance preferences. * * @param parent * the parent composite * @return the control for the preference page */ public Control createControl(Composite parent) { initializeDialogUnits(parent); Composite control = new Composite(parent, SWT.NONE); control.setLayout(new GridLayout()); Composite composite; if (!smartDisabled) { composite = createSubsection(control, null, PreferencesMessages.EditorPreferencePage_title0); createSmartCaretGroup(composite); } composite = createSubsection( control, null, AntlrPreferenceMessages.ANTLRSmartTypingConfigurationBlock_typing); createClosePairGroup(composite); createIdentationTabsGroup(control); return control; } private void createIdentationTabsGroup(Composite composite) { Composite generalGroup = createSubsection(composite, null, FormatterMessages.IndentationTabPage_preview_header); GridLayout layout = new GridLayout(); layout.numColumns = 2; generalGroup.setLayout(layout); final String[] tabPolicyValues = new String[] { CodeFormatterConstants.SPACE, CodeFormatterConstants.TAB, CodeFormatterConstants.MIXED }; final String[] tabPolicyLabels = new String[] { FormatterMessages.IndentationTabPage_general_group_option_tab_policy_SPACE, FormatterMessages.IndentationTabPage_general_group_option_tab_policy_TAB, FormatterMessages.IndentationTabPage_general_group_option_tab_policy_MIXED }; addComboBox( generalGroup, FormatterMessages.IndentationTabPage_general_group_option_tab_policy, CodeFormatterConstants.FORMATTER_TAB_CHAR, tabPolicyLabels, tabPolicyValues); addLabelledTextField( generalGroup, FormatterMessages.IndentationTabPage_general_group_option_indent_size, CodeFormatterConstants.FORMATTER_INDENTATION_SIZE, 2, 1, true); addLabelledTextField( generalGroup, FormatterMessages.IndentationTabPage_general_group_option_tab_size, CodeFormatterConstants.FORMATTER_TAB_SIZE, 2, 1, true); if (tabAlwaysIndent) { addCheckBox(generalGroup, PreferencesMessages.EditorPreferencePage_tabAlwaysIndent, PreferenceConstants.EDITOR_TAB_ALWAYS_INDENT, 2); } } private Control createSmartCaretGroup(Composite composite) { GridLayout layout = new GridLayout(); layout.numColumns = 2; composite.setLayout(layout); String label; label = PreferencesMessages.EditorPreferencePage_smartHomeEnd; addCheckBox(composite, label, PreferenceConstants.EDITOR_SMART_HOME_END, 0); label = PreferencesMessages.EditorPreferencePage_subWordNavigation; addCheckBox(composite, label, PreferenceConstants.EDITOR_SUB_WORD_NAVIGATION, 0); label = PreferencesMessages.EditorPreferencePage_smartIndent; addCheckBox(composite, label, PreferenceConstants.EDITOR_SMART_INDENT, 0); return composite; } private Control createClosePairGroup(Composite composite) { GridLayout layout = new GridLayout(); layout.numColumns = 2; composite.setLayout(layout); String label; label = AntlrPreferenceMessages.ANTLRSmartTypingConfigurationBlock_closeStrings; addCheckBox(composite, label, PreferenceConstants.EDITOR_CLOSE_STRINGS, 0); label = AntlrPreferenceMessages.ANTLRSmartTypingConfigurationBlock_closeBrackets; addCheckBox(composite, label, PreferenceConstants.EDITOR_CLOSE_BRACKETS, 0); label = AntlrPreferenceMessages.ANTLRSmartTypingConfigurationBlock_closeBraces; addCheckBox(composite, label, PreferenceConstants.EDITOR_CLOSE_BRACES, 0); return composite; } public void initialize() { super.initialize(); } public void performDefaults() { super.performDefaults(); } }