Java tutorial
/* * Copyright (c) 2012, the Dart project authors. * * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at * * http://www.eclipse.org/legal/epl-v10.html * * Unless required by applicable law or agreed to in writing, software distributed under the License * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express * or implied. See the License for the specific language governing permissions and limitations under * the License. */ package com.google.dart.tools.ui.internal.preferences; import com.google.dart.tools.core.DartCore; import com.google.dart.tools.core.internal.model.PackageLibraryManagerProvider; import com.google.dart.tools.core.jobs.CleanLibrariesJob; import com.google.dart.tools.ui.DartToolsPlugin; import com.google.dart.tools.ui.PreferenceConstants; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.core.runtime.preferences.IEclipsePreferences; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.layout.GridLayoutFactory; import org.eclipse.jface.layout.PixelConverter; import org.eclipse.jface.preference.IPersistentPreferenceStore; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.preference.PreferencePage; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.DirectoryDialog; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; import org.eclipse.ui.internal.editors.text.EditorsPlugin; import org.eclipse.ui.texteditor.AbstractDecoratedTextEditorPreferenceConstants; import org.osgi.framework.Version; import org.osgi.service.prefs.BackingStoreException; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; /** * Page for setting general Dart plug-in preferences (the root of all Dart preferences). */ @SuppressWarnings("restriction") public class DartBasePreferencePage extends PreferencePage implements IWorkbenchPreferencePage { public static final String JAVA_BASE_PREF_PAGE_ID = "com.google.dart.tools.ui.preferences.DartBasePreferencePage"; //$NON-NLS-1$ private static String getVersionText() { Version version = DartCore.getPlugin().getBundle().getVersion(); return version.getMajor() + "." + version.getMinor() + "." + version.getMicro(); } private Button lineNumbersCheck; private Button printMarginCheck; private Text printMarginText; private Button removeTrailingWhitespaceCheck; private Text packageRootDir; private Text auxDirText; private Button enableFolding; public DartBasePreferencePage() { setPreferenceStore(DartToolsPlugin.getDefault().getPreferenceStore()); noDefaultAndApplyButton(); if (DartCore.isPluginsBuild()) { setDescription("Dart Editor version " + getVersionText() + ", build " //$NON-NLS-1$ //$NON-NLS-2$ + DartToolsPlugin.getBuildId()); } } @Override public void init(IWorkbench workbench) { // do nothing } @Override public boolean performOk() { IPreferenceStore editorPreferences = EditorsPlugin.getDefault().getPreferenceStore(); editorPreferences.setValue(AbstractDecoratedTextEditorPreferenceConstants.EDITOR_LINE_NUMBER_RULER, lineNumbersCheck.getSelection()); editorPreferences.setValue(AbstractDecoratedTextEditorPreferenceConstants.EDITOR_PRINT_MARGIN, printMarginCheck.getSelection()); if (printMarginCheck.getSelection()) { editorPreferences.setValue(AbstractDecoratedTextEditorPreferenceConstants.EDITOR_PRINT_MARGIN_COLUMN, printMarginText.getText()); } handleSave(editorPreferences); IPreferenceStore toolsPreferenceStore = PreferenceConstants.getPreferenceStore(); toolsPreferenceStore.setValue(PreferenceConstants.EDITOR_FOLDING_ENABLED, enableFolding.getSelection()); toolsPreferenceStore.setValue(PreferenceConstants.EDITOR_REMOVE_TRAILING_WS, removeTrailingWhitespaceCheck.getSelection()); handleSave(toolsPreferenceStore); List<File> packageRoots = new ArrayList<File>(); String newRoot = packageRootDir.getText().trim(); String extDir = auxDirText.getText().trim(); if (!newRoot.isEmpty()) { packageRoots.add(new File(newRoot)); } if (!extDir.isEmpty()) { packageRoots.add(new File(extDir)); } IEclipsePreferences prefs = DartCore.getPlugin().getPrefs(); if (prefs != null) { String root = prefs.get(DartCore.PACKAGE_ROOT_DIR_PREFERENCE, ""); //$NON-NLS-1$ if (!root.equals(newRoot)) { prefs.put(DartCore.PACKAGE_ROOT_DIR_PREFERENCE, newRoot); //$NON-NLS-1$ try { prefs.flush(); } catch (BackingStoreException e) { DartToolsPlugin.log(e); } } String extDirPref = prefs.get(DartCore.AUXILIARY_DIR_PREFERENCE, ""); //$NON-NLS-1$ if (!extDirPref.equals(extDir)) { prefs.put(DartCore.AUXILIARY_DIR_PREFERENCE, extDir); //$NON-NLS-1$ try { prefs.flush(); } catch (BackingStoreException e) { DartToolsPlugin.log(e); } } if (!root.equals(newRoot) || !extDir.equals(extDirPref)) { PackageLibraryManagerProvider.getAnyLibraryManager().setPackageRoots(packageRoots); Job job = new CleanLibrariesJob(); job.schedule(); } } return true; } @Override protected Control createContents(Composite parent) { Composite composite = new Composite(parent, SWT.NONE); GridDataFactory.fillDefaults().grab(true, false).indent(0, 10).align(SWT.FILL, SWT.BEGINNING) .applyTo(composite); GridLayoutFactory.fillDefaults().spacing(0, 8).margins(0, 10).applyTo(composite); // General preferences Group generalGroup = new Group(composite, SWT.NONE); generalGroup.setText(PreferencesMessages.DartBasePreferencePage_general); GridDataFactory.fillDefaults().grab(true, false).align(SWT.FILL, SWT.BEGINNING).applyTo(generalGroup); GridLayoutFactory.fillDefaults().numColumns(2).margins(8, 8).applyTo(generalGroup); lineNumbersCheck = createCheckBox(generalGroup, PreferencesMessages.DartBasePreferencePage_show_line_numbers, PreferencesMessages.DartBasePreferencePage_show_line_numbers_tooltip); GridDataFactory.fillDefaults().span(2, 1).applyTo(lineNumbersCheck); printMarginCheck = createCheckBox(generalGroup, PreferencesMessages.DartBasePreferencePage_show_print_margin, PreferencesMessages.DartBasePreferencePage_show_print_margin_tooltip); printMarginCheck.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { printMarginText.setEnabled(printMarginCheck.getSelection()); } }); printMarginText = new Text(generalGroup, SWT.BORDER | SWT.SINGLE | SWT.RIGHT); printMarginText.setTextLimit(5); GridDataFactory.fillDefaults().hint(50, SWT.DEFAULT).applyTo(printMarginText); enableFolding = createCheckBox(generalGroup, PreferencesMessages.DartBasePreferencePage_enable_code_folding, PreferencesMessages.DartBasePreferencePage_enable_code_folding_tooltip); GridDataFactory.fillDefaults().span(2, 1).applyTo(enableFolding); Group saveGroup = new Group(composite, SWT.NONE); saveGroup.setText(PreferencesMessages.DartBasePreferencePage_save); GridDataFactory.fillDefaults().grab(true, false).align(SWT.FILL, SWT.BEGINNING).applyTo(saveGroup); GridLayoutFactory.fillDefaults().margins(8, 8).applyTo(saveGroup); removeTrailingWhitespaceCheck = createCheckBox(saveGroup, PreferencesMessages.DartBasePreferencePage_trailing_ws_label, PreferencesMessages.DartBasePreferencePage_trailing_ws_details); GridDataFactory.fillDefaults().applyTo(removeTrailingWhitespaceCheck); createDirectorySettings(composite); initFromPrefs(); return composite; } private Button createCheckBox(Composite composite, String label, String tooltip) { final Button checkBox = new Button(composite, SWT.CHECK); checkBox.setText(label); checkBox.setToolTipText(tooltip); return checkBox; } private void createDirectorySettings(Composite composite) { // Package directory preferences Group packageGroup = new Group(composite, SWT.NONE); packageGroup.setText(PreferencesMessages.DartBasePreferencePage_groupTitle); GridDataFactory.fillDefaults().grab(true, false).align(SWT.FILL, SWT.BEGINNING).applyTo(packageGroup); GridLayoutFactory.fillDefaults().numColumns(2).margins(8, 8).applyTo(packageGroup); Label packageRootLabel = new Label(packageGroup, SWT.NONE); packageRootLabel.setText(PreferencesMessages.DartBasePreferencePage_Package_Title); GridDataFactory.swtDefaults().align(SWT.FILL, SWT.CENTER).span(2, 1).grab(true, false) .applyTo(packageRootLabel); packageRootDir = new Text(packageGroup, SWT.SINGLE | SWT.BORDER); GridDataFactory.swtDefaults().align(SWT.FILL, SWT.CENTER).hint(350, SWT.DEFAULT).grab(true, false) .applyTo(packageRootDir); Button selectPackageDirButton = new Button(packageGroup, SWT.PUSH); selectPackageDirButton.setText(PreferencesMessages.DartBasePreferencePage_Browse); PixelConverter converter = new PixelConverter(selectPackageDirButton); int widthHint = converter.convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH); GridDataFactory.swtDefaults().hint(widthHint, -1).applyTo(selectPackageDirButton); selectPackageDirButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { String dirPath = handleBrowseButton(); if (dirPath != null) { packageRootDir.setText(dirPath); } } }); Label auxDirLabel = new Label(packageGroup, SWT.NONE); auxDirLabel.setText(PreferencesMessages.DartBasePreferencePage_auxiliaryDirectory); GridDataFactory.swtDefaults().align(SWT.FILL, SWT.CENTER).span(2, 1).grab(true, false).applyTo(auxDirLabel); auxDirText = new Text(packageGroup, SWT.SINGLE | SWT.BORDER); GridDataFactory.swtDefaults().align(SWT.FILL, SWT.CENTER).hint(350, SWT.DEFAULT).grab(true, false) .applyTo(auxDirText); Button selectAuxDirButton = new Button(packageGroup, SWT.PUSH); selectAuxDirButton.setText(PreferencesMessages.DartBasePreferencePage_Browse); GridDataFactory.swtDefaults().hint(widthHint, -1).applyTo(selectAuxDirButton); selectAuxDirButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { handleBrowseButton(); String dirPath = handleBrowseButton(); if (dirPath != null) { auxDirText.setText(dirPath); } } }); } private String handleBrowseButton() { DirectoryDialog directoryDialog = new DirectoryDialog(getShell()); return directoryDialog.open(); } private void handleSave(IPreferenceStore store) { if (store != null && store.needsSaving() && store instanceof IPersistentPreferenceStore) { try { ((IPersistentPreferenceStore) store).save(); } catch (IOException e) { DartToolsPlugin.log(e); } } } private void initFromPrefs() { IPreferenceStore editorPreferences = EditorsPlugin.getDefault().getPreferenceStore(); IPreferenceStore toolsPreferences = PreferenceConstants.getPreferenceStore(); lineNumbersCheck.setSelection(editorPreferences .getBoolean(AbstractDecoratedTextEditorPreferenceConstants.EDITOR_LINE_NUMBER_RULER)); printMarginCheck.setSelection( editorPreferences.getBoolean(AbstractDecoratedTextEditorPreferenceConstants.EDITOR_PRINT_MARGIN)); printMarginText.setText(editorPreferences .getString(AbstractDecoratedTextEditorPreferenceConstants.EDITOR_PRINT_MARGIN_COLUMN)); printMarginText.setEnabled(printMarginCheck.getSelection()); removeTrailingWhitespaceCheck .setSelection(toolsPreferences.getBoolean(PreferenceConstants.EDITOR_REMOVE_TRAILING_WS)); enableFolding.setSelection(toolsPreferences.getBoolean(PreferenceConstants.EDITOR_FOLDING_ENABLED)); IEclipsePreferences prefs = DartCore.getPlugin().getPrefs(); if (prefs != null) { String root = prefs.get(DartCore.PACKAGE_ROOT_DIR_PREFERENCE, ""); //$NON-NLS-1$ packageRootDir.setText(root); root = prefs.get(DartCore.AUXILIARY_DIR_PREFERENCE, ""); //$NON-NLS-1$ auxDirText.setText(root); } } }