/* * Copyright (c) 2011, 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.properties; 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.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.jobs.Job; 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.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; 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.DirectoryDialog; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.IWorkbenchPropertyPage; import org.eclipse.ui.dialogs.PropertyPage; /** * The property page for Dart build settings. The page currently allows the user to override the * default output location. */ public class DartSettingsPropertyPage extends PropertyPage implements IWorkbenchPropertyPage { private Text packageRootText; private Button packageRootBrowseButton; private Text vmPackageRootText; /** * Create a new DartSettingsPropertyPage. */ public DartSettingsPropertyPage() { } @Override public boolean performOk() { IProject project = getProject(); if (project != null) { try { // package root String oldPackageRoot = DartCore.getPlugin().getProjectPreferences(project).get( DartCore.PROJECT_PREF_PACKAGE_ROOT, ""); // TODO(keertip): move this check into setPacakgeRoot and inform whether it has changed. String packageRoot = packageRootText.getText().trim(); if (!oldPackageRoot.equals(packageRoot)) { DartCore.getPlugin().setPackageRoot(project, packageRoot); if (!DartCoreDebug.ENABLE_ANALYSIS_SERVER) { Job job = new CleanLibrariesJob(); job.schedule(); } } DartCore.getPlugin().setVmPackageRoot(project, vmPackageRootText.getText().trim()); } catch (CoreException ce) { DartToolsPlugin.log(ce); } } return true; } @Override protected Control createContents(Composite parent) { final int indentAmount = 20; Composite composite = new Composite(parent, SWT.NONE); GridLayoutFactory.fillDefaults().applyTo(composite); // package root settings Group group = new Group(composite, SWT.NONE); group.setText("Package root settings"); GridDataFactory.fillDefaults().grab(true, false).applyTo(group); GridLayoutFactory.swtDefaults().numColumns(3).applyTo(group); ((GridLayout) group.getLayout()).marginBottom = 5; Label label = new Label(group, SWT.NONE); label.setText("Project:"); packageRootText = new Text(group, SWT.BORDER | SWT.SINGLE); GridDataFactory.swtDefaults().align(SWT.FILL, SWT.CENTER).hint(100, -1).grab(true, false).applyTo( packageRootText); packageRootBrowseButton = new Button(group, SWT.PUSH); packageRootBrowseButton.setText("Select..."); PixelConverter converter = new PixelConverter(packageRootBrowseButton); int widthHint = converter.convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH); GridDataFactory.swtDefaults().align(SWT.FILL, SWT.BEGINNING).hint(widthHint, -1).applyTo( packageRootBrowseButton); packageRootBrowseButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { packageRootText.setText(handlePackageRootBrowse()); } }); label = new Label(group, SWT.NONE); label.setText("The project package root setting will override the use of local packages directories."); GridDataFactory.swtDefaults().indent(indentAmount, 0).span(3, 1).applyTo(label); label = new Label(group, SWT.NONE); label.setText("VM launch:"); vmPackageRootText = new Text(group, SWT.BORDER | SWT.SINGLE); GridDataFactory.swtDefaults().align(SWT.FILL, SWT.CENTER).hint(100, -1).grab(true, false).applyTo( vmPackageRootText); packageRootBrowseButton = new Button(group, SWT.PUSH); packageRootBrowseButton.setText("Select..."); converter = new PixelConverter(packageRootBrowseButton); widthHint = converter.convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH); GridDataFactory.swtDefaults().align(SWT.FILL, SWT.BEGINNING).hint(widthHint, -1).applyTo( packageRootBrowseButton); packageRootBrowseButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { vmPackageRootText.setText(handlePackageRootBrowse()); } }); initializeFromSettings(); return composite; } @Override protected void performDefaults() { packageRootText.setText(""); vmPackageRootText.setText(""); super.performDefaults(); } private IProject getProject() { return (IProject) getElement().getAdapter(IProject.class); } private String handlePackageRootBrowse() { DirectoryDialog dialog = new DirectoryDialog(getShell(), SWT.APPLICATION_MODAL | SWT.OPEN); dialog.setText("Select the package root path"); String path = dialog.open(); if (path != null) { return path; } return ""; } private void initializeFromSettings() { IProject project = getProject(); if (project != null) { String pref = DartCore.getPlugin().getProjectPreferences(project).get( DartCore.PROJECT_PREF_PACKAGE_ROOT, ""); packageRootText.setText(pref); pref = DartCore.getPlugin().getVmPackageRoot(project); if (pref != null) { vmPackageRootText.setText(pref); } } } }