blob: a90846f39fe6a8ac29a77fbd7841e3308fa46711 [file] [log] [blame]
/*
* 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.eclipse.wizards;
import com.google.dart.eclipse.DartEclipseUI;
import com.google.dart.tools.core.generator.AbstractSample;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.KeyAdapter;
import org.eclipse.swt.events.KeyEvent;
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.Control;
import org.eclipse.swt.widgets.DirectoryDialog;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
/**
* Dart project wizard creation page.
*/
public class DartProjectWizardPage extends WizardPage {
private SamplesComposite samplesComposite;
private Text defaultLocationPathText;
private Button browseButton;
private Label directoryLabel;
private Button useDefaultLocation;
private Text projectNameField;
public DartProjectWizardPage(ISelection selection) {
super("wizardPage");
setTitle("Create a Dart Project");
setDescription("This wizard creates a new Dart project.");
setImageDescriptor(DartEclipseUI.getImageDescriptor("wizban/newprj_wiz.png"));
}
@Override
public void createControl(Composite parent) {
initializeDialogUnits(parent);
final Composite composite = new Composite(parent, SWT.NULL);
composite.setFont(parent.getFont());
composite.setLayout(new GridLayout(1, false));
composite.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
Control nameControl = createNameGroup(composite);
nameControl.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
Control locationControl = createLocationGroup(composite);
locationControl.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
samplesComposite = new SamplesComposite(this, composite, SWT.NONE);
samplesComposite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
setControl(composite);
updatePage();
}
public String getProjectLocation() {
return defaultLocationPathText.getText().trim();
}
public String getProjectName() {
return projectNameField.getText().trim();
}
protected AbstractSample getSampleContent() {
return samplesComposite.getCurrentSample();
}
protected void updatePage() {
AbstractSample sample = getSampleContent();
setMessage(sample == null ? null : sample.getDescription());
setPageComplete(validatePage());
}
protected boolean validatePage() {
IWorkspace workspace = ResourcesPlugin.getWorkspace();
String projectFieldContents = getProjectName();
if (projectFieldContents.equals("")) {
setErrorMessage(null);
setMessage("Project name must be specified");
return false;
}
IStatus nameStatus = workspace.validateName(projectFieldContents, IResource.PROJECT);
if (!nameStatus.isOK()) {
setErrorMessage(nameStatus.getMessage());
return false;
}
IProject handle = workspace.getRoot().getProject(getProjectName());
if (handle.exists()) {
setErrorMessage("A project with that name already exists in the workspace.");
return false;
}
setErrorMessage(null);
setMessage(null);
return true;
}
private Control createLocationGroup(Composite composite) {
final int numColumns = 4;
final Composite locationComposite = new Composite(composite, SWT.NONE);
locationComposite.setLayout(new GridLayout(numColumns, false));
useDefaultLocation = new Button(locationComposite, SWT.CHECK);
useDefaultLocation.setSelection(true);
useDefaultLocation.setText("Use default location");
GridDataFactory.fillDefaults().grab(true, false).span(numColumns, 1).applyTo(useDefaultLocation);
useDefaultLocation.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent arg0) {
if (!useDefaultLocation.getSelection()) {
directoryLabel.setEnabled(true);
defaultLocationPathText.setEnabled(true);
browseButton.setEnabled(true);
} else {
directoryLabel.setEnabled(false);
defaultLocationPathText.setEnabled(false);
browseButton.setEnabled(false);
}
}
});
directoryLabel = new Label(locationComposite, SWT.NONE);
directoryLabel.setText("Location:");
directoryLabel.setEnabled(false);
IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
defaultLocationPathText = new Text(locationComposite, SWT.BORDER);
defaultLocationPathText.setText(root.getLocation().toString());
defaultLocationPathText.setEnabled(false);
GridDataFactory.swtDefaults().align(SWT.FILL, SWT.CENTER).grab(true, false).span(2, 1).applyTo(
defaultLocationPathText);
browseButton = new Button(locationComposite, SWT.NONE);
browseButton.setText("Browse...");
GridDataFactory.fillDefaults().hint(75, SWT.DEFAULT).applyTo(browseButton);
browseButton.setEnabled(false);
browseButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
String selPath = new DirectoryDialog(getShell()).open();
if (selPath != null) {
defaultLocationPathText.setText(selPath);
}
}
});
return locationComposite;
}
private Control createNameGroup(final Composite composite) {
Composite nameComposite = new Composite(composite, SWT.NONE);
nameComposite.setFont(composite.getFont());
nameComposite.setLayout(new GridLayout(2, false));
GridDataFactory.swtDefaults().align(SWT.FILL, SWT.CENTER).applyTo(nameComposite);
Label nameLabel = new Label(nameComposite, SWT.NONE);
nameLabel.setText("Project name:");
GridDataFactory.swtDefaults().align(SWT.FILL, SWT.CENTER).span(1, 1).applyTo(nameLabel);
projectNameField = new Text(nameComposite, SWT.BORDER);
GridDataFactory.swtDefaults().align(SWT.FILL, SWT.CENTER).grab(true, false).span(1, 1).applyTo(
projectNameField);
projectNameField.addKeyListener(new KeyAdapter() {
@Override
public void keyReleased(KeyEvent e) {
updateMessageAndEnablement();
}
});
return nameComposite;
}
private void updateMessageAndEnablement() {
updatePage();
samplesComposite.update();
}
}