blob: fd269403ccba1b28256d33cdbc837f3f51242b43 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011, 2015 Marc-Andre Laperle and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Marc-Andre Laperle - initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.internal.build.crossgcc;
import org.eclipse.cdt.core.templateengine.SharedDefaults;
import org.eclipse.cdt.managedbuilder.ui.wizards.MBSCustomPage;
import org.eclipse.cdt.managedbuilder.ui.wizards.MBSCustomPageManager;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.wizard.IWizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Image;
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;
import org.eclipse.ui.dialogs.WizardNewProjectCreationPage;
/**
* A wizard page that allows the user to specify the prefix and the path of a Cross GCC command.
* The values are passed to {@link SetCrossCommandOperation} using the {@link MBSCustomPageManager}
*/
public class SetCrossCommandWizardPage extends MBSCustomPage {
private Composite composite;
private boolean finish = false;
private Text pathTxt;
private Text prefixTxt;
public static final String PAGE_ID = "org.eclipse.cdt.build.crossgcc.setcCrossCommandWizardPage"; //$NON-NLS-1$
public static final String CROSS_PROJECT_NAME = "crossProjectName"; //$NON-NLS-1$
public static final String CROSS_COMMAND_PREFIX = "crossCommandPrefix"; //$NON-NLS-1$
public static final String CROSS_COMMAND_PATH = "crossCommandPath"; //$NON-NLS-1$
// Note: The shared defaults keys don't have "cross" in them because we want to keep
// compatibility with defaults that were saved when it used to be a template
static final String SHARED_DEFAULTS_PREFIX_KEY = "prefix";
static final String SHARED_DEFAULTS_PATH_KEY = "path";
public SetCrossCommandWizardPage() {
pageID = PAGE_ID;
MBSCustomPageManager.addPageProperty(PAGE_ID, CROSS_COMMAND_PATH, ""); //$NON-NLS-1$
MBSCustomPageManager.addPageProperty(PAGE_ID, CROSS_COMMAND_PREFIX, ""); //$NON-NLS-1$
}
@Override
protected boolean isCustomPageComplete() {
// Make sure that if the users goes back to the first page and changes the project name,
// the property will be updated
updateProjectNameProperty();
return finish;
}
public String getName() {
return Messages.SetCrossCommandWizardPage_name;
}
public void createControl(Composite parent) {
composite = new Composite(parent, SWT.NULL);
composite.setLayout(new GridLayout(3, false));
GridData layoutData = new GridData();
composite.setLayoutData(layoutData);
Label prefixLbl = new Label(composite, SWT.NONE);
prefixLbl.setText(Messages.SetCrossCommandWizardPage_prefix);
prefixTxt = new Text(composite, SWT.SINGLE | SWT.BORDER);
layoutData = new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1);
prefixTxt.setLayoutData(layoutData);
String crossCommandPrefix = SharedDefaults.getInstance().getSharedDefaultsMap().get(SHARED_DEFAULTS_PREFIX_KEY);
if (crossCommandPrefix != null) {
prefixTxt.setText(crossCommandPrefix);
updatePrefixProperty();
}
prefixTxt.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
updatePrefixProperty();
}
});
Label label = new Label(composite, SWT.NONE);
label.setText(Messages.SetCrossCommandWizardPage_path);
pathTxt = new Text(composite, SWT.SINGLE | SWT.BORDER);
String crossCommandPath = SharedDefaults.getInstance().getSharedDefaultsMap().get(SHARED_DEFAULTS_PATH_KEY);
if (crossCommandPath != null) {
pathTxt.setText(crossCommandPath);
updatePathProperty();
}
layoutData = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1);
pathTxt.setLayoutData(layoutData);
pathTxt.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
updatePathProperty();
}
});
Button button = new Button(composite, SWT.NONE);
button.setText(Messages.SetCrossCommandWizardPage_browse);
button.addSelectionListener(new SelectionListener() {
public void widgetDefaultSelected(SelectionEvent e) {
}
public void widgetSelected(SelectionEvent e) {
DirectoryDialog dirDialog = new DirectoryDialog(composite.getShell(), SWT.APPLICATION_MODAL);
String browsedDirectory = dirDialog.open();
if (browsedDirectory != null) {
pathTxt.setText(browsedDirectory);
}
}
});
layoutData = new GridData(SWT.LEFT, SWT.TOP, false, false, 1, 1);
button.setLayoutData(layoutData);
}
public Control getControl() {
return composite;
}
public String getDescription() {
return Messages.SetCrossCommandWizardPage_description;
}
public String getErrorMessage() {
return null;
}
public Image getImage() {
return wizard.getDefaultPageImage();
}
public String getMessage() {
return null;
}
public String getTitle() {
return Messages.SetCrossCommandWizardPage_title;
}
public void performHelp() {
}
public void setDescription(String description) {
}
public void setImageDescriptor(ImageDescriptor image) {
}
public void setTitle(String title) {
}
public void setVisible(boolean visible) {
if (visible) {
finish = true;
}
composite.setVisible(visible);
}
public void dispose() {
}
/**
* MBSCustomPageManager and properties are used to pass things to SetCrossCommandOperation
*/
private void updatePathProperty() {
MBSCustomPageManager.addPageProperty(PAGE_ID, CROSS_COMMAND_PATH, pathTxt.getText());
}
private void updatePrefixProperty() {
MBSCustomPageManager.addPageProperty(PAGE_ID, CROSS_COMMAND_PREFIX, prefixTxt.getText());
}
private void updateProjectNameProperty() {
IWizardPage[] pages = getWizard().getPages();
for (IWizardPage wizardPage : pages) {
if (wizardPage instanceof WizardNewProjectCreationPage) {
MBSCustomPageManager.addPageProperty(PAGE_ID, CROSS_PROJECT_NAME, ((WizardNewProjectCreationPage) wizardPage).getProjectName());
break;
}
}
}
}