| /******************************************************************************* |
| * 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; |
| } |
| } |
| } |
| } |