/** * This file Copyright (c) 2005-2010 Aptana, Inc. This program is * dual-licensed under both the Aptana Public License and the GNU General * Public license. You may elect to use one or the other of these licenses. * * This program is distributed in the hope that it will be useful, but * AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or * NONINFRINGEMENT. Redistribution, except as permitted by whichever of * the GPL or APL you select, is prohibited. * * 1. For the GPL license (GPL), you can redistribute and/or modify this * program under the terms of the GNU General Public License, * Version 3, as published by the Free Software Foundation. You should * have received a copy of the GNU General Public License, Version 3 along * with this program; if not, write to the Free Software Foundation, Inc., 51 * Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Aptana provides a special exception to allow redistribution of this file * with certain other free and open source software ("FOSS") code and certain additional terms * pursuant to Section 7 of the GPL. You may view the exception and these * terms on the web at http://www.aptana.com/legal/gpl/. * * 2. For the Aptana Public License (APL), this program and the * accompanying materials are made available under the terms of the APL * v1.0 which accompanies this distribution, and is available at * http://www.aptana.com/legal/apl/. * * You may view the GPL, Aptana's exception and additional terms, and the * APL in the file titled license.html at the root of the corresponding * plugin containing this source file. * * Any modifications to this file must keep this entire header intact. */ package com.aptana.ide.editors.preferences; import org.eclipse.jface.preference.BooleanFieldEditor; import org.eclipse.jface.preference.ColorSelector; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.preference.IntegerFieldEditor; import org.eclipse.jface.preference.PreferenceConverter; import org.eclipse.jface.preference.RadioGroupFieldEditor; import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; 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.Label; import org.eclipse.swt.widgets.Link; import org.eclipse.swt.widgets.Scale; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; import org.eclipse.ui.internal.editors.text.EditorsPlugin; import org.eclipse.ui.preferences.IWorkbenchPreferenceContainer; import org.eclipse.ui.texteditor.AbstractDecoratedTextEditorPreferenceConstants; import org.eclipse.ui.texteditor.AbstractTextEditor; import com.aptana.ide.core.StringUtils; import com.aptana.ide.core.ui.preferences.TabbedFieldEditorPreferencePage; import com.aptana.ide.editors.UnifiedEditorsPlugin; import com.aptana.ide.editors.unified.colorizer.LanguageColorizer; /** * The form for configuring the general top-level preferences for this plugin */ public class GeneralPreferencePage extends TabbedFieldEditorPreferencePage implements IWorkbenchPreferencePage { private Scale pianoKeySlider; /** * Color selector for occurrence highlighting */ protected ColorSelector occurrenceColor; /** * Button for enabling occurrence highlighting */ protected Button enableOccurrences; private Button spaces; private Button tabs; private IPropertyChangeListener tabWidthListener = new IPropertyChangeListener() { public void propertyChange(PropertyChangeEvent event) { if (spaces != null && !spaces.isDisposed()) { spaces.setText(StringUtils.format(Messages.GeneralPreferencePage_UseSpaces, event.getNewValue())); } } }; /** * GeneralPreferencePage */ public GeneralPreferencePage() { super(GRID); setPreferenceStore(UnifiedEditorsPlugin.getDefault().getPreferenceStore()); setDescription(Messages.GeneralPreferencePage_PreferenceDescription); } /** * 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. */ public void createFieldEditors() { addTab(Messages.GeneralPreferencePage_General); Composite appearanceComposite = getFieldEditorParent(); Composite group = com.aptana.ide.core.ui.preferences.GeneralPreferencePage.createGroup(appearanceComposite, Messages.GeneralPreferencePage_Formatting); Composite occurrenceComp = new Composite(group, SWT.NONE); GridLayout occLayout = new GridLayout(2, false); occLayout.marginWidth = 0; occLayout.marginHeight = 0; occurrenceComp.setLayout(occLayout); occurrenceComp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); enableOccurrences = new Button(occurrenceComp, SWT.CHECK); enableOccurrences.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { occurrenceColor.setEnabled(enableOccurrences.getSelection()); } }); enableOccurrences.setSelection(getPreferenceStore().getBoolean( IPreferenceConstants.COLORIZER_TEXT_HIGHLIGHT_ENABLED)); enableOccurrences.setText(Messages.GeneralPreferencePage_MarkOccurrences); occurrenceColor = new ColorSelector(occurrenceComp); occurrenceColor.setEnabled(enableOccurrences.getSelection()); occurrenceColor.setColorValue(PreferenceConverter.getColor(getPreferenceStore(), IPreferenceConstants.COLORIZER_TEXT_HIGHLIGHT_BACKGROUND_COLOR)); // addField(new BooleanFieldEditor(IPreferenceConstants.ENABLE_WORD_WRAP, // Messages.GeneralPreferencePage_EnableWordWrap, group)); addField(new BooleanFieldEditor(IPreferenceConstants.INSERT_ON_TAB, Messages.GeneralPreferencePage_InsertSelectedProposal, group)); addField(new RadioGroupFieldEditor(AbstractTextEditor.PREFERENCE_NAVIGATION_SMART_HOME_END, Messages.GeneralPreferencePage_HomeEndBehavior, 1, new String[][] { { Messages.GeneralPreferencePage_ToggleBetween, "true" }, //$NON-NLS-1$ { Messages.GeneralPreferencePage_JumpsStartEnd, "false" } }, //$NON-NLS-1$ appearanceComposite, true)); group = com.aptana.ide.core.ui.preferences.GeneralPreferencePage.createGroup(appearanceComposite, Messages.GeneralPreferencePage_LBL_Colorization); Composite pianoKeyComp = new Composite(group, SWT.NONE); GridLayout pkcLayout = new GridLayout(3, false); pkcLayout.marginWidth = 0; pkcLayout.marginHeight = 0; pianoKeyComp.setLayout(pkcLayout); pianoKeyComp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); Label pianoKeyLabel = new Label(pianoKeyComp, SWT.LEFT); pianoKeyLabel.setText(Messages.GeneralPreferencePage_LBL_PianoKeyColorDifference); GridData pklData = new GridData(SWT.FILL, SWT.FILL, true, false); pklData.horizontalSpan = 3; pianoKeyLabel.setLayoutData(pklData); Label less = new Label(pianoKeyComp, SWT.LEFT); less.setText(Messages.GeneralPreferencePage_LBL_Less); pianoKeySlider = new Scale(pianoKeyComp, SWT.HORIZONTAL); pianoKeySlider.setIncrement(5); pianoKeySlider.setMinimum(1); pianoKeySlider.setMaximum(50); pianoKeySlider.setSelection(getPreferenceStore().getInt(IPreferenceConstants.PIANO_KEY_DIFFERENCE)); Label more = new Label(pianoKeyComp, SWT.LEFT); more.setText(Messages.GeneralPreferencePage_LBL_More); Composite wsGroup = com.aptana.ide.core.ui.preferences.GeneralPreferencePage.createGroup(appearanceComposite, Messages.GeneralPreferencePage_TabInsertion); Composite wsComp = new Composite(wsGroup, SWT.NONE); GridLayout wsLayout = new GridLayout(3, false); wsLayout.marginWidth = 0; wsLayout.marginHeight = 0; wsComp.setLayout(wsLayout); wsComp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); tabs = new Button(wsComp, SWT.RADIO); Composite spaceComp = new Composite(wsComp, SWT.NONE); wsLayout = new GridLayout(2, false); wsLayout.marginWidth = 0; wsLayout.marginHeight = 0; wsLayout.horizontalSpacing = 0; spaceComp.setLayout(wsLayout); spaceComp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); spaces = new Button(spaceComp, SWT.RADIO); final Link currentTabSize = new Link(spaceComp, SWT.NONE); IPreferenceStore store = EditorsPlugin.getDefault().getPreferenceStore(); int size = store.getInt(AbstractDecoratedTextEditorPreferenceConstants.EDITOR_TAB_WIDTH); spaces.setText(StringUtils.format(Messages.GeneralPreferencePage_UseSpaces, size)); tabs.setText(Messages.GeneralPreferencePage_UseTabs); store.addPropertyChangeListener(tabWidthListener); currentTabSize.setText(Messages.GeneralPreferencePage_EditLink); currentTabSize.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { ((IWorkbenchPreferenceContainer) getContainer()).openPage( "org.eclipse.ui.preferencePages.GeneralTextEditor", null); //$NON-NLS-1$ } }); boolean useSpaces = getPreferenceStore().getBoolean(IPreferenceConstants.INSERT_SPACES_FOR_TABS); spaces.setSelection(useSpaces); tabs.setSelection(!useSpaces); tabs.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { spaces.setSelection(!tabs.getSelection()); } }); spaces.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { tabs.setSelection(!spaces.getSelection()); } }); // Link to general text editor prefs from Eclipse - they can set tabs/spaces/whitespace drawing, etc Link link = new Link(appearanceComposite, SWT.NONE); link.setText(Messages.GeneralPreferencePage_GeneralTextEditorPrefLink); link.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { ((IWorkbenchPreferenceContainer) getContainer()).openPage( "org.eclipse.ui.preferencePages.GeneralTextEditor", null); //$NON-NLS-1$ } }); addTab(Messages.GeneralPreferencePage_Advanced); appearanceComposite = getFieldEditorParent(); addField(new BooleanFieldEditor(IPreferenceConstants.ENABLE_WORD_WRAP, Messages.GeneralPreferencePage_EnableWordWrap, appearanceComposite)); appearanceComposite = getFieldEditorParent(); addField(new IntegerFieldEditor(IPreferenceConstants.COLORIZER_MAXCOLUMNS, Messages.GeneralPreferencePage_MaxColorizeColumns, appearanceComposite, 4)); group = com.aptana.ide.core.ui.preferences.GeneralPreferencePage.createGroup(appearanceComposite, Messages.GeneralPreferencePage_CodeAssist); addField(new IntegerFieldEditor(IPreferenceConstants.CONTENT_ASSIST_DELAY, Messages.GeneralPreferencePage_DelayBeforeShowing, group, 4)); } /** * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench) */ public void init(IWorkbench workbench) { } /** * @see org.eclipse.jface.preference.FieldEditorPreferencePage#dispose() */ public void dispose() { IPreferenceStore store = EditorsPlugin.getDefault().getPreferenceStore(); store.removePropertyChangeListener(tabWidthListener); super.dispose(); } /** * @see org.eclipse.jface.preference.FieldEditorPreferencePage#performDefaults() */ protected void performDefaults() { enableOccurrences.setSelection(getPreferenceStore().getDefaultBoolean( IPreferenceConstants.COLORIZER_TEXT_HIGHLIGHT_ENABLED)); occurrenceColor.setColorValue(PreferenceConverter.getDefaultColor(getPreferenceStore(), IPreferenceConstants.COLORIZER_TEXT_HIGHLIGHT_BACKGROUND_COLOR)); occurrenceColor.setEnabled(enableOccurrences.getSelection()); boolean useSpaces = getPreferenceStore().getDefaultBoolean(IPreferenceConstants.INSERT_SPACES_FOR_TABS); spaces.setSelection(useSpaces); tabs.setSelection(!useSpaces); pianoKeySlider.setSelection(getPreferenceStore().getDefaultInt(IPreferenceConstants.PIANO_KEY_DIFFERENCE)); super.performDefaults(); } /** * @see org.eclipse.jface.preference.FieldEditorPreferencePage#performOk() */ public boolean performOk() { getPreferenceStore().setValue(IPreferenceConstants.COLORIZER_TEXT_HIGHLIGHT_ENABLED, enableOccurrences.getSelection()); getPreferenceStore().setValue(IPreferenceConstants.INSERT_SPACES_FOR_TABS, spaces.getSelection()); PreferenceConverter.setValue(getPreferenceStore(), IPreferenceConstants.COLORIZER_TEXT_HIGHLIGHT_BACKGROUND_COLOR, occurrenceColor.getColorValue()); getPreferenceStore().setValue(IPreferenceConstants.PIANO_KEY_DIFFERENCE, pianoKeySlider.getSelection()); LanguageColorizer.fireColorizationEvent(); return super.performOk(); } }