/* * Copyright (c) 2013, 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.DartCoreDebug; import com.google.dart.tools.core.jobs.CleanLibrariesJob; import com.google.dart.tools.ui.DartToolsPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.core.runtime.preferences.IEclipsePreferences; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.layout.GridLayoutFactory; 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.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; /** * Page for setting Hint Analysis preferences. */ public class HintPreferencePage extends PreferencePage implements IWorkbenchPreferencePage { public static final String HINT_PREF_PAGE_ID = "com.google.dart.tools.ui.preferences.HintPreferencePage"; //$NON-NLS-1$ private static Button createCheckBox(Composite composite, String label, String tooltip) { Button checkBox = new Button(composite, SWT.CHECK); checkBox.setText(label); checkBox.setToolTipText(tooltip); return checkBox; } private Group hintGroup; private Button enableHintsButton; private Button enableDart2jsHintsButton; private Button enableLintsButton; public HintPreferencePage() { setPreferenceStore(null); noDefaultAndApplyButton(); } @Override public void init(IWorkbench workbench) { // do nothing } @Override public boolean performOk() { boolean hasChanges = false; IEclipsePreferences prefs = DartCore.getPlugin().getPrefs(); if (prefs != null) { boolean hintsEnabled = DartCore.getPlugin().isHintsEnabled(); boolean hintsDart2JSEnabled = DartCore.getPlugin().isHintsDart2JSEnabled(); boolean lintsEnabled = DartCoreDebug.ENABLE_ANALYSIS_SERVER && prefs.getBoolean(DartCore.ENABLE_LINTS_PREFERENCE, false); if (DartCoreDebug.ENABLE_ANALYSIS_SERVER) { prefs.putBoolean(DartCore.ENABLE_LINTS_PREFERENCE, enableLintsButton.getSelection()); } prefs.putBoolean(DartCore.ENABLE_HINTS_PREFERENCE, enableHintsButton.getSelection()); prefs.putBoolean( DartCore.ENABLE_HINTS_DART2JS_PREFERENCE, enableDart2jsHintsButton.getSelection()); if (hintsEnabled != enableHintsButton.getSelection() || hintsDart2JSEnabled != enableDart2jsHintsButton.getSelection() || lintsEnabled != enableLintsButton.getSelection()) { // trigger processing for hints if (DartCoreDebug.ENABLE_ANALYSIS_SERVER) { DartCore.getAnalysisServerData().updateOptions(); // TODO (danrubel) Set Angular enabled option } else { DartCore.getProjectManager().setHintOption(enableHintsButton.getSelection()); DartCore.getProjectManager().setDart2JSHintOption(enableDart2jsHintsButton.getSelection()); } hasChanges = true; } try { DartCore.getPlugin().savePrefs(); } catch (CoreException e) { DartToolsPlugin.log(e); } if (hasChanges) { 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); // Enable Hints checkbox enableHintsButton = createCheckBox( composite, PreferencesMessages.HintPreferencePage_enable_hints, PreferencesMessages.HintPreferencePage_enable_hints_tooltip); enableHintsButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { // disable all widgets in the Hint Group boolean enableHintsButtonSelection = enableHintsButton.getSelection(); enableDart2jsHintsButton.setEnabled(enableHintsButtonSelection); hintGroup.setEnabled(enableHintsButtonSelection); } }); GridDataFactory.fillDefaults().applyTo(enableHintsButton); if (DartCoreDebug.ENABLE_ANALYSIS_SERVER) { // Enable Lints checkbox enableLintsButton = createCheckBox( composite, PreferencesMessages.HintPreferencePage_enable_lints, PreferencesMessages.HintPreferencePage_enable_lints_tooltip); GridDataFactory.fillDefaults().applyTo(enableLintsButton); } // Separator { Label separatorLabel = new Label(composite, SWT.SEPARATOR | SWT.HORIZONTAL); GridDataFactory.fillDefaults().grab(true, false).applyTo(separatorLabel); } // Hints group hintGroup = new Group(composite, SWT.NONE); hintGroup.setText(PreferencesMessages.HintPreferencePage_hints_group); GridDataFactory.fillDefaults().grab(true, false).align(SWT.FILL, SWT.BEGINNING).applyTo( hintGroup); GridLayoutFactory.fillDefaults().margins(8, 8).applyTo(hintGroup); // Enable dart2js hints checkbox enableDart2jsHintsButton = createCheckBox( hintGroup, PreferencesMessages.HintPreferencePage_enable_dart2js_hints, PreferencesMessages.HintPreferencePage_enable_dart2js_hints_tooltip); GridDataFactory.fillDefaults().applyTo(enableDart2jsHintsButton); // init initFromPrefs(); return composite; } private void initFromPrefs() { IEclipsePreferences prefs = DartCore.getPlugin().getPrefs(); if (prefs != null) { boolean enableHintsButtonSelection = prefs.getBoolean(DartCore.ENABLE_HINTS_PREFERENCE, true); enableHintsButton.setSelection(enableHintsButtonSelection); enableDart2jsHintsButton.setSelection(prefs.getBoolean( DartCore.ENABLE_HINTS_DART2JS_PREFERENCE, true)); enableDart2jsHintsButton.setEnabled(enableHintsButtonSelection); hintGroup.setEnabled(enableHintsButtonSelection); if (DartCoreDebug.ENABLE_ANALYSIS_SERVER) { boolean enableLints = prefs.getBoolean(DartCore.ENABLE_LINTS_PREFERENCE, true); enableLintsButton.setSelection(enableLints); } } } }