Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSean Evoy2004-10-28 17:16:53 +0000
committerSean Evoy2004-10-28 17:16:53 +0000
commit18b49394c46cbbecf041078a70e83e4975d004a7 (patch)
treed0c3ba392502edf50f1d8fd76735f4addb2800f1 /build/org.eclipse.cdt.managedbuilder.ui/src
parent2dfb046061d53f161ec1d1906648c2bfecdee6e1 (diff)
downloadorg.eclipse.cdt-18b49394c46cbbecf041078a70e83e4975d004a7.tar.gz
org.eclipse.cdt-18b49394c46cbbecf041078a70e83e4975d004a7.tar.xz
org.eclipse.cdt-18b49394c46cbbecf041078a70e83e4975d004a7.zip
Commit for Leo Treggiarri -- Initial Managed Build System patch for CDT 2.1
Diffstat (limited to 'build/org.eclipse.cdt.managedbuilder.ui/src')
-rw-r--r--build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/BuildSettingsBlock.java497
-rw-r--r--build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/ErrorParserBlock.java80
-rw-r--r--build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/ManagedBuildOptionBlock.java271
-rw-r--r--build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/ManagedMakeStartup.java52
-rw-r--r--build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/ManagedProjectOptionBlock.java27
-rw-r--r--build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/PluginResources.properties63
-rw-r--r--build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/ToolsSettingsBlock.java639
-rw-r--r--build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/actions/UpdateManagedProjectAction.java580
-rw-r--r--build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildOptionComboFieldEditor.java19
-rw-r--r--build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildOptionSettingsPage.java270
-rw-r--r--build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildPropertyPage.java880
-rw-r--r--build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildSettingsPage.java56
-rw-r--r--build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildToolSettingsPage.java389
-rw-r--r--build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildToolsSettingsStore.java197
-rw-r--r--build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/ManageConfigDialog.java252
-rw-r--r--build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/ManagedBuilderPropertyPage.java174
-rw-r--r--build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/NewConfigurationDialog.java30
-rw-r--r--build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/ResourceBuildPropertyPage.java487
-rw-r--r--build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/ToolListContentProvider.java35
-rw-r--r--build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/ToolListLabelProvider.java7
-rw-r--r--build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/CProjectPlatformPage.java107
-rw-r--r--build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/ConfigurationContentProvider.java9
-rw-r--r--build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/NewManagedProjectOptionPage.java20
-rw-r--r--build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/NewManagedProjectWizard.java93
24 files changed, 3010 insertions, 2224 deletions
diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/BuildSettingsBlock.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/BuildSettingsBlock.java
new file mode 100644
index 0000000000..c56976a429
--- /dev/null
+++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/BuildSettingsBlock.java
@@ -0,0 +1,497 @@
+/**********************************************************************
+ * Copyright (c) 2002,2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v0.5
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v05.html
+ *
+ * Contributors:
+ * QNX Software Systems - Move to Make plugin
+ * Intel Corp - Use in Managed Make system
+***********************************************************************/
+package org.eclipse.cdt.managedbuilder.internal.ui;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.eclipse.cdt.ui.dialogs.AbstractCOptionPage;
+import org.eclipse.cdt.managedbuilder.core.IConfiguration;
+import org.eclipse.cdt.managedbuilder.core.IToolChain;
+import org.eclipse.cdt.managedbuilder.core.IBuilder;
+import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
+import org.eclipse.cdt.managedbuilder.ui.properties.BuildPropertyPage;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.accessibility.AccessibleAdapter;
+import org.eclipse.swt.accessibility.AccessibleEvent;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+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.Label;
+
+public class BuildSettingsBlock extends AbstractCOptionPage {
+
+ /*
+ * String constants
+ */
+ private static final String PREFIX = "BuildSettingsBlock"; //$NON-NLS-1$
+ private static final String LABEL = PREFIX + ".label"; //$NON-NLS-1$
+ private static final String SETTINGS_LABEL = LABEL + ".Settings"; //$NON-NLS-1$
+ private static final String GROUP = LABEL + ".makecmdgroup"; //$NON-NLS-1$
+ private static final String DEF_BTN = LABEL + ".makecmddef"; //$NON-NLS-1$
+ private static final String OUTPUT_GROUP = LABEL + ".output.group"; //$NON-NLS-1$
+ private static final String OUTPUT_EXT = LABEL + ".output.extension"; //$NON-NLS-1$
+ private static final String OUTPUT_NAME = LABEL + ".output.name"; //$NON-NLS-1$
+
+ private static final String EMPTY_STRING = new String();
+
+ /*
+ * Dialog widgets
+ */
+ protected Text buildArtifactExt;
+ protected Text buildArtifactName;
+ protected Button makeCommandDefault;
+ protected Text makeCommandEntry;
+
+ /*
+ * Bookeeping variables
+ */
+ private BuildPropertyPage parent;
+ // The name of the build artifact
+ private String artifactExt;
+ private String artifactName;
+ // The make command associated with the target
+ private String makeCommand;
+ // State of the check box on exit
+ private boolean useDefaultMake;
+ // Has the page been changed?
+ private boolean dirty = false;
+
+ private ModifyListener widgetModified = new ModifyListener() {
+ public void modifyText(ModifyEvent e) {
+ setDirty(true);
+ }
+ };
+
+
+ /*
+ * Constructor
+ */
+ public BuildSettingsBlock(BuildPropertyPage parent)
+ {
+ super(ManagedBuilderUIMessages.getResourceString(SETTINGS_LABEL));
+ super.setContainer(parent);
+ this.parent = parent;
+ }
+
+ public void createControl(Composite parent) {
+ Composite comp = new Composite(parent, SWT.NULL);
+ comp.setFont(parent.getFont());
+ comp.setLayout(new GridLayout(1, true));
+ comp.setLayoutData(new GridData(GridData.FILL_BOTH));
+ setControl(comp);
+
+ // Create a group for the build output
+ createBuildArtifactGroup(comp);
+
+ // Create the make command group area
+ createMakeCommandGroup(comp);
+ }
+
+ /* (non-Javadoc)
+ * Creates the group that contains the build artifact name controls.
+ */
+ private void createBuildArtifactGroup(Composite parent) {
+ final Group outputGroup = new Group(parent, SWT.NONE);
+ outputGroup.setFont(parent.getFont());
+ outputGroup.setText(ManagedBuilderUIMessages.getResourceString(OUTPUT_GROUP));
+ outputGroup.setLayout(new GridLayout(3, false));
+ outputGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+ // Three labels
+ final Label nameLabel = new Label(outputGroup, SWT.LEFT);
+ nameLabel.setFont(outputGroup.getFont());
+ nameLabel.setText(ManagedBuilderUIMessages.getResourceString(OUTPUT_NAME));
+ nameLabel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+ final Label placeHolder = new Label(outputGroup, SWT.CENTER);
+ placeHolder.setText(new String());
+ placeHolder.setLayoutData(new GridData());
+
+ final Label extLabel = new Label(outputGroup, SWT.LEFT);
+ extLabel.setFont(outputGroup.getFont());
+ extLabel.setText(ManagedBuilderUIMessages.getResourceString(OUTPUT_EXT));
+ extLabel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+ // Now we need two text widgets separated by a label
+ buildArtifactName = new Text(outputGroup, SWT.SINGLE | SWT.BORDER);
+ buildArtifactName.setFont(outputGroup.getFont());
+ GridData data = new GridData(GridData.FILL_HORIZONTAL);
+ data.widthHint = IDialogConstants.ENTRY_FIELD_WIDTH;
+ buildArtifactName.setLayoutData(data);
+ buildArtifactName.addDisposeListener(new DisposeListener() {
+ public void widgetDisposed(DisposeEvent event) {
+ buildArtifactName = null;
+ }
+ });
+ buildArtifactName.getAccessible().addAccessibleListener(new AccessibleAdapter(){
+ public void getName(AccessibleEvent e) {
+ e.result = ManagedBuilderUIMessages.getResourceString(OUTPUT_NAME);
+ }
+ });
+ buildArtifactName.addModifyListener(widgetModified);
+
+ final Label dotLabel = new Label(outputGroup, SWT.CENTER);
+ dotLabel.setFont(outputGroup.getFont());
+ dotLabel.setText(new String(".")); //$NON-NLS-1$
+ dotLabel.setLayoutData(new GridData());
+
+ buildArtifactExt = new Text(outputGroup, SWT.SINGLE | SWT.BORDER);
+ buildArtifactExt.setFont(outputGroup.getFont());
+ data = new GridData(GridData.FILL_HORIZONTAL);
+ data.widthHint = (IDialogConstants.ENTRY_FIELD_WIDTH / 2);
+ buildArtifactExt.setLayoutData(data);
+ buildArtifactExt.addDisposeListener(new DisposeListener() {
+ public void widgetDisposed(DisposeEvent e) {
+ buildArtifactExt = null;
+ }
+ });
+ buildArtifactExt.getAccessible().addAccessibleListener(new AccessibleAdapter() {
+ public void getName(AccessibleEvent e) {
+ e.result = ManagedBuilderUIMessages.getResourceString(OUTPUT_EXT);
+ }
+ });
+ buildArtifactExt.addModifyListener(widgetModified);
+ }
+
+ /* (non-Javadoc)
+ * Creates the group control for the make command
+ * @param parent
+ */
+ private void createMakeCommandGroup(Composite parent) {
+ final Group makeCommandGroup = new Group(parent, SWT.NONE);
+ makeCommandGroup.setFont(parent.getFont());
+ makeCommandGroup.setText(ManagedBuilderUIMessages.getResourceString(GROUP));
+ makeCommandGroup.setLayout(new GridLayout(1, true));
+ makeCommandGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+ makeCommandDefault = new Button(makeCommandGroup, SWT.CHECK | SWT.LEFT);
+ makeCommandDefault.setFont(makeCommandGroup.getFont());
+ makeCommandDefault.setText(ManagedBuilderUIMessages.getResourceString(DEF_BTN));
+ makeCommandDefault.setBackground(makeCommandGroup.getBackground());
+ makeCommandDefault.setForeground(makeCommandGroup.getForeground());
+ makeCommandDefault.addSelectionListener(new SelectionAdapter () {
+ public void widgetSelected(SelectionEvent e) {
+ handleUseDefaultPressed();
+ setDirty(true);
+ }
+ });
+ makeCommandDefault.addDisposeListener(new DisposeListener() {
+ public void widgetDisposed(DisposeEvent event) {
+ makeCommandDefault = null;
+ }
+ });
+
+ makeCommandEntry = new Text(makeCommandGroup, SWT.SINGLE | SWT.BORDER);
+ makeCommandEntry.setFont(makeCommandGroup.getFont());
+ makeCommandEntry.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ makeCommandEntry.addDisposeListener(new DisposeListener() {
+ public void widgetDisposed(DisposeEvent event) {
+ makeCommandEntry = null;
+ }
+ });
+ makeCommandEntry.addModifyListener(widgetModified);
+ }
+
+ protected void initializeValues() {
+ setValues();
+ }
+
+ public void updateValues() {
+ setValues();
+ useDefaultMake = !parent.getSelectedConfiguration().hasOverriddenBuildCommand();
+ makeCommandDefault.setSelection(useDefaultMake);
+ makeCommandEntry.setEditable(!makeCommandDefault.getSelection());
+ }
+
+ protected void setValues() {
+ artifactName = parent.getSelectedConfiguration().getArtifactName();
+ buildArtifactName.setText(artifactName);
+ artifactExt = parent.getSelectedConfiguration().getArtifactExtension();
+ buildArtifactExt.setText(artifactExt);
+ makeCommand = parent.getSelectedConfiguration().getBuildCommand();
+ String makeArgs = parent.getSelectedConfiguration().getBuildArguments();
+ if (makeArgs != null) {
+ makeCommand += " " + makeArgs; //$NON-NLS-1$
+ }
+ makeCommandEntry.setText(makeCommand);
+
+ setDirty(false);
+ }
+
+ public void removeValues(String id) {
+ // Nothing to do...
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.cdt.ui.dialogs.ICOptionPage#performDefaults()
+ */
+ public void performDefaults() {
+ IConfiguration config = parent.getSelectedConfiguration();
+ config.setArtifactName(config.getManagedProject().getDefaultArtifactName());
+ config.setArtifactExtension(null);
+ IBuilder builder = config.getToolChain().getBuilder();
+ if (!builder.isExtensionElement()) {
+ config.getToolChain().removeLocalBuilder();
+ }
+ setValues();
+ makeCommandDefault.setSelection(true);
+ makeCommandEntry.setEditable(false);
+
+ setDirty(false);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.cdt.ui.dialogs.ICOptionPage#performApply(IProgressMonitor)
+ */
+ public void performApply(IProgressMonitor monitor) throws CoreException {
+ useDefaultMake = makeCommandDefault.getSelection();
+ makeCommand = makeCommandEntry.getText().trim();
+ artifactName = buildArtifactName.getText().trim();
+ artifactExt = buildArtifactExt.getText().trim();
+
+ IConfiguration selectedConfiguration = parent.getSelectedConfiguration();
+ IBuilder builder = selectedConfiguration.getToolChain().getBuilder();
+ boolean setBuilderValues = false;
+
+ // Set the build output name
+ if (!selectedConfiguration.getArtifactName().equals(artifactName)) {
+ setBuilderValues = true;
+ }
+ // Set the build output extension
+ if (!selectedConfiguration.getArtifactExtension().equals(artifactExt)) {
+ setBuilderValues = true;
+ }
+ // Set the new make command
+ String makeCommandOnly = null;
+ String makeArguments = null;
+ if (useDefaultMake) {
+ if (!builder.isExtensionElement()) {
+ setBuilderValues = true;
+ }
+ } else {
+ // Parse for command and arguments
+ String rawCommand = makeCommand;
+ makeCommandOnly = parseMakeCommand(rawCommand);
+ if (!selectedConfiguration.getBuildCommand().equals(makeCommandOnly)) {
+ setBuilderValues = true;
+ }
+ makeArguments = parseMakeArgs(rawCommand);
+ if (!selectedConfiguration.getBuildArguments().equals(makeArguments)) {
+ setBuilderValues = true;
+ }
+ }
+
+ if (setBuilderValues) {
+ // If the configuration does not already have a "local" builder, we
+ // need to create it.
+ if (builder.isExtensionElement()) {
+ IToolChain tc = selectedConfiguration.getToolChain();
+ int nnn = ManagedBuildManager.getRandomNumber();
+ String subId = builder.getId() + "." + nnn; //$NON-NLS-1$
+ String name = builder.getName() + "." + selectedConfiguration.getName(); //$NON-NLS-1$
+ tc.createBuilder(builder, subId, name, false);
+ }
+
+ // Set the builder values
+ selectedConfiguration.setArtifactName(artifactName);
+ selectedConfiguration.setArtifactExtension(artifactExt);
+ selectedConfiguration.setBuildCommand(makeCommandOnly);
+ selectedConfiguration.setBuildArguments(makeArguments);
+ }
+
+ setDirty(false);
+ }
+
+ /* (non-Javadoc)
+ * @param rawCommand
+ * @return
+ */
+ private String parseMakeArgs(String rawCommand) {
+ StringBuffer result = new StringBuffer();
+
+ // Parse out the command
+ String actualCommand = parseMakeCommand(rawCommand);
+
+ // The flags and targets are anything not in the command
+ String arguments = rawCommand.substring(actualCommand.length());
+
+ // If there aren't any, we can stop
+ if (arguments.length() == 0) {
+ return result.toString().trim();
+ }
+
+ String[] tokens = arguments.trim().split("\\s"); //$NON-NLS-1$
+ /*
+ * Cases to consider
+ * --<flag> Sensible, modern single flag. Add to result and continue.
+ * -<flags> Flags in single token, add to result and stop
+ * -<flag_with_arg> ARG Flag with argument. Add next token if valid arg.
+ * -<mixed_flags> ARG Mix of flags, one takes arg. Add next token if valid arg.
+ * -<flag_with_arg>ARG Corrupt case where next token should be arg but isn't
+ * -<flags> [target].. Flags with no args, another token, add flags and stop.
+ */
+ Pattern flagPattern = Pattern.compile("C|f|I|j|l|O|W"); //$NON-NLS-1$
+ // Look for a '-' followed by 1 or more flags with no args and exactly 1 that expects args
+ Pattern mixedFlagWithArg = Pattern.compile("-[^CfIjloW]*[CfIjloW]{1}.+"); //$NON-NLS-1$
+ for (int i = 0; i < tokens.length; ++i) {
+ String currentToken = tokens[i];
+ if (currentToken.startsWith("--")) { //$NON-NLS-1$
+ result.append(currentToken);
+ result.append(" "); //$NON-NLS-1$
+ } else if (currentToken.startsWith("-")) { //$NON-NLS-1$
+ // Is there another token
+ if (i + 1 >= tokens.length) {
+ //We are done
+ result.append(currentToken);
+ } else {
+ String nextToken = tokens[i + 1];
+ // Are we expecting arguments
+ Matcher flagMatcher = flagPattern.matcher(currentToken);
+ if (!flagMatcher.find()) {
+ // Evalutate whether the next token should be added normally
+ result.append(currentToken);
+ result.append(" "); //$NON-NLS-1$
+ } else {
+ // Look for the case where there is no space between flag and arg
+ if (mixedFlagWithArg.matcher(currentToken).matches()) {
+ // Add this single token and keep going
+ result.append(currentToken);
+ result.append(" "); //$NON-NLS-1$
+ } else {
+ // Add this token and the next one right now
+ result.append(currentToken);
+ result.append(" "); //$NON-NLS-1$
+ result.append(nextToken);
+ result.append(" "); //$NON-NLS-1$
+ // Skip the next token the next time through, though
+ ++i;
+ }
+ }
+ }
+ }
+ }
+
+ return result.toString().trim();
+ }
+
+ /* (non-Javadoc)
+ *
+ * @param string
+ * @return
+ */
+ private String parseMakeCommand(String rawCommand) {
+ StringBuffer command = new StringBuffer();
+ boolean hasSpace = false;
+
+ // Try to separate out the command from the arguments
+ String[] result = rawCommand.split("\\s"); //$NON-NLS-1$
+
+ /*
+ * Here are the cases to consider:
+ * cmd First segment is last segment, assume is command
+ * cmd [flags] First segment is the command
+ * path/cmd [flags] Same as above
+ * path with space/make [flags] Must append each segment up-to flags as command
+ */
+ for (int i = 0; i < result.length; ++i) {
+ // Get the segment
+ String cmdSegment = result[i];
+ // If there is not another segment, we found the end
+ if (i + 1 >= result.length) {
+ command.append(cmdSegment);
+ } else {
+ // See if the next segment is the start of the flags
+ String nextSegment = result[i + 1];
+ if (nextSegment.startsWith("-")) { //$NON-NLS-1$
+ // we have found the end of the command
+ command.append(cmdSegment);
+ break;
+ } else {
+ command.append(cmdSegment);
+ // Add the whitespace back
+ command.append(" "); //$NON-NLS-1$
+ hasSpace = true;
+ }
+ }
+ }
+
+// if (hasSpace == true) {
+// return "\"" + command.toString().trim() + "\"";
+// } else {
+ return command.toString().trim();
+// }
+ }
+
+ public IPreferenceStore getPreferenceStore() {
+ return null;
+ }
+ /* (non-Javadoc)
+ * Initialize the "Use default command" field
+ */
+ public void setVisible(boolean visible) {
+ if (visible) {
+ useDefaultMake = !parent.getSelectedConfiguration().hasOverriddenBuildCommand();
+ makeCommandDefault.setSelection(useDefaultMake);
+ makeCommandEntry.setEditable(!makeCommandDefault.getSelection());
+ }
+ super.setVisible(visible);
+ }
+
+ /* (non-Javadoc)
+ * Event handler for the use default check box in the make command group
+ */
+ protected void handleUseDefaultPressed() {
+ // If the state of the button is unchecked, then we want to enable the edit widget
+ boolean checked = makeCommandDefault.getSelection();
+ if (checked == true) {
+ // TODO: This should NOT change the configuration immediately -
+ // it should set an intermediate variable and wait for OK/Apply
+ parent.getSelectedConfiguration().setBuildCommand(null);
+ parent.getSelectedConfiguration().setBuildArguments(null);
+ makeCommandEntry.setEditable(false);
+ } else {
+ makeCommandEntry.setEditable(true);
+ }
+ setValues();
+ }
+
+ /**
+ * Sets the "dirty" state
+ */
+ public void setDirty(boolean b) {
+ dirty = b;
+ }
+
+ /**
+ * Returns the "dirty" state
+ */
+ public boolean isDirty() {
+ return dirty;
+ }
+
+}
diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/ErrorParserBlock.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/ErrorParserBlock.java
index 58008294ad..e45477eba6 100644
--- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/ErrorParserBlock.java
+++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/ErrorParserBlock.java
@@ -1,5 +1,5 @@
/**********************************************************************
- * Copyright (c) 2002,2003 Rational Software Corporation and others.
+ * Copyright (c) 2002,2004 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
@@ -12,75 +12,119 @@
package org.eclipse.cdt.managedbuilder.internal.ui;
import org.eclipse.cdt.core.CCorePlugin;
-import org.eclipse.cdt.managedbuilder.core.ITarget;
import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
import org.eclipse.cdt.managedbuilder.core.IManagedBuildInfo;
+import org.eclipse.cdt.managedbuilder.core.IProjectType;
+import org.eclipse.cdt.managedbuilder.core.IConfiguration;
import org.eclipse.cdt.managedbuilder.ui.wizards.NewManagedProjectOptionPage;
import org.eclipse.cdt.managedbuilder.ui.wizards.NewManagedProjectWizard;
import org.eclipse.cdt.ui.dialogs.AbstractErrorParserBlock;
import org.eclipse.cdt.ui.dialogs.ICOptionContainer;
import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jface.preference.IPreferenceStore;
public class ErrorParserBlock extends AbstractErrorParserBlock {
public ErrorParserBlock() {
- super(null);
+ super();
}
- protected String[] getErrorParserIDs(ITarget target) {
- // Get the list of error parsers specified with this Target
- String[] errorParsers = target.getErrorParserList();
+ protected String[] getErrorParserIDs(IConfiguration config) {
+ // Get the list of error parsers specified with this Configuration
+ String[] errorParsers = config.getErrorParserList();
if (errorParsers != null) {
return errorParsers;
}
else {
- // If no error parsers are specified by the target, the default is
+ // If no error parsers are specified by the configuration, the default is
// all error parsers
return CCorePlugin.getDefault().getAllErrorParsersIDs();
}
}
protected String[] getErrorParserIDs(IProject project) {
- ITarget target = ManagedBuildManager.getSelectedTarget(project);
- if (target == null) {
+ IConfiguration config = ManagedBuildManager.getSelectedConfiguration(project);
+ if (config == null) {
// This case occurs when modifying the properties of an existing
// managed build project, and the user selects the error parsers
// page before the "C/C++ Build" page.
// Get the build information
IManagedBuildInfo info = ManagedBuildManager.getBuildInfo(project);
- target = info.getDefaultTarget();
+ config = info.getDefaultConfiguration();
}
- if (target != null) {
- return getErrorParserIDs(target);
+ if (config != null) {
+ return getErrorParserIDs(config);
} else {
return CCorePlugin.getDefault().getAllErrorParsersIDs();
}
}
protected String[] getErrorParserIDs() {
- // Get the currently selected target from the page's container
+ // Get the currently selected configuration from the page's container
// This is invoked by the managed builder new project wizard before the
// project is created.
ICOptionContainer container = getContainer();
if (container instanceof NewManagedProjectOptionPage) {
NewManagedProjectOptionPage parent = (NewManagedProjectOptionPage)getContainer();
NewManagedProjectWizard wizard = (NewManagedProjectWizard)parent.getWizard();
- ITarget target = wizard.getSelectedTarget();
- return getErrorParserIDs(target);
+ // TODO: This is wrong since the Wizard does not have a selected configuration!
+ IProjectType proj = wizard.getSelectedProjectType();
+ IConfiguration[] configs = proj.getConfigurations();
+ if (configs.length > 0)
+ return getErrorParserIDs(configs[0]);
+ else
+ return new String[0];
}
return CCorePlugin.getDefault().getAllErrorParsersIDs();
}
public void saveErrorParsers(IProject project, String[] parsers) {
- ITarget target = ManagedBuildManager.getSelectedTarget(project);
- if (target != null) {
+ IConfiguration config = ManagedBuildManager.getSelectedConfiguration(project);
+ if (config != null) {
StringBuffer buf = new StringBuffer();
for (int i = 0; i < parsers.length; i++) {
if (i > 0) buf.append(';');
buf.append(parsers[i]);
}
- target.setErrorParserIds(buf.toString());
+ config.setErrorParserIds(buf.toString());
}
}
+
+ public IPreferenceStore getPreferenceStore() {
+ return null;
+ }
+
+ protected void setValues() {
+ super.setValues();
+
+ // TODO: This reset belongs in AbstractErrorParserBlock.java?
+ // Reset the "dirty" flag
+ listDirty = false;
+ }
+
+ public void performApply(IProgressMonitor monitor) throws CoreException {
+ super.performApply(monitor);
+
+ // TODO: This reset belongs in AbstractErrorParserBlock.java?
+ // Reset the "dirty" flag
+ listDirty = false;
+
+ }
+
+ /**
+ * Sets the "dirty" state
+ */
+ public void setDirty(boolean b) {
+ listDirty = b;
+ }
+
+ /**
+ * Returns the "dirty" state
+ */
+ public boolean isDirty() {
+ return listDirty;
+ }
}
diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/ManagedBuildOptionBlock.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/ManagedBuildOptionBlock.java
new file mode 100644
index 0000000000..5cb78b1608
--- /dev/null
+++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/ManagedBuildOptionBlock.java
@@ -0,0 +1,271 @@
+/**********************************************************************
+ * Copyright (c) 2002,2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v0.5
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v05.html
+ *
+ * Contributors:
+ * IBM Rational Software - Initial API and implementation
+ * **********************************************************************/
+package org.eclipse.cdt.managedbuilder.internal.ui;
+
+import java.util.Iterator;
+
+import org.eclipse.cdt.ui.dialogs.BinaryParserBlock;
+import org.eclipse.cdt.ui.dialogs.ICOptionPage;
+import org.eclipse.cdt.ui.dialogs.TabFolderOptionBlock;
+import org.eclipse.cdt.managedbuilder.ui.properties.BuildPropertyPage;
+import org.eclipse.cdt.managedbuilder.ui.properties.ResourceBuildPropertyPage;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.ui.help.WorkbenchHelp;
+
+public class ManagedBuildOptionBlock extends TabFolderOptionBlock {
+
+ private ToolsSettingsBlock toolsSettingsBlock;
+ private BuildSettingsBlock buildSettingsBlock;
+ private ErrorParserBlock errParserBlock;
+ private BinaryParserBlock binaryParserBlock;
+ private Object element;
+
+ /**
+ * @param parent
+ */
+ public ManagedBuildOptionBlock(BuildPropertyPage parent) {
+ super(parent, false);
+ }
+
+ public ManagedBuildOptionBlock(ResourceBuildPropertyPage resParent) {
+ super(resParent, false);
+ }
+
+ public BuildPropertyPage getBuildPropertyPage() {
+ return (BuildPropertyPage)fParent;
+ }
+
+ public ResourceBuildPropertyPage getResourceBuildPropertyPage() {
+ return (ResourceBuildPropertyPage)fParent;
+ }
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.ui.dialogs.TabFolderOptionBlock#addTabs()
+ */
+ protected void addTabs() {
+
+ if (element instanceof IProject) {
+ addTab(toolsSettingsBlock = new ToolsSettingsBlock((BuildPropertyPage) fParent, element));
+ addTab(buildSettingsBlock = new BuildSettingsBlock((BuildPropertyPage) fParent));
+ addTab(errParserBlock = new ErrorParserBlock());
+ addTab(binaryParserBlock = new BinaryParserBlock());
+ } else if (element instanceof IFile) {
+ addTab(toolsSettingsBlock = new ToolsSettingsBlock((ResourceBuildPropertyPage) fParent, element));
+ }
+ }
+
+ public ToolsSettingsBlock getToolsSettingsBlock() {
+ return toolsSettingsBlock;
+ }
+
+ public BuildSettingsBlock getBuildSettingsBlock() {
+ return buildSettingsBlock;
+ }
+
+ public BinaryParserBlock getBinaryParserBlock() {
+ return binaryParserBlock;
+ }
+
+ public ErrorParserBlock getErrorParserBlock() {
+ return errParserBlock;
+ }
+
+ public Control createContents(Composite parent, Object element) {
+ this.element = element;
+ Control control = super.createContents( parent );
+ ((GridLayout)((Composite)control).getLayout()).marginWidth = 1;
+ GridData gd = new GridData(GridData.FILL_BOTH);
+ ((Composite)control).setLayoutData(gd);
+
+ // TODO
+ //if (getToolsSettingsBlock() != null)
+ // WorkbenchHelp.setHelp(getToolsSettingsBlock().getControl(), ManagedBuilderHelpContextIds.MAN_PROJ_ERROR_PARSER);
+ if (getErrorParserBlock() != null)
+ WorkbenchHelp.setHelp(getErrorParserBlock().getControl(), ManagedBuilderHelpContextIds.MAN_PROJ_ERROR_PARSER);
+
+ return control;
+ }
+
+ protected void initializeValues() {
+ if (getToolsSettingsBlock()!= null) {
+ getToolsSettingsBlock().initializeValues();
+ }
+ if (getBuildSettingsBlock()!= null) {
+ getBuildSettingsBlock().initializeValues();
+ }
+ if (getErrorParserBlock()!= null) {
+ // TODO
+ //getErrorParserBlock().initializeValues();
+ }
+ if (getBinaryParserBlock()!= null) {
+ // TODO
+ //getBinaryParserBlock().initializeValues();
+ }
+ }
+
+ public void updateValues() {
+ if (element instanceof IProject) {
+ if (getToolsSettingsBlock() != null) {
+ getToolsSettingsBlock().updateValues();
+ }
+ if (getBuildSettingsBlock() != null) {
+ getBuildSettingsBlock().updateValues();
+ }
+ if (getErrorParserBlock() != null) {
+ getErrorParserBlock().updateValues();
+ }
+ if (getBinaryParserBlock() != null) {
+ // TODO
+ //getBinaryParserBlock().updateValues();
+ }
+ } else if( element instanceof IFile) {
+ if (getToolsSettingsBlock() != null) {
+ getToolsSettingsBlock().updateValues();
+ }
+ }
+ }
+
+ public void setValues() {
+ if (element instanceof IProject) {
+ if (getToolsSettingsBlock() != null) {
+ getToolsSettingsBlock().updateValues();
+ }
+ if (getBuildSettingsBlock() != null) {
+ getBuildSettingsBlock().setValues();
+ }
+ if (getErrorParserBlock() != null) {
+ // TODO
+ //getErrorParserBlock().setValues();
+ }
+ if (getBinaryParserBlock() != null) {
+ // TODO
+ //getBinaryParserBlock().setValues();
+ }
+ } else if (element instanceof IFile) {
+ if (getToolsSettingsBlock() != null) {
+ getToolsSettingsBlock().updateValues();
+ }
+ }
+ }
+
+ public void removeValues(String id) {
+ if (element instanceof IProject) {
+ if (getToolsSettingsBlock() != null) {
+ getToolsSettingsBlock().removeValues(id);
+ }
+ if (getBuildSettingsBlock() != null) {
+ getBuildSettingsBlock().removeValues(id);
+ }
+ if (getErrorParserBlock() != null) {
+ // TODO
+ //getErrorParserBlock().removeValues(id);
+ }
+ if (getBinaryParserBlock() != null) {
+ // TODO
+ //getBinaryParserBlock().removeValues(id);
+ }
+ } else if (element instanceof IFile) {
+ if (getToolsSettingsBlock()!= null) {
+ getToolsSettingsBlock().removeValues(id);
+ }
+ }
+ }
+
+ public IPreferenceStore getPreferenceStore()
+ {
+ if (element instanceof IProject) {
+ if (getCurrentPage() instanceof ToolsSettingsBlock) {
+ return toolsSettingsBlock.getPreferenceStore();
+ }
+ if (getCurrentPage() instanceof BuildSettingsBlock) {
+ return buildSettingsBlock.getPreferenceStore();
+ }
+ if (getCurrentPage() instanceof ErrorParserBlock) {
+ return errParserBlock.getPreferenceStore();
+ }
+ if (getCurrentPage() instanceof BinaryParserBlock) {
+ return null;
+ }
+ } else if( element instanceof IFile) {
+ if (getCurrentPage() instanceof ToolsSettingsBlock) {
+ return toolsSettingsBlock.getPreferenceStore();
+ }
+ }
+ return null;
+ }
+
+ public IPreferenceStore getToolSettingsPreferenceStore()
+ {
+ return toolsSettingsBlock.getPreferenceStore();
+ }
+
+ public void update() {
+ super.update();
+ ICOptionPage tab = getCurrentPage();
+ // Currently, other settings are per-config, while binary parser settings are per-project
+ if (tab instanceof BinaryParserBlock) {
+ ((BuildPropertyPage)fParent).enableConfigSelection(false);
+ } else {
+ if(element instanceof IProject) {
+ ((BuildPropertyPage)fParent).enableConfigSelection(true);
+ } else if ( element instanceof IFile) {
+ ((ResourceBuildPropertyPage)fParent).enableConfigSelection(true);
+ }
+ }
+ }
+
+ /**
+ * Sets the dirty state of the contained pages
+ */
+ public void setDirty(boolean b) {
+ Iterator iter = getOptionPages().iterator();
+ while (iter.hasNext()) {
+ ICOptionPage tab = (ICOptionPage)iter.next();
+ if (tab instanceof BuildSettingsBlock) {
+ ((BuildSettingsBlock)tab).setDirty(b);
+ } else if (tab instanceof ToolsSettingsBlock) {
+ ((ToolsSettingsBlock)tab).setDirty(b);
+ } else if (tab instanceof ErrorParserBlock) {
+ ((ErrorParserBlock)tab).setDirty(b);
+ } else if (tab instanceof BinaryParserBlock) {
+ //TODO ManagedBuildSystem needs its own binary parser block
+ }
+ }
+ }
+
+ /**
+ * Returns <code> true <code/> if any of the pages are dirty
+ * @return boolean
+ */
+ public boolean isDirty() {
+ Iterator iter = getOptionPages().iterator();
+ while (iter.hasNext()) {
+ ICOptionPage tab = (ICOptionPage)iter.next();
+ if (tab instanceof BuildSettingsBlock) {
+ if (((BuildSettingsBlock)tab).isDirty()) return true;
+ } else if (tab instanceof ToolsSettingsBlock) {
+ if (((ToolsSettingsBlock)tab).isDirty()) return true;
+ } else if (tab instanceof ErrorParserBlock) {
+ if (((ErrorParserBlock)tab).isDirty()) return true;
+ } else if (tab instanceof BinaryParserBlock) {
+ //TODO ManagedBuildSystem needs its own binary parser block
+ }
+
+ }
+ return false;
+ }
+
+}
diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/ManagedMakeStartup.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/ManagedMakeStartup.java
deleted file mode 100644
index e4954e03d6..0000000000
--- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/ManagedMakeStartup.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2004 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM - Initial API and implementation
- **********************************************************************/
-package org.eclipse.cdt.managedbuilder.internal.ui;
-
-import org.eclipse.cdt.managedbuilder.ui.actions.UpdateManagedProjectAction;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.dialogs.ProgressMonitorDialog;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.IStartup;
-
-/**
- *
- */
-public class ManagedMakeStartup implements IStartup {
- /* (non-Javadoc)
- * @see org.eclipse.ui.IStartup#earlyStartup()
- */
- public void earlyStartup() {
- // Get any 1.2 projects from the workspace
- final IProject[] projects = UpdateManagedProjectAction.getVersion12Projects();
- if (projects.length > 0) {
- Display.getDefault().asyncExec(new Runnable() {
- // Start the process that will update the 1.2 projects
- public void run() {
- Shell shell = ManagedBuilderUIPlugin.getDefault().getShell();
- for (int index = projects.length - 1; index >= 0; --index) {
- IProject project = projects[index];
- boolean shouldUpdate = MessageDialog.openQuestion(shell,
- ManagedBuilderUIMessages.getResourceString("ManagedBuilderStartup.update.12x.title"), //$NON-NLS-1$
- ManagedBuilderUIMessages.getFormattedString("ManagedBuilderStartup.update.12x.message", new String[]{project.getName()})); //$NON-NLS-1$
- // Go for it
- if (shouldUpdate) {
- ProgressMonitorDialog pd = new ProgressMonitorDialog(shell);
- UpdateManagedProjectAction.run(false, pd, project);
- }
- }
-
- }
- });
- }
- }
-}
diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/ManagedProjectOptionBlock.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/ManagedProjectOptionBlock.java
index 02cc74db91..8579d0b457 100644
--- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/ManagedProjectOptionBlock.java
+++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/ManagedProjectOptionBlock.java
@@ -1,7 +1,5 @@
-package org.eclipse.cdt.managedbuilder.internal.ui;
-
/**********************************************************************
- * Copyright (c) 2002,2003 Rational Software Corporation and others.
+ * Copyright (c) 2002,2003 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
@@ -10,10 +8,13 @@ package org.eclipse.cdt.managedbuilder.internal.ui;
* Contributors:
* IBM Rational Software - Initial API and implementation
* **********************************************************************/
+package org.eclipse.cdt.managedbuilder.internal.ui;
import org.eclipse.cdt.ui.dialogs.BinaryParserBlock;
import org.eclipse.cdt.ui.dialogs.ICOptionContainer;
import org.eclipse.cdt.ui.dialogs.TabFolderOptionBlock;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.help.WorkbenchHelp;
@@ -27,7 +28,7 @@ public class ManagedProjectOptionBlock extends TabFolderOptionBlock {
* @param parent
*/
public ManagedProjectOptionBlock(ICOptionContainer parent) {
- super(parent);
+ super(parent, false);
}
/* (non-Javadoc)
@@ -49,9 +50,27 @@ public class ManagedProjectOptionBlock extends TabFolderOptionBlock {
public Control createContents(Composite parent) {
Control control = super.createContents( parent );
+ ((GridLayout)((Composite)control).getLayout()).marginWidth = 1;
+ GridData gd = new GridData(GridData.FILL_BOTH);
+ ((Composite)control).setLayoutData(gd);
+
if (getErrorParserBlock()!= null)
WorkbenchHelp.setHelp(getErrorParserBlock().getControl(), ManagedBuilderHelpContextIds.MAN_PROJ_ERROR_PARSER);
return control;
}
+
+ public void updateValues() {
+ if (getErrorParserBlock()!= null) {
+ getErrorParserBlock().updateValues();
+ }
+ if (getBinaryParserBlock()!= null) {
+ // TODO
+ //getBinaryParserBlock().updateValues();
+ }
+ }
+
+ public void update() {
+ super.update();
+ }
}
diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/PluginResources.properties b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/PluginResources.properties
index 86749492e3..706c7b43a4 100644
--- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/PluginResources.properties
+++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/PluginResources.properties
@@ -3,16 +3,9 @@
# All Rights Reserved.
#########################################
-# ------- 1.2 Project Update Messages -------
-ManagedBuilderStartup.update.12x.title=Update Managed Builder Project
-ManagedBuilderStartup.update.12x.message=The project {0} has been detected in your workspace.\n Its build settings are stored in a format that is no longer supported.\n Would you like to convert them now?
-ManagedBuilderStartup.update.exception.error=Error
-ManagedBuilderStartup.update.exception.message=Error updating project {0}
-ManagedBuildConvert.12x.monitor.message.project=Updating build settings for project {0}
-ManagedBuildConvert.12x.monitor.message.backup=Backing up the settings file for {0}
-ManagedBuildConvert.12x.warning.title=Backup File Already Exists
-ManagedBuildConvert.12x.warning.message=A backup file already exists for the project {0}.\n Shall I try to convert the project anyway?
-ManagedBuildConvert.12x.cancelled.message=The update operation has been cancelled.\n The build system will not be able to read the project settings until you update the project.
+# ------- Project Update Messages -------
+ManagedBuilderStartup.update.20x.title=Update Managed Builder Project
+ManagedBuilderStartup.update.20x.message=The project {0} has been detected in your workspace.\n Its build settings are stored in a format that is no longer supported.\n Would you like to convert them now?
# ------- NewProjectCreationPluginPage-------
MngMakeProjectWizard.op_error=Managed Make Error
@@ -36,12 +29,12 @@ MngCCWizardSettings.title=Managed Make C++ Settings
MngCCWizardSettings.description=Define the Managed Make C++ build settings.
# -- Strings for the platform selection page --
-MngMakeProjectWizard.config.title=Select a Target
+MngMakeProjectWizard.config.title=Select a type of project
MngMakeProjectWizard.config.desc=Select the platform and configurations you wish to deploy on
-PlatformBlock.tip.platform=Select the target of the build goal
-PlatformBlock.label.platform=Build Target:
+PlatformBlock.tip.platform=Select the type of project for the build goal
+PlatformBlock.label.platform=Project Type:
PlatformBlock.label.configs=Configurations:
-PlatformBlock.label.showall=Show All Targets
+PlatformBlock.label.showall=Show All Project Types
PlatformBlock.message.error.noconfigs=You must select at least one configuration
# -- Strings for the additional options tab
@@ -49,14 +42,12 @@ MngMakeProjectWizard.options.title=Additional Project Settings
MngMakeProjectWizard.options.desc=Define the inter-project dependencies, if any.
# ----------- Configuration Selection Page -----------
-BuildPropertyPage.label.Platform=Platform:
+BuildPropertyPage.label.Platform=Project Type:
BuildPropertyPage.label.Configuration=Configuration:
BuildPropertyPage.label.Active=Active configuration
-BuildPropertyPage.label.Settings=Configuration settings
+BuildPropertyPage.label.Settings=Configuration Settings
BuildPropertyPage.label.AddConfButton=Manage...
BuildPropertyPage.selection.configuration.all=All configurations
-BuildPropertyPage.label.ToolTree=Tools
-BuildPropertyPage.label.ToolOptions=Options
BuildPropertyPage.tip.platform=Select a platform for the project
BuildPropertyPage.tip.config=Select the configuration to edit
BuildPropertyPage.tip.addconf=Add configurations for the platform
@@ -64,6 +55,37 @@ BuildPropertyPage.tip.remconf=Remove configurations for the platform
BuildPropertyPage.manage.title=Manage
BuildPropertyPage.error.Unknown_tree_element=Unknown type of element in tree of type {0}
BuildPropertyPage.error.version_low=The project settings are stored in an earlier format.\nYou must upgrade the project before the settings can be upgraded.
+BuildPropertyPage.defaults.title=Reset Configuration Tools
+BuildPropertyPage.defaults.message=This action will reset all of the tools in the selected configuration to their default settings.\n\nDo you want to proceed?
+BuildPropertyPage.changes.save.title=Apply Configuration Changes
+BuildPropertyPage.changes.save.question=You have made changes to the {0} configuration.\n\nDo you want to apply these changes before switching to the {1} configuration?
+BuildPropertyPage.changes.save.error=The configuration changes could not be applied.
+
+#--------------- Resource Configuration Selection Page --------------
+ResourceBuildPropertyPage.defaults.title=Reset Resource Configuration Tool
+ResourceBuildPropertyPage.defaults.message=This action will reset all options of the tool in the current resource configuration to their default settings.\n\nDo you want to proceed?
+
+# ----------- Tools Settings Block -----------
+ToolsSettingsBlock.label.Settings=Tool Settings
+ToolsSettingsBlock.label.ToolTree=Tools
+ToolsSettingsBlock.label.ToolOptions=Options
+
+# ----------- Build Settings Block -----------
+BuildSettingsBlock.label.Settings=Build Settings
+BuildSettingsBlock.label.makecmdgroup=Make command
+BuildSettingsBlock.label.makecmddef=Use default command
+BuildSettingsBlock.label.output.group=Build output
+BuildSettingsBlock.label.output.name=Artifact name:
+BuildSettingsBlock.label.output.extension=Artifact extension:
+
+# ------------Resource Configuration Selection Page
+ResourceBuildPropertyPage.label.ActiveResource=Active Resource configuration
+ResourceBuildPropertyPage.label.ResourceSettings=Resource Configuration settings
+ResourceBuildPropertyPage.label.Configuration=Configuration:
+ResourceBuildPropertyPage.label.ExcludeCheckBox= Exclude from build
+ResourceBuildPropertyPage.selection.configuration.all=All configurations
+ResourceBuildPropertyPage.label.ToolTree=Tools
+ResourceBuildPropertyPage.label.ToolOptions=Options
# ----------- Entry Dialog -----------
BrowseEntryDialog.error.Folder_name_invalid = Folder name invalid
@@ -81,11 +103,6 @@ NewConfiguration.error.title=Error
NewConfiguration.error.duplicateName=A configuration named "{0}" already exists.
# ----------- Target/Config management dialog -----------------
-ManageConfig.label.makecmdgroup=Make command
-ManageConfig.label.makecmddef=Use default command
-ManageConfig.label.output.group=Build output
-ManageConfig.label.output.name=Artifact name:
-ManageConfig.label.output.extension=Artifact extension:
ManageConfig.label.configs=Manage configurations
ManageConfig.label.restore=Restore
ManageConfig.label.configs.current=Current:
diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/ToolsSettingsBlock.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/ToolsSettingsBlock.java
new file mode 100644
index 0000000000..2da2a71f42
--- /dev/null
+++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/ToolsSettingsBlock.java
@@ -0,0 +1,639 @@
+/**********************************************************************
+ * Copyright (c) 2002,2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v0.5
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v05.html
+ *
+ * Contributors:
+ * QNX Software Systems - Move to Make plugin
+ * Intel Corp - Use in Managed Make system
+***********************************************************************/
+package org.eclipse.cdt.managedbuilder.internal.ui;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Map;
+
+import org.eclipse.cdt.ui.dialogs.AbstractCOptionPage;
+import org.eclipse.cdt.ui.dialogs.ICOptionContainer;
+import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
+import org.eclipse.cdt.managedbuilder.core.IOptionCategory;
+import org.eclipse.cdt.managedbuilder.core.ITool;
+import org.eclipse.cdt.managedbuilder.internal.ui.ManagedBuilderUIPlugin;
+import org.eclipse.cdt.managedbuilder.ui.properties.BuildOptionSettingsPage;
+import org.eclipse.cdt.managedbuilder.ui.properties.BuildPropertyPage;
+import org.eclipse.cdt.managedbuilder.ui.properties.BuildSettingsPage;
+import org.eclipse.cdt.managedbuilder.ui.properties.BuildToolSettingsPage;
+import org.eclipse.cdt.managedbuilder.ui.properties.BuildToolsSettingsStore;
+import org.eclipse.cdt.managedbuilder.ui.properties.ResourceBuildPropertyPage;
+import org.eclipse.cdt.managedbuilder.ui.properties.ToolListContentProvider;
+import org.eclipse.cdt.managedbuilder.ui.properties.ToolListLabelProvider;
+import org.eclipse.cdt.utils.ui.controls.ControlFactory;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.SashForm;
+import org.eclipse.swt.custom.ScrolledComposite;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Layout;
+import org.eclipse.swt.widgets.Shell;
+
+public class ToolsSettingsBlock extends AbstractCOptionPage {
+
+ /*
+ * String constants
+ */
+ private static final String PREFIX = "ToolsSettingsBlock"; //$NON-NLS-1$
+ private static final String LABEL = PREFIX + ".label"; //$NON-NLS-1$
+ private static final String SETTINGS_LABEL = LABEL + ".Settings"; //$NON-NLS-1$
+ private static final String TREE_LABEL = LABEL + ".ToolTree"; //$NON-NLS-1$
+ private static final String OPTIONS_LABEL = LABEL + ".ToolOptions"; //$NON-NLS-1$
+ private static final int[] DEFAULT_SASH_WEIGHTS = new int[] { 20, 30 };
+
+ /*
+ * Dialog widgets
+ */
+ private TreeViewer optionList;
+ private SashForm sashForm;
+ private Group sashGroup;
+ private Composite settingsPageContainer;
+ private ScrolledComposite containerSC;
+
+ /*
+ * Bookeeping variables
+ */
+ private Map configToPageListMap;
+ private BuildToolsSettingsStore settingsStore;
+ private Map settingsStoreMap;
+ private BuildPropertyPage parent;
+ private ResourceBuildPropertyPage resParent;
+ private BuildSettingsPage currentSettingsPage;
+ private IOptionCategory selectedCategory;
+ private ToolListContentProvider provider;
+ private ITool selectedTool;
+ private Object element;
+
+ /**
+ * The minimum page size; 200 by 200 by default.
+ *
+ * @see #setMinimumPageSize
+ */
+ private Point minimumPageSize = new Point(200, 200);
+
+ /**
+ * Layout for the page container.
+ *
+ */
+ private class PageLayout extends Layout {
+ public void layout(Composite composite, boolean force) {
+ Rectangle rect = composite.getClientArea();
+ Control[] children = composite.getChildren();
+ for (int i = 0; i < children.length; i++) {
+ children[i].setSize(rect.width, rect.height);
+ }
+ }
+ public Point computeSize(Composite composite, int wHint, int hHint, boolean force) {
+ if (wHint != SWT.DEFAULT && hHint != SWT.DEFAULT) {
+ return new Point(wHint, hHint);
+ }
+ int x = minimumPageSize.x;
+ int y = minimumPageSize.y;
+
+ Control[] children = composite.getChildren();
+ for (int i = 0; i < children.length; i++) {
+ Point size = children[i].computeSize(SWT.DEFAULT, SWT.DEFAULT, force);
+ x = Math.max(x, size.x);
+ y = Math.max(y, size.y);
+ }
+ if (wHint != SWT.DEFAULT) {
+ x = wHint;
+ }
+ if (hHint != SWT.DEFAULT) {
+ y = hHint;
+ }
+ return new Point(x, y);
+ }
+ }
+
+ /*
+ * Constructor
+ */
+ public ToolsSettingsBlock(BuildPropertyPage parent, Object element)
+ {
+ super(ManagedBuilderUIMessages.getResourceString(SETTINGS_LABEL));
+ super.setContainer(parent);
+ this.parent = parent;
+ configToPageListMap = new HashMap();
+ this.element = element;
+ }
+
+ public ToolsSettingsBlock(ResourceBuildPropertyPage resParent, Object element)
+ {
+ super(ManagedBuilderUIMessages.getResourceString(SETTINGS_LABEL));
+ super.setContainer((ICOptionContainer) resParent);
+ this.resParent = resParent;
+ configToPageListMap = new HashMap();
+ this.element = element;
+ }
+
+ public void createControl(Composite parent) {
+
+ // Create the sash form
+ sashForm = new SashForm(parent, SWT.NONE);
+ sashForm.setOrientation(SWT.HORIZONTAL);
+ sashForm.setLayoutData(new GridData(GridData.FILL_BOTH));
+ GridLayout layout = new GridLayout();
+ layout.numColumns = 2;
+ layout.marginHeight = 5;
+ layout.marginWidth = 5;
+ sashForm.setLayout(layout);
+
+ setControl(sashForm);
+ createSelectionArea(sashForm);
+ createEditArea(sashForm);
+ initializeSashForm();
+
+ //WorkbenchHelp.setHelp(composite, ManagedBuilderHelpContextIds.MAN_PROJ_BUILD_PROP);
+ }
+
+ protected void createSelectionArea (Composite parent) {
+ // Create a label and list viewer
+ Composite composite = ControlFactory.createComposite(parent, 1);
+ optionList = new TreeViewer(composite, SWT.SINGLE|SWT.H_SCROLL|SWT.V_SCROLL|SWT.BORDER);
+ optionList.addSelectionChangedListener(new ISelectionChangedListener() {
+ public void selectionChanged(SelectionChangedEvent event) {
+ handleOptionSelection();
+ }
+ });
+ optionList.getControl().setLayoutData(new GridData(GridData.FILL_BOTH));
+ optionList.setLabelProvider(new ToolListLabelProvider());
+ }
+
+ /* (non-Javadoc)
+ * Method displayOptionsForTool.
+ * @param toolReference
+ */
+ private void displayOptionsForCategory(IOptionCategory category) {
+ // Do nothing if the selected category is is unchanged
+ if (category == selectedCategory) {
+ return;
+ }
+ selectedTool = null;
+ selectedCategory = category;
+
+ // Cache the current build setting page
+ BuildSettingsPage oldPage = currentSettingsPage;
+ currentSettingsPage = null;
+
+ // Create a new settings page if necessary
+ List pages = getPagesForConfig();
+ ListIterator iter = pages.listIterator();
+ while (iter.hasNext()) {
+ BuildSettingsPage page = (BuildSettingsPage) iter.next();
+ if (page instanceof BuildOptionSettingsPage &&
+ ((BuildOptionSettingsPage)page).isForCategory(category)) {
+ currentSettingsPage = page;
+ break;
+ }
+ }
+ if (currentSettingsPage == null) {
+ if ( this.element instanceof IProject) {
+ currentSettingsPage = new BuildOptionSettingsPage(parent.getSelectedConfiguration(), category);
+ pages.add(currentSettingsPage);
+ currentSettingsPage.setContainer(parent);
+ } else if ( this.element instanceof IFile) {
+ currentSettingsPage = new BuildOptionSettingsPage(resParent.getCurrentResourceConfig(), category);
+ pages.add(currentSettingsPage);
+ currentSettingsPage.setContainer(resParent);
+ }
+ if (currentSettingsPage.getControl() == null) {
+ currentSettingsPage.createControl(settingsPageContainer);
+ }
+ }
+
+ // Make all the other pages invisible
+ Control[] children = settingsPageContainer.getChildren();
+ Control currentControl = currentSettingsPage.getControl();
+ for (int i = 0; i < children.length; i++) {
+ if (children[i] != currentControl)
+ children[i].setVisible(false);
+ }
+ currentSettingsPage.setVisible(true);
+
+ // save the last page build options.
+ // If the last page is tool page then parse all the options
+ // and put it in the appropriate preference store.
+ if (oldPage != null){
+ if(oldPage instanceof BuildOptionSettingsPage) {
+ ((BuildOptionSettingsPage)oldPage).storeSettings();
+ }
+ else if(oldPage instanceof BuildToolSettingsPage) {
+ ((BuildToolSettingsPage)oldPage).storeSettings();
+ //((BuildToolSettingsPage)oldPage).parseAllOptions();
+ }
+ }
+ //update the field editors in the current page
+ if(currentSettingsPage instanceof BuildOptionSettingsPage)
+ ((BuildOptionSettingsPage)currentSettingsPage).updateFields();
+
+ if (oldPage != null)
+ oldPage.setVisible(false);
+
+ // Set the size of the scrolled area
+ containerSC.setMinSize(currentSettingsPage.computeSize());
+ settingsPageContainer.layout();
+ }
+
+ /* (non-Javadoc)
+ * @param tool
+ */
+ private void displayOptionsForTool(ITool tool) {
+ if (tool == selectedTool) {
+ return;
+ }
+ // Unselect the category
+ selectedCategory = null;
+ // record that the tool selection has changed
+ selectedTool = tool;
+
+ // Cache the current build setting page
+ BuildSettingsPage oldPage = currentSettingsPage;
+ currentSettingsPage = null;
+
+ // Create a new page if we need one
+ List pages = getPagesForConfig();
+ ListIterator iter = pages.listIterator();
+ while (iter.hasNext()) {
+ BuildSettingsPage page = (BuildSettingsPage) iter.next();
+ if (page instanceof BuildToolSettingsPage &&
+ ((BuildToolSettingsPage)page).isForTool(tool)) {
+ currentSettingsPage = page;
+ break;
+ }
+ }
+ if (currentSettingsPage == null) {
+ if ( this.element instanceof IProject) {
+ currentSettingsPage = new BuildToolSettingsPage(parent.getSelectedConfiguration(), tool);
+ pages.add(currentSettingsPage);
+ currentSettingsPage.setContainer(parent);
+ } else if(this.element instanceof IFile) {
+ currentSettingsPage = new BuildToolSettingsPage(resParent.getCurrentResourceConfig(), tool);
+ pages.add(currentSettingsPage);
+ currentSettingsPage.setContainer(resParent);
+ }
+ if (currentSettingsPage.getControl() == null) {
+ currentSettingsPage.createControl(settingsPageContainer);
+ }
+ }
+ // Make all the other pages invisible
+ Control[] children = settingsPageContainer.getChildren();
+ Control currentControl = currentSettingsPage.getControl();
+ for (int i = 0; i < children.length; i++) {
+ if (children[i] != currentControl)
+ children[i].setVisible(false);
+ }
+
+ // Make the current page visible
+ currentSettingsPage.setVisible(true);
+
+ // save the last page build options.
+ // If the last page is tool page then parse all the options
+ // and put it in the appropriate preference store.
+ if (oldPage != null){
+ if(oldPage instanceof BuildOptionSettingsPage) {
+ ((BuildOptionSettingsPage)oldPage).storeSettings();
+ }
+ else if(oldPage instanceof BuildToolSettingsPage) {
+ ((BuildToolSettingsPage)oldPage).storeSettings();
+ //((BuildToolSettingsPage)oldPage).parseAllOptions();
+ }
+ }
+ //update the field editor that displays all the build options
+ if(currentSettingsPage instanceof BuildToolSettingsPage)
+ ((BuildToolSettingsPage)currentSettingsPage).updateAllOptionField();
+
+ if (oldPage != null)
+ oldPage.setVisible(false);
+
+ // Set the size of the scrolled area
+ containerSC.setMinSize(currentSettingsPage.computeSize());
+ settingsPageContainer.layout();
+ }
+
+ /* (non-Javadoc)
+ * Add the tabs relevant to the project to edit area tab folder.
+ */
+ protected void createEditArea(Composite parent) {
+ containerSC = new ScrolledComposite(parent, SWT.H_SCROLL | SWT.V_SCROLL);
+ containerSC.setExpandHorizontal(true);
+ containerSC.setExpandVertical(true);
+
+ // Add a container for the build settings page
+ settingsPageContainer = new Composite(containerSC, SWT.NULL);
+ settingsPageContainer.setLayout(new PageLayout());
+
+ containerSC.setContent(settingsPageContainer);
+ containerSC.setMinSize(settingsPageContainer.computeSize(SWT.DEFAULT, SWT.DEFAULT));
+ settingsPageContainer.layout();
+ }
+
+ /*
+ * (non-javadoc)
+ * Initialize the relative weights (widths) of the 2 sides of the sash.
+ */
+ protected void initializeSashForm() {
+ sashForm.setWeights(DEFAULT_SASH_WEIGHTS);
+ }
+
+ protected void initializeValues() {
+ setValues();
+ }
+
+ public void updateValues() {
+ setValues();
+ }
+
+ protected void setValues() {
+
+ if (provider == null) {
+// IResource element = parent.getProject();
+ IResource resource = (IResource) element;
+ provider = new ToolListContentProvider(resource.getType());
+ optionList.setContentProvider(provider);
+ }
+ if ( element instanceof IProject ) {
+ optionList.setInput(parent.getSelectedConfiguration());
+ } else if ( element instanceof IFile){
+ optionList.setInput(resParent.getCurrentResourceConfig());
+ }
+
+ optionList.expandAll();
+
+ // Create (or retrieve) the settings store for the configuration/resource configuration
+ BuildToolsSettingsStore store = null;
+ if ( element instanceof IProject ) {
+ store = (BuildToolsSettingsStore) getSettingsStoreMap().get(parent.getSelectedConfiguration().getId());
+ if (store == null) {
+ store = new BuildToolsSettingsStore(parent.getSelectedConfiguration());
+ getSettingsStoreMap().put(parent.getSelectedConfiguration().getId(), store);
+ }
+ } else if ( element instanceof IFile) {
+ store = (BuildToolsSettingsStore) getSettingsStoreMap().get(resParent.getCurrentResourceConfig().getId());
+ if (store == null) {
+ store = new BuildToolsSettingsStore(resParent.getCurrentResourceConfig());
+ getSettingsStoreMap().put(resParent.getCurrentResourceConfig().getId(), store);
+ }
+ }
+ settingsStore = store;
+
+ // Select the first tool in the list
+ Object[] elements = null;
+ Object primary = null;
+ if( element instanceof IProject){
+ elements = provider.getElements(parent.getSelectedConfiguration());
+ } else if ( element instanceof IFile) {
+ elements = provider.getElements(resParent.getCurrentResourceConfig());
+ }
+ primary = elements.length > 0 ? elements[0] : null;
+
+ if (primary != null) {
+ optionList.setSelection(new StructuredSelection(primary));
+ }
+ }
+
+ public void removeValues(String id) {
+ getSettingsStoreMap().remove(id);
+ }
+
+ private void handleOptionSelection() {
+ // Get the selection from the tree list
+ IStructuredSelection selection = (IStructuredSelection) optionList.getSelection();
+
+ // Set the option page based on the selection
+ Object element = selection.getFirstElement();
+ if (element instanceof ITool) {
+ displayOptionsForTool((ITool)element);
+ } else if (element instanceof IOptionCategory) {
+ displayOptionsForCategory((IOptionCategory)element);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.cdt.ui.dialogs.ICOptionPage#performDefaults()
+ */
+ public void performDefaults() {
+ if ( element instanceof IProject) {
+ performDefaults( (IProject)element);
+ } else if ( element instanceof IFile) {
+ performDefaults( (IFile)element);
+ }
+ return;
+ }
+
+ public void performDefaults(IProject project) {
+ // TODO: Should this reset all tools of the configuration, or just
+ // the currently selected tool category? Right now it is all tools.
+
+ // Display a "Confirm" dialog box, since:
+ // 1. The defaults are immediately applied
+ // 2. The action cannot be undone
+ Shell shell = ManagedBuilderUIPlugin.getDefault().getShell();
+ boolean shouldDefault = MessageDialog.openConfirm(shell,
+ ManagedBuilderUIMessages.getResourceString("BuildPropertyPage.defaults.title"), //$NON-NLS-1$
+ ManagedBuilderUIMessages.getResourceString("BuildPropertyPage.defaults.message")); //$NON-NLS-1$
+ if (!shouldDefault) return;
+
+ // Empty the page list
+ List pages = getPagesForConfig();
+ pages.clear();
+
+ // Get the build manager to reset build info for project
+ ManagedBuildManager.resetConfiguration(parent.getProject(), parent.getSelectedConfiguration());
+
+ // Recreate the settings store for the configuration
+ settingsStore = new BuildToolsSettingsStore(parent.getSelectedConfiguration());
+
+ // Write out the build model info
+ ManagedBuildManager.setDefaultConfiguration(parent.getProject(), parent.getSelectedConfiguration());
+ ManagedBuildManager.saveBuildInfo(parent.getProject(), false);
+
+ // Reset the category or tool selection and run selection event handler
+ selectedCategory = null;
+ selectedTool = null;
+ handleOptionSelection();
+
+ setDirty(false);
+ }
+
+ public void performDefaults(IFile file) {
+ // TODO: Should this reset all options of the tool in current resource configuration, or just
+ // the currently selected tool category? Right now it is all options.
+
+ // Display a "Confirm" dialog box, since:
+ // 1. The defaults are immediately applied
+ // 2. The action cannot be undone
+ Shell shell = ManagedBuilderUIPlugin.getDefault().getShell();
+ boolean shouldDefault = MessageDialog.openConfirm(shell,
+ ManagedBuilderUIMessages.getResourceString("ResourceBuildPropertyPage.defaults.title"), //$NON-NLS-1$
+ ManagedBuilderUIMessages.getResourceString("ResourceBuildPropertyPage.defaults.message")); //$NON-NLS-1$
+ if (!shouldDefault) return;
+
+ // Empty the page list
+ List pages = getPagesForConfig();
+ pages.clear();
+
+ // Get the build manager to reset build info for project
+ ManagedBuildManager.resetResourceConfiguration(resParent.getProject(), resParent.getCurrentResourceConfig());
+
+ // Recreate the settings store for the configuration
+ settingsStore = new BuildToolsSettingsStore(resParent.getCurrentResourceConfig());
+
+ // Write out the build model info
+ ManagedBuildManager.setDefaultConfiguration(resParent.getProject(), resParent.getSelectedConfiguration());
+ ManagedBuildManager.saveBuildInfo(resParent.getProject(), false);
+
+ // Reset the category or tool selection and run selection event handler
+ selectedCategory = null;
+ selectedTool = null;
+ handleOptionSelection();
+
+ setDirty(false);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.cdt.ui.dialogs.ICOptionPage#performApply(IProgressMonitor)
+ */
+ public void performApply(IProgressMonitor monitor) throws CoreException {
+
+ // Force each settings page to update
+ List pages = getPagesForConfig();
+ // Make sure we have something to work on
+ if (pages == null) {
+ // Nothing to do
+ return;
+ }
+ ListIterator iter = pages.listIterator();
+ while (iter.hasNext()) {
+ BuildSettingsPage page = (BuildSettingsPage) iter.next();
+ if (page == null) continue;
+ if (page instanceof BuildToolSettingsPage) {
+ // if the currentsettings page is not the tool settings page
+ // then update the all build options field editor based on the
+ // build options in other options settings page.
+ if (!(currentSettingsPage instanceof BuildToolSettingsPage))
+ ((BuildToolSettingsPage)page).updateAllOptionField();
+ ((BuildToolSettingsPage)page).performOk();
+ } else if (page instanceof BuildOptionSettingsPage) {
+ ((BuildOptionSettingsPage)page).performOk();
+ }
+ }
+
+ setDirty(false);
+ }
+
+ /* (non-Javadoc)
+ * Answers the list of settings pages for the selected configuration
+ * @return
+ */
+ private List getPagesForConfig() {
+ List pages = null;
+ if ( element instanceof IProject) {
+// Make sure that something was selected
+ if (parent.getSelectedConfiguration() == null) {
+ return null;
+ }
+ pages = (List) configToPageListMap.get(parent.getSelectedConfiguration().getId());
+ } else if (element instanceof IFile) {
+ if ( resParent.getCurrentResourceConfig() == null ) {
+ return null;
+ }
+ pages = (List) configToPageListMap.get(resParent.getCurrentResourceConfig().getId());
+ }
+
+ if (pages == null) {
+ pages = new ArrayList();
+ if ( element instanceof IProject) {
+ configToPageListMap.put(parent.getSelectedConfiguration().getId(), pages);
+ } else if ( element instanceof IFile) {
+ configToPageListMap.put(resParent.getCurrentResourceConfig().getId(), pages);
+ }
+ }
+ return pages;
+ }
+
+ public IPreferenceStore getPreferenceStore() {
+ return settingsStore;
+ }
+
+ /* (non-Javadoc)
+ * Safe accessor method
+ *
+ * @return Returns the Map of configurations to preference stores.
+ */
+ protected Map getSettingsStoreMap() {
+ if (settingsStoreMap == null) {
+ settingsStoreMap = new HashMap();
+ }
+ return settingsStoreMap;
+ }
+
+ /**
+ * Sets the "dirty" state
+ */
+ public void setDirty(boolean b) {
+ // Set each settings page
+ List pages = getPagesForConfig();
+ // Make sure we have something to work on
+ if (pages == null) {
+ // Nothing to do
+ return;
+ }
+ ListIterator iter = pages.listIterator();
+ while (iter.hasNext()) {
+ BuildSettingsPage page = (BuildSettingsPage) iter.next();
+ if (page == null) continue;
+ page.setDirty(b);
+ }
+ }
+
+ /**
+ * Returns the "dirty" state
+ */
+ public boolean isDirty() {
+ // Check each settings page
+ List pages = getPagesForConfig();
+ // Make sure we have something to work on
+ if (pages == null) {
+ // Nothing to do
+ return false;
+ }
+ ListIterator iter = pages.listIterator();
+ while (iter.hasNext()) {
+ BuildSettingsPage page = (BuildSettingsPage) iter.next();
+ if (page == null) continue;
+ if (page.isDirty()) return true;
+ }
+ return false;
+ }
+}
diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/actions/UpdateManagedProjectAction.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/actions/UpdateManagedProjectAction.java
deleted file mode 100644
index 35b568bf14..0000000000
--- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/actions/UpdateManagedProjectAction.java
+++ /dev/null
@@ -1,580 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2004 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM - Initial API and implementation
- **********************************************************************/
-package org.eclipse.cdt.managedbuilder.ui.actions;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.lang.reflect.InvocationTargetException;
-import java.util.Random;
-import java.util.StringTokenizer;
-import java.util.Vector;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.FactoryConfigurationError;
-import javax.xml.parsers.ParserConfigurationException;
-
-import org.eclipse.cdt.core.CCorePlugin;
-import org.eclipse.cdt.managedbuilder.core.BuildException;
-import org.eclipse.cdt.managedbuilder.core.IConfiguration;
-import org.eclipse.cdt.managedbuilder.core.IManagedBuildInfo;
-import org.eclipse.cdt.managedbuilder.core.IOption;
-import org.eclipse.cdt.managedbuilder.core.ITarget;
-import org.eclipse.cdt.managedbuilder.core.ITool;
-import org.eclipse.cdt.managedbuilder.core.IToolReference;
-import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
-import org.eclipse.cdt.managedbuilder.core.ManagedCProjectNature;
-import org.eclipse.cdt.managedbuilder.internal.core.ManagedBuildInfo;
-import org.eclipse.cdt.managedbuilder.internal.ui.ManagedBuilderUIMessages;
-import org.eclipse.cdt.managedbuilder.internal.ui.ManagedBuilderUIPlugin;
-import org.eclipse.core.resources.IContainer;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IProjectDescription;
-import org.eclipse.core.resources.IWorkspaceRunnable;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.OperationCanceledException;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.operation.IRunnableContext;
-import org.eclipse.jface.operation.IRunnableWithProgress;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.IWorkbenchWindowActionDelegate;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.xml.sax.SAXException;
-
-/**
- * @since 2.0
- */
-public class UpdateManagedProjectAction implements IWorkbenchWindowActionDelegate {
-
-
- private static final String ID_CYGWIN = "cygwin"; //$NON-NLS-1$
- private static final String ID_DEBUG = "debug"; //$NON-NLS-1$
- private static final String ID_DIRS = "dirs"; //$NON-NLS-1$
- private static final String ID_EXE = "exe"; //$NON-NLS-1$
- private static final String ID_EXEC = "exec"; //$NON-NLS-1$
- private static final String ID_GENERAL = "general"; //$NON-NLS-1$
- private static final String ID_GNU = "gnu"; //$NON-NLS-1$
- private static final String ID_INCPATHS = "incpaths"; //$NON-NLS-1$
- private static final String ID_INCLUDE = "include"; //$NON-NLS-1$
- private static final String ID_LINUX = "linux"; //$NON-NLS-1$
- private static final String ID_OPTION = "option"; //$NON-NLS-1$
- private static final String ID_OPTIONS = "options"; //$NON-NLS-1$
- private static final String ID_PATHS = "paths"; //$NON-NLS-1$
- private static final String ID_PREPROC = "preprocessor"; //$NON-NLS-1$
- private static final String ID_RELEASE = "release"; //$NON-NLS-1$
- private static final String ID_SEPARATOR = "."; //$NON-NLS-1$
- private static final String ID_SHARED = "so"; //$NON-NLS-1$
- private static final String ID_SOLARIS = "solaris"; //$NON-NLS-1$
- private static final String ID_STATIC = "lib"; //$NON-NLS-1$
- private static final String NEW_CONFIG_ROOT = "cdt.managedbuild.config.gnu"; //$NON-NLS-1$
- private static final String NEW_CYGWIN_TARGET_ROOT = "cdt.managedbuild.target.gnu.cygwin"; //$NON-NLS-1$
- private static final String NEW_POSIX_TARGET_ROOT = "cdt.managedbuild.target.gnu"; //$NON-NLS-1$
- private static final String NEW_TOOL_ROOT = "cdt.managedbuild.tool.gnu"; //$NON-NLS-1$
- private static final String TOOL_LANG_BOTH = "both"; //$NON-NLS-1$
- private static final String TOOL_LANG_C = "c"; //$NON-NLS-1$
- private static final String TOOL_LANG_CPP = "cpp"; //$NON-NLS-1$
- private static final String TOOL_NAME_AR = "ar"; //$NON-NLS-1$
- private static final String TOOL_NAME_ARCHIVER = "archiver"; //$NON-NLS-1$
- private static final String TOOL_NAME_COMPILER = "compiler"; //$NON-NLS-1$
- private static final String TOOL_NAME_LIB = "lib"; //$NON-NLS-1$
- private static final String TOOL_NAME_LINK = "link"; //$NON-NLS-1$
- private static final String TOOL_NAME_LINKER = "linker"; //$NON-NLS-1$
- private static final String TOOL_NAME_SOLINK = "solink"; //$NON-NLS-1$
- private static final int TOOL_TYPE_COMPILER = 0;
- private static final int TOOL_TYPE_LINKER = 1;
- private static final int TOOL_TYPE_ARCHIVER = 2;
- private static final int TYPE_EXE = 0;
- private static final int TYPE_SHARED = 1;
- private static final int TYPE_STATIC = 2;
-
- /* (non-Javadoc)
- * Create a back-up file containing the pre-2.0 project settings.
- *
- * @param settingsFile
- * @param monitor
- * @param project
- * @throws CoreException
- */
- protected static void backupFile(IFile settingsFile, IProgressMonitor monitor, IProject project) throws CoreException {
- // Make a back-up of the settings file
- String newName = settingsFile.getName() + "_12backup"; //$NON-NLS-1$
- IContainer destFolder = (IContainer)project;
- IFile backupFile = destFolder.getFile(new Path(newName));
- if (backupFile.exists()) {
- Shell shell = ManagedBuilderUIPlugin.getDefault().getShell();
- boolean shouldUpdate = MessageDialog.openQuestion(shell,
- ManagedBuilderUIMessages.getResourceString("ManagedBuildConvert.12x.warning.title"), //$NON-NLS-1$
- ManagedBuilderUIMessages.getFormattedString("ManagedBuildConvert.12x.warning.message", project.getName())); //$NON-NLS-1$
- if (shouldUpdate) {
- backupFile.delete(true, monitor);
- } else {
- monitor.setCanceled(true);
- throw new OperationCanceledException(ManagedBuilderUIMessages.getFormattedString("ManagedBuildConvert.12x.cancelled.message", project.getName())); //$NON-NLS-1$
- }
- }
- settingsFile.copy(backupFile.getFullPath(), true, monitor);
- }
-
- protected static void convertConfiguration(ITarget newTarget, ITarget newParent, Element oldConfig, IProgressMonitor monitor) {
- IConfiguration newParentConfig = null;
- IConfiguration newConfig = null;
- boolean cygwin = false;
- boolean debug = false;
- int type = -1;
-
- // Figure out what the original parent of the config is
- String parentId = oldConfig.getAttribute(IConfiguration.PARENT);
- StringTokenizer idTokens = new StringTokenizer(parentId, ID_SEPARATOR);
- while (idTokens.hasMoreTokens()) {
- String id = idTokens.nextToken();
- if (id.equalsIgnoreCase(ID_CYGWIN)) {
- cygwin = true;
- } else if(id.equalsIgnoreCase(ID_EXEC)) {
- type = TYPE_EXE;
- } else if(id.equalsIgnoreCase(ID_SHARED)) {
- type = TYPE_SHARED;
- } else if (id.equalsIgnoreCase(ID_STATIC)) {
- type = TYPE_STATIC;
- } else if (id.equalsIgnoreCase(ID_DEBUG)) {
- debug = true;
- }
- }
- String defId = NEW_CONFIG_ROOT + ID_SEPARATOR;
- if (cygwin) defId += ID_CYGWIN + ID_SEPARATOR;
- switch (type) {
- case TYPE_EXE:
- defId += ID_EXE;
- break;
- case TYPE_SHARED :
- defId += ID_SHARED;
- break;
- case TYPE_STATIC :
- defId += ID_STATIC;
- break;
- }
- defId += ID_SEPARATOR + (debug ? "debug" : "release"); //$NON-NLS-1$ //$NON-NLS-2$
- newParentConfig = newParent.getConfiguration(defId);
- if (newParentConfig == null) {
- // Create a default gnu exe release or debug
- }
- // Generate a random number for the new config id
- Random rand = new Random();
- rand.setSeed(System.currentTimeMillis());
- int randomElement = rand.nextInt();
- if (randomElement < 0) {
- randomElement *= -1;
- }
- // Create the new configuration
- newConfig = newTarget.createConfiguration(newParentConfig, defId + ID_SEPARATOR + randomElement);
-
- // Convert the tool references
- NodeList toolRefNodes = oldConfig.getElementsByTagName(IConfiguration.TOOLREF_ELEMENT_NAME);
- for (int refIndex = 0; refIndex < toolRefNodes.getLength(); ++refIndex) {
- convertToolRef(newConfig, (Element) toolRefNodes.item(refIndex), monitor);
- }
- monitor.worked(1);
- }
-
- protected static void convertOptionRef(IConfiguration newConfig, ITool newTool, Element optRef) {
- String optId = optRef.getAttribute(IOption.ID);
- if (optId == null) return;
- String[] idTokens = optId.split("\\."); //$NON-NLS-1$
-
- // New ID will be in for gnu.[compiler|link|lib].[c|c++|both].option.{1.2_component}
- Vector newIdVector = new Vector(idTokens.length + 2);
-
- // We can ignore the first element of the old IDs since it is just [cygwin|linux|solaris]
- for (int index = 1; index < idTokens.length; ++index) {
- newIdVector.add(idTokens[index]);
- }
-
- // In the case of some Cygwin C++ tools, the old ID will be missing gnu
- if (!((String)newIdVector.firstElement()).equals(ID_GNU)) {
- newIdVector.add(0, ID_GNU);
- }
-
- // In some old IDs the language specifier is missing for librarian and C++ options
- String langToken = (String)newIdVector.get(1);
- if(!langToken.equals(TOOL_LANG_C)) {
- // In the case of the librarian the language must b set to both
- if (langToken.equals(TOOL_NAME_LIB) || langToken.equals(TOOL_NAME_AR)) {
- newIdVector.add(1, TOOL_LANG_BOTH);
- } else {
- newIdVector.add(1, TOOL_LANG_CPP);
- }
- }
-
- // Standardize the next token to compiler, link, or lib
- String toolToken = (String)newIdVector.get(2);
- if (toolToken.equals(ID_PREPROC)) {
- // Some compiler preprocessor options are missing this
- newIdVector.add(2, TOOL_NAME_COMPILER);
- } else if (toolToken.equals(TOOL_NAME_LINKER) || toolToken.equals(TOOL_NAME_SOLINK)) {
- // Some linker options have linker or solink as the toolname
- newIdVector.remove(2);
- newIdVector.add(2, TOOL_NAME_LINK);
- } else if (toolToken.equals(TOOL_NAME_AR)) {
- // The cygwin librarian uses ar
- newIdVector.remove(2);
- newIdVector.add(2, TOOL_NAME_LIB);
- }
-
- // Add in the option tag
- String optionToken = (String)newIdVector.get(3);
- if (optionToken.equals(ID_OPTIONS)) {
- // Some old-style options had "options" in the id
- newIdVector.remove(3);
- }
- newIdVector.add(3, ID_OPTION);
-
- // Convert any lingering "incpaths" to "include.paths"
- String badToken = (String) newIdVector.lastElement();
- if (badToken.equals(ID_INCPATHS)) {
- newIdVector.addElement(ID_INCLUDE);
- newIdVector.addElement(ID_PATHS);
- }
-
- // Edit out the "general" or "dirs" categories that may be in some older IDs
- int generalIndex = newIdVector.indexOf(ID_GENERAL);
- if (generalIndex != -1) {
- newIdVector.remove(generalIndex);
- }
- int dirIndex = newIdVector.indexOf(ID_DIRS);
- if (dirIndex != -1) {
- newIdVector.remove(dirIndex);
- }
-
- // Construct the new ID
- String newOptionId = new String();
- for (int rebuildIndex = 0; rebuildIndex < newIdVector.size(); ++ rebuildIndex) {
- String token = (String) newIdVector.get(rebuildIndex);
- newOptionId += token;
- if (rebuildIndex < newIdVector.size() - 1) {
- newOptionId += ID_SEPARATOR;
- }
- }
-
- // Get the option from the new tool
- IOption newOpt = newTool.getOptionById(newOptionId);
- if (newOpt == null) {
- // TODO flag warning condition to user
- return;
- }
- try {
- switch (newOpt.getValueType()) {
- case IOption.BOOLEAN:
- Boolean bool = new Boolean(optRef.getAttribute(IOption.DEFAULT_VALUE));
- newConfig.setOption(newOpt, bool.booleanValue());
- break;
- case IOption.STRING:
- case IOption.ENUMERATED:
- // This is going to be the human readable form of the enumerated value
- String name = (String) optRef.getAttribute(IOption.DEFAULT_VALUE);
- // Convert it to the ID
- String idValue = newOpt.getEnumeratedId(name);
- newConfig.setOption(newOpt, idValue != null ? idValue : name);
- break;
- case IOption.STRING_LIST:
- case IOption.INCLUDE_PATH:
- case IOption.PREPROCESSOR_SYMBOLS:
- case IOption.LIBRARIES:
- case IOption.OBJECTS:
- Vector values = new Vector();
- NodeList nodes = optRef.getElementsByTagName(IOption.LIST_VALUE);
- for (int i = 0; i < nodes.getLength(); ++i) {
- Node node = nodes.item(i);
- if (node.getNodeType() == Node.ELEMENT_NODE) {
- Boolean isBuiltIn = new Boolean(((Element)node).getAttribute(IOption.LIST_ITEM_BUILTIN));
- if (!isBuiltIn.booleanValue()) {
- values.add(((Element)node).getAttribute(IOption.LIST_ITEM_VALUE));
- }
- }
- }
- newConfig.setOption(newOpt, (String[])values.toArray(new String[values.size()]));
- break;
- }
- } catch (BuildException e) {
- // TODO flag error to user
- return;
- }
-
- }
- protected static ITarget convertTarget(IProject project, Element oldTarget, IProgressMonitor monitor) {
- // What we want to create
- ITarget newTarget = null;
- ITarget newParent = null;
- // The type of target we are converting from/to
- int type = -1;
- // Use the Cygwin or generic target form
- boolean posix = false;
-
- // Get the parent
- String id = oldTarget.getAttribute(ITarget.PARENT);
-
- // Figure out the new target definition to use for that type
- StringTokenizer idTokens = new StringTokenizer(id, ID_SEPARATOR);
- while (idTokens.hasMoreTokens()) {
- String token = idTokens.nextToken();
- if (token.equals(ID_LINUX) || token.equals(ID_SOLARIS)) {
- posix = true;
- } else if (token.equalsIgnoreCase(ID_EXEC)){
- type = TYPE_EXE;
- } else if (token.equalsIgnoreCase(ID_SHARED)){
- type = TYPE_SHARED;
- } else if (token.equalsIgnoreCase(ID_SHARED)){
- type = TYPE_SHARED;
- }
- }
- // Create a target based on the new target type
- String defID = (posix ? NEW_POSIX_TARGET_ROOT : NEW_CYGWIN_TARGET_ROOT) + ID_SEPARATOR;
- switch (type) {
- case TYPE_EXE :
- defID += ID_EXE;
- break;
- case TYPE_SHARED :
- defID += ID_SHARED;
- break;
- case TYPE_STATIC :
- defID += ID_STATIC;
- break;
- }
-
- // Get the new target definitions we need for the conversion
- newParent = ManagedBuildManager.getTarget(project, defID);
- if (newParent == null) {
- // Return null and let the caller deal with the error reporting
- return null;
- }
-
- try {
- // Create a new target based on the new parent
- newTarget = ManagedBuildManager.createTarget(project, newParent);
- newTarget.setArtifactName(oldTarget.getAttribute(ITarget.ARTIFACT_NAME));
-
- // Create new configurations
- NodeList configNodes = oldTarget.getElementsByTagName(IConfiguration.CONFIGURATION_ELEMENT_NAME);
- for (int configIndex = 0; configIndex < configNodes.getLength(); ++configIndex) {
- convertConfiguration(newTarget, newParent, (Element) configNodes.item(configIndex), monitor);
- }
- } catch (BuildException e) {
- // Probably just a mismatch between option value and option
- }
-
- monitor.worked(1);
- return newTarget;
- }
-
- protected static void convertToolRef(IConfiguration newConfig, Element oldToolRef, IProgressMonitor monitor) {
- String oldToolId = oldToolRef.getAttribute(IToolReference.ID);
- // All known tools have id NEW_TOOL_ROOT.[c|cpp].[compiler|linker|archiver]
- String newToolId = NEW_TOOL_ROOT;
- boolean cppFlag = true;
- int toolType = -1;
-
- // Figure out what kind of tool the ref pointed to
- StringTokenizer idTokens = new StringTokenizer(oldToolId, ID_SEPARATOR);
- while (idTokens.hasMoreTokens()) {
- String token = idTokens.nextToken();
- if(token.equals(TOOL_LANG_C)) {
- cppFlag = false;
- } else if (token.equalsIgnoreCase(TOOL_NAME_COMPILER)) {
- toolType = TOOL_TYPE_COMPILER;
- } else if (token.equalsIgnoreCase(TOOL_NAME_AR)) {
- toolType = TOOL_TYPE_ARCHIVER;
- } else if (token.equalsIgnoreCase(TOOL_NAME_LIB)) {
- toolType = TOOL_TYPE_ARCHIVER;
- } else if (token.equalsIgnoreCase(TOOL_NAME_LINK)) {
- toolType = TOOL_TYPE_LINKER;
- } else if (token.equalsIgnoreCase(TOOL_NAME_SOLINK)) {
- toolType = TOOL_TYPE_LINKER;
- }
- }
-
- // Now complete the new tool id
- newToolId += ID_SEPARATOR + (cppFlag ? "cpp" : "c") + ID_SEPARATOR; //$NON-NLS-1$ //$NON-NLS-2$
- switch (toolType) {
- case TOOL_TYPE_COMPILER:
- newToolId += TOOL_NAME_COMPILER;
- break;
- case TOOL_TYPE_LINKER:
- newToolId += TOOL_NAME_LINKER;
- break;
- case TOOL_TYPE_ARCHIVER:
- newToolId += TOOL_NAME_ARCHIVER;
- break;
- }
-
- // Get the new tool out of the configuration
- ITool newTool = newConfig.getToolById(newToolId);
- // Check that this is not null
-
- // The ref may or may not contain overridden options
- NodeList optRefs = oldToolRef.getElementsByTagName(ITool.OPTION_REF);
- for (int refIndex = optRefs.getLength() - 1; refIndex >= 0; --refIndex) {
- convertOptionRef(newConfig, newTool, (Element) optRefs.item(refIndex));
- }
- monitor.worked(1);
- }
-
- /**
- * @param monitor the monitor to allow users to cancel the long-running operation
- * @param project the <code>IProject</code> that needs to be upgraded
- * @throws CoreException
- */
- protected static void doProjectUpdate(IProgressMonitor monitor, IProject project) throws CoreException {
- String[] projectName = new String[]{project.getName()};
- IFile settingsFile = project.getFile(ManagedBuildManager.SETTINGS_FILE_NAME);
- if (!settingsFile.exists()) {
- monitor.done();
- return;
- }
-
- // Backup the file
- monitor.beginTask(ManagedBuilderUIMessages.getFormattedString("ManagedBuildConvert.12x.monitor.message.backup", projectName), 1); //$NON-NLS-1$
- backupFile(settingsFile, monitor, project);
- IManagedBuildInfo info = ManagedBuildManager.getBuildInfo(project);
-
- //Now convert each target to the new format
- try {
- // Load the old build file
- InputStream stream = settingsFile.getContents();
- DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder();
- Document document = parser.parse(stream);
-
- // Clone the target based on the proper target definition
- NodeList targetNodes = document.getElementsByTagName(ITarget.TARGET_ELEMENT_NAME);
- // This is a guess, but typically the project has 1 target, 2 configs, and 6 tool defs
- int listSize = targetNodes.getLength();
- monitor.beginTask(ManagedBuilderUIMessages.getFormattedString("ManagedBuildConvert.12x.monitor.message.project", projectName), listSize * 9); //$NON-NLS-1$
- for (int targIndex = 0; targIndex < listSize; ++targIndex) {
- Element oldTarget = (Element) targetNodes.item(targIndex);
- String oldTargetId = oldTarget.getAttribute(ITarget.ID);
- ITarget newTarget = convertTarget(project, oldTarget, monitor);
-
- // Remove the old target
- if (newTarget != null) {
- info.removeTarget(oldTargetId);
- monitor.worked(9);
- }
- }
- // Upgrade the version
- ((ManagedBuildInfo)info).setVersion(ManagedBuildManager.getBuildInfoVersion().toString());
- } catch (ParserConfigurationException e) {
- ManagedBuilderUIPlugin.log(e);
- } catch (FactoryConfigurationError e) {
- ManagedBuilderUIPlugin.log(e);
- } catch (SAXException e) {
- ManagedBuilderUIPlugin.log(e);
- } catch (IOException e) {
- ManagedBuilderUIPlugin.log(e);
- } finally {
- ManagedBuildManager.saveBuildInfo(project, false);
- monitor.done();
- }
- }
-
- /**
- * Determines which projects in the workspace are still using
- * the settings format defined in CDT 1.2.x.
- *
- * @return an array of <code>IProject</code> that need to have their
- * project settings updated to the CDT 2.0 format
- */
- public static IProject[] getVersion12Projects() {
- IProject[] projects = ManagedBuilderUIPlugin.getWorkspace().getRoot().getProjects();
- Vector result = new Vector();
- for (int index = projects.length - 1; index >=0 ; --index) {
- if (projects[index].isAccessible()) {
- IProjectDescription description;
- try {
- description = projects[index].getDescription();
- } catch (CoreException e) {
- // This can only mean that something really bad has happened
- continue;
- }
- // Make sure it has a managed nature
- if (description == null || !description.hasNature(ManagedCProjectNature.MNG_NATURE_ID)) {
- continue;
- }
- IManagedBuildInfo info = ManagedBuildManager.getBuildInfo(projects[index]);
- if (info != null && info.getVersion()== null) {
- // This is a pre-2.0 file (no version info)
- result.add(projects[index]);
- }
- }
- }
-
- return (IProject[]) result.toArray(new IProject[result.size()]);
-
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.IWorkbenchWindowActionDelegate#dispose()
- */
- public void dispose() {
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.IWorkbenchWindowActionDelegate#init(org.eclipse.ui.IWorkbenchWindow)
- */
- public void init(IWorkbenchWindow window) {
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)
- */
- public void run(IAction action) {
- // TODO Auto-generated method stub
-
- }
-
- static public void run(boolean fork, IRunnableContext context, final IProject project) {
- try {
- context.run(fork, true, new IRunnableWithProgress() {
- public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
- try {
- IWorkspaceRunnable runnable = new IWorkspaceRunnable() {
- public void run(IProgressMonitor monitor) throws CoreException {
- doProjectUpdate(monitor, project);
- }
- };
- ManagedBuilderUIPlugin.getWorkspace().run(runnable, monitor);
- } catch (CoreException e) {
- throw new InvocationTargetException(e);
- } catch (OperationCanceledException e) {
- throw new InterruptedException(e.getMessage());
- }
- }
- });
- } catch (InterruptedException e) {
- return;
- } catch (InvocationTargetException e) {
- CCorePlugin.log(e); //$NON-NLS-1$
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.IActionDelegate#selectionChanged(org.eclipse.jface.action.IAction, org.eclipse.jface.viewers.ISelection)
- */
- public void selectionChanged(IAction action, ISelection selection) {
- // TODO Auto-generated method stub
-
- }
-}
diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildOptionComboFieldEditor.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildOptionComboFieldEditor.java
index b40376a977..68c594dec4 100644
--- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildOptionComboFieldEditor.java
+++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildOptionComboFieldEditor.java
@@ -1,7 +1,5 @@
-package org.eclipse.cdt.managedbuilder.ui.properties;
-
/**********************************************************************
- * Copyright (c) 2002,2003 Rational Software Corporation and others.
+ * Copyright (c) 2002,2004 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
@@ -10,9 +8,12 @@ package org.eclipse.cdt.managedbuilder.ui.properties;
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
+package org.eclipse.cdt.managedbuilder.ui.properties;
import org.eclipse.cdt.utils.ui.controls.ControlFactory;
import org.eclipse.jface.preference.FieldEditor;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
@@ -70,6 +71,16 @@ public class BuildOptionComboFieldEditor extends FieldEditor {
selectorData.horizontalSpan = numColumns - 1;
selectorData.grabExcessHorizontalSpace = true;
optionSelector.setLayoutData(selectorData);
+ optionSelector.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent evt) {
+ String oldValue = selected;
+ String name = optionSelector.getText();
+ int index = optionSelector.getSelectionIndex();
+ selected = index == -1 ? new String() : optionSelector.getItem(index);
+ setPresentsDefaultValue(false);
+ fireValueChanged(VALUE, oldValue, selected);
+ }
+ });
}
/* (non-Javadoc)
@@ -101,7 +112,7 @@ public class BuildOptionComboFieldEditor extends FieldEditor {
protected void doStore() {
// Save the selected item in the store
int index = optionSelector.getSelectionIndex();
- String selected = index == -1 ? new String() : optionSelector.getItem(index);
+ selected = index == -1 ? new String() : optionSelector.getItem(index);
getPreferenceStore().setValue(getPreferenceName(), selected);
}
diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildOptionSettingsPage.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildOptionSettingsPage.java
index 2603c2abb0..3d5f40eb75 100644
--- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildOptionSettingsPage.java
+++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildOptionSettingsPage.java
@@ -1,7 +1,5 @@
-package org.eclipse.cdt.managedbuilder.ui.properties;
-
/**********************************************************************
- * Copyright (c) 2003,2004 IBM Rational Software Corporation and others.
+ * Copyright (c) 2003,2004 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
@@ -10,13 +8,19 @@ package org.eclipse.cdt.managedbuilder.ui.properties;
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
+package org.eclipse.cdt.managedbuilder.ui.properties;
-import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.Collection;
import org.eclipse.cdt.managedbuilder.core.BuildException;
import org.eclipse.cdt.managedbuilder.core.IConfiguration;
import org.eclipse.cdt.managedbuilder.core.IOption;
import org.eclipse.cdt.managedbuilder.core.IOptionCategory;
+import org.eclipse.cdt.managedbuilder.core.IResourceConfiguration;
+import org.eclipse.cdt.managedbuilder.core.ITool;
import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
import org.eclipse.jface.preference.BooleanFieldEditor;
import org.eclipse.jface.preference.FieldEditor;
@@ -24,15 +28,23 @@ import org.eclipse.jface.preference.StringFieldEditor;
import org.eclipse.swt.graphics.Point;
public class BuildOptionSettingsPage extends BuildSettingsPage {
- private ArrayList fieldsList = new ArrayList();
+ private Map fieldsMap = new HashMap();
private IOptionCategory category;
+ private boolean isItResourceConfigPage;
- BuildOptionSettingsPage(IConfiguration configuration, IOptionCategory category) {
+ public BuildOptionSettingsPage(IConfiguration configuration, IOptionCategory category) {
// Cache the configuration and option category this page is created for
super(configuration);
this.category = category;
+ isItResourceConfigPage = false;
}
+ public BuildOptionSettingsPage(IResourceConfiguration resConfig, IOptionCategory category) {
+ // Cache the configuration and option category this page is created for
+ super(resConfig);
+ this.category = category;
+ isItResourceConfigPage = true;
+ }
/* (non-Javadoc)
* @see org.eclipse.jface.preference.IPreferencePage#computeSize()
*/
@@ -48,60 +60,70 @@ public class BuildOptionSettingsPage extends BuildSettingsPage {
super.createFieldEditors();
// Iterate over the options in the category and create a field editor
// for each
- IOption[] options = category.getOptions(configuration);
+ Object[][] options;
+ if ( isItResourceConfigPage ) {
+ options = category.getOptions(resConfig);
+ } else {
+ options = category.getOptions(configuration);
+ }
+
for (int index = 0; index < options.length; ++index) {
// Get the option
- IOption opt = options[index];
- // Figure out which type the option is and add a proper field
- // editor for it
- switch (opt.getValueType()) {
- case IOption.STRING :
- StringFieldEditor stringField = new StringFieldEditor(opt
- .getId(), opt.getName(), getFieldEditorParent());
- addField(stringField);
- fieldsList.add(stringField);
- break;
- case IOption.BOOLEAN :
- BooleanFieldEditor booleanField = new BooleanFieldEditor(
- opt.getId(), opt.getName(), getFieldEditorParent());
- addField(booleanField);
- fieldsList.add(booleanField);
- break;
- case IOption.ENUMERATED :
- String selId;
- String sel;
- try {
- selId = opt.getSelectedEnum();
- sel = opt.getEnumName(selId);
- } catch (BuildException e) {
- // If we get this exception, then the option type is
- // wrong
+ ITool tool = (ITool)options[index][0];
+ if (tool == null) break; // The array may not be full
+ IOption opt = (IOption)options[index][1];
+ try {
+ // Figure out which type the option is and add a proper field
+ // editor for it
+ switch (opt.getValueType()) {
+ case IOption.STRING :
+ StringFieldEditor stringField = new StringFieldEditor(
+ opt.getId(), opt.getName(), getFieldEditorParent());
+ addField(stringField);
+ fieldsMap.put(opt.getId(), stringField);
+ break;
+ case IOption.BOOLEAN :
+ BooleanFieldEditor booleanField = new BooleanFieldEditor(
+ opt.getId(), opt.getName(), getFieldEditorParent());
+ addField(booleanField);
+ fieldsMap.put(opt.getId(),booleanField);
+ break;
+ case IOption.ENUMERATED :
+ String selId;
+ String sel;
+ try {
+ selId = opt.getSelectedEnum();
+ sel = opt.getEnumName(selId);
+ } catch (BuildException e) {
+ // If we get this exception, then the option type is
+ // wrong
+ break;
+ }
+ BuildOptionComboFieldEditor comboField = new BuildOptionComboFieldEditor(
+ opt.getId(), opt.getName(), opt
+ .getApplicableValues(), sel,
+ getFieldEditorParent());
+ addField(comboField);
+ fieldsMap.put(opt.getId(), comboField);
break;
- }
- BuildOptionComboFieldEditor comboField = new BuildOptionComboFieldEditor(
- opt.getId(), opt.getName(), opt
- .getApplicableValues(), sel,
- getFieldEditorParent());
- addField(comboField);
- fieldsList.add(comboField);
- break;
- case IOption.INCLUDE_PATH :
- case IOption.STRING_LIST :
- case IOption.PREPROCESSOR_SYMBOLS :
- case IOption.LIBRARIES :
- case IOption.OBJECTS :
- FileListControlFieldEditor listField =
- new FileListControlFieldEditor(
- opt.getId(),
- opt.getName(),
- getFieldEditorParent(),
- opt.getBrowseType());
- addField(listField);
- fieldsList.add(listField);
- break;
- default :
- break;
- }
+ case IOption.INCLUDE_PATH :
+ case IOption.STRING_LIST :
+ case IOption.PREPROCESSOR_SYMBOLS :
+ case IOption.LIBRARIES :
+ case IOption.OBJECTS :
+ FileListControlFieldEditor listField =
+ new FileListControlFieldEditor(
+ opt.getId(),
+ opt.getName(),
+ getFieldEditorParent(),
+ opt.getBrowseType());
+ addField(listField);
+ fieldsMap.put(opt.getId(), listField);
+ break;
+ default :
+ break;
+ }
+ } catch (BuildException e) {}
}
}
@@ -126,46 +148,92 @@ public class BuildOptionSettingsPage extends BuildSettingsPage {
// Write the field editor contents out to the preference store
boolean ok = super.performOk();
// Write the preference store values back to the build model
- IOption[] options = category.getOptions(configuration);
+
+ Object[][] options;
+ if (isItResourceConfigPage){
+ options = category.getOptions(resConfig);
+ } else {
+ options = category.getOptions(configuration);
+ }
+
for (int i = 0; i < options.length; i++) {
- IOption option = options[i];
-
- // Transfer value from preference store to options
- switch (option.getValueType()) {
- case IOption.BOOLEAN :
- boolean boolVal = getPreferenceStore().getBoolean(
- option.getId());
- ManagedBuildManager.setOption(configuration, option,
- boolVal);
- break;
- case IOption.ENUMERATED :
- String enumVal = getPreferenceStore().getString(
- option.getId());
- String enumId = option.getEnumeratedId(enumVal);
- ManagedBuildManager.setOption(configuration, option,
- (enumId.length() > 0) ? enumId : enumVal);
- break;
- case IOption.STRING :
- String strVal = getPreferenceStore().getString(
- option.getId());
- ManagedBuildManager
- .setOption(configuration, option, strVal);
- break;
- case IOption.STRING_LIST :
- case IOption.INCLUDE_PATH :
- case IOption.PREPROCESSOR_SYMBOLS :
- case IOption.LIBRARIES :
- case IOption.OBJECTS :
- String listStr = getPreferenceStore().getString(
- option.getId());
- String[] listVal = BuildToolsSettingsStore
- .parseString(listStr);
- ManagedBuildManager.setOption(configuration, option,
- listVal);
- break;
- default :
- break;
- }
+ ITool tool = (ITool)options[i][0];
+ if (tool == null) break; // The array may not be full
+ IOption option = (IOption)options[i][1];
+ try {
+ // Transfer value from preference store to options
+ IOption setOption;
+ switch (option.getValueType()) {
+ case IOption.BOOLEAN :
+ boolean boolVal = getToolSettingsPreferenceStore().getBoolean(option.getId());
+ if(isItResourceConfigPage) {
+ setOption = ManagedBuildManager.setOption(resConfig, tool, option, boolVal);
+ } else {
+ setOption = ManagedBuildManager.setOption(configuration, tool, option, boolVal);
+ }
+ // Reset the preference store since the Id may have changed
+ if (setOption != option) {
+ getToolSettingsPreferenceStore().setValue(setOption.getId(), boolVal);
+ FieldEditor fe = (FieldEditor)fieldsMap.get(option.getId());
+ fe.setPreferenceName(setOption.getId());
+ }
+ break;
+ case IOption.ENUMERATED :
+ String enumVal = getToolSettingsPreferenceStore().getString(option.getId());
+ String enumId = option.getEnumeratedId(enumVal);
+ if(isItResourceConfigPage) {
+ setOption = ManagedBuildManager.setOption(resConfig, tool, option,
+ (enumId != null && enumId.length() > 0) ? enumId : enumVal);
+ } else {
+ setOption = ManagedBuildManager.setOption(configuration, tool, option,
+ (enumId != null && enumId.length() > 0) ? enumId : enumVal);
+ }
+ // Reset the preference store since the Id may have changed
+ if (setOption != option) {
+ getToolSettingsPreferenceStore().setValue(setOption.getId(), enumVal);
+ FieldEditor fe = (FieldEditor)fieldsMap.get(option.getId());
+ fe.setPreferenceName(setOption.getId());
+ }
+ break;
+ case IOption.STRING :
+ String strVal = getToolSettingsPreferenceStore().getString(option.getId());
+ if(isItResourceConfigPage){
+ setOption = ManagedBuildManager.setOption(resConfig, tool, option, strVal);
+ } else {
+ setOption = ManagedBuildManager.setOption(configuration, tool, option, strVal);
+ }
+
+ // Reset the preference store since the Id may have changed
+ if (setOption != option) {
+ getToolSettingsPreferenceStore().setValue(setOption.getId(), strVal);
+ FieldEditor fe = (FieldEditor)fieldsMap.get(option.getId());
+ fe.setPreferenceName(setOption.getId());
+ }
+ break;
+ case IOption.STRING_LIST :
+ case IOption.INCLUDE_PATH :
+ case IOption.PREPROCESSOR_SYMBOLS :
+ case IOption.LIBRARIES :
+ case IOption.OBJECTS :
+ String listStr = getToolSettingsPreferenceStore().getString(option.getId());
+ String[] listVal = BuildToolsSettingsStore.parseString(listStr);
+ if( isItResourceConfigPage){
+ setOption = ManagedBuildManager.setOption(resConfig, tool, option, listVal);
+ }else {
+ setOption = ManagedBuildManager.setOption(configuration, tool, option, listVal);
+ }
+
+ // Reset the preference store since the Id may have changed
+ if (setOption != option) {
+ getToolSettingsPreferenceStore().setValue(setOption.getId(), listStr);
+ FieldEditor fe = (FieldEditor)fieldsMap.get(option.getId());
+ fe.setPreferenceName(setOption.getId());
+ }
+ break;
+ default :
+ break;
+ }
+ } catch (BuildException e) {}
}
return ok;
}
@@ -174,9 +242,13 @@ public class BuildOptionSettingsPage extends BuildSettingsPage {
* Update field editors in this page when the page is loaded.
*/
public void updateFields() {
- for (int i = 0; i < fieldsList.size(); i++) {
- FieldEditor editor = (FieldEditor) fieldsList.get(i);
- editor.loadDefault();
+ Collection fieldsList = fieldsMap.values();
+ Iterator iter = fieldsList.iterator();
+ while (iter.hasNext()) {
+ FieldEditor editor = (FieldEditor) iter.next();
+ // TODO: Why was loadDefault called before load? It results in String fields
+ // setting the "dirty" flag
+ //editor.loadDefault();
editor.load();
}
}
diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildPropertyPage.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildPropertyPage.java
index bcecbe7b6e..9e4dfcff14 100644
--- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildPropertyPage.java
+++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildPropertyPage.java
@@ -1,5 +1,3 @@
-package org.eclipse.cdt.managedbuilder.ui.properties;
-
/**********************************************************************
* Copyright (c) 2002,2004 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
@@ -10,43 +8,36 @@ package org.eclipse.cdt.managedbuilder.ui.properties;
* Contributors:
* IBM Rational Software - Initial API and implementation
* **********************************************************************/
+package org.eclipse.cdt.managedbuilder.ui.properties;
-import java.util.ArrayList;
-import java.util.HashMap;
+import java.lang.reflect.InvocationTargetException;
import java.util.Iterator;
import java.util.List;
-import java.util.ListIterator;
-import java.util.Map;
-import java.util.Random;
import java.util.Set;
import java.util.SortedMap;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
import org.eclipse.cdt.managedbuilder.core.IConfiguration;
import org.eclipse.cdt.managedbuilder.core.IManagedBuildInfo;
-import org.eclipse.cdt.managedbuilder.core.IOptionCategory;
-import org.eclipse.cdt.managedbuilder.core.ITarget;
-import org.eclipse.cdt.managedbuilder.core.ITool;
+import org.eclipse.cdt.managedbuilder.core.IProjectType;
import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
+import org.eclipse.cdt.managedbuilder.internal.ui.ManagedBuilderUIPlugin;
+import org.eclipse.cdt.managedbuilder.internal.ui.ManagedBuildOptionBlock;
import org.eclipse.cdt.managedbuilder.internal.ui.ManagedBuilderHelpContextIds;
import org.eclipse.cdt.managedbuilder.internal.ui.ManagedBuilderUIMessages;
import org.eclipse.cdt.utils.ui.controls.ControlFactory;
+import org.eclipse.cdt.ui.dialogs.ICOptionContainer;
import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Preferences;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.preference.IPreferencePageContainer;
import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.SashForm;
-import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormLayout;
@@ -59,137 +50,104 @@ import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Layout;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IWorkbenchPropertyPage;
+import org.eclipse.ui.actions.WorkspaceModifyDelegatingOperation;
import org.eclipse.ui.dialogs.PropertyPage;
import org.eclipse.ui.help.WorkbenchHelp;
-public class BuildPropertyPage extends PropertyPage implements IWorkbenchPropertyPage, IPreferencePageContainer {
+public class BuildPropertyPage extends PropertyPage implements IWorkbenchPropertyPage,
+ IPreferencePageContainer, ICOptionContainer {
/*
* String constants
*/
private static final String PREFIX = "BuildPropertyPage"; //$NON-NLS-1$
private static final String LABEL = PREFIX + ".label"; //$NON-NLS-1$
- private static final String NAME_LABEL = LABEL + ".NameText"; //$NON-NLS-1$
- private static final String BUILD_TOOLS_LABEL = LABEL + ".BuildToolTree"; //$NON-NLS-1$
private static final String PLATFORM_LABEL = LABEL + ".Platform"; //$NON-NLS-1$
private static final String CONFIG_LABEL = LABEL + ".Configuration"; //$NON-NLS-1$
private static final String ALL_CONFS = PREFIX + ".selection.configuration.all"; //$NON-NLS-1$
private static final String ACTIVE_LABEL = LABEL + ".Active"; //$NON-NLS-1$
private static final String SETTINGS_LABEL = LABEL + ".Settings"; //$NON-NLS-1$
- private static final String TREE_LABEL = LABEL + ".ToolTree"; //$NON-NLS-1$
- private static final String OPTIONS_LABEL = LABEL + ".ToolOptions"; //$NON-NLS-1$
private static final String ADD_CONF = LABEL + ".AddConfButton"; //$NON-NLS-1$
private static final String TIP = PREFIX + ".tip"; //$NON-NLS-1$
private static final String PLAT_TIP = TIP + ".platform"; //$NON-NLS-1$
private static final String CONF_TIP = TIP + ".config"; //$NON-NLS-1$
private static final String ADD_TIP = TIP + ".addconf"; //$NON-NLS-1$
private static final String MANAGE_TITLE = PREFIX + ".manage.title"; //$NON-NLS-1$
- private static final int[] DEFAULT_SASH_WEIGHTS = new int[] { 20, 30 };
private static final String ID_SEPARATOR = "."; //$NON-NLS-1$
+ private static final String MSG_CLOSEDPROJECT = "MngMakeProjectPropertyPage.closedproject"; //$NON-NLS-1$
/*
* Dialog widgets
*/
- private Combo targetSelector;
+ private Combo projectTypeSelector;
private Combo configSelector;
private Button manageConfigs;
- private TreeViewer optionList;
- private SashForm sashForm;
- private Group sashGroup;
- private Composite settingsPageContainer;
- private ScrolledComposite containerSC;
/*
* Bookeeping variables
*/
- private ITarget [] targets;
- private ITarget selectedTarget;
- private IConfiguration [] configurations;
+ private IProjectType[] projectTypes;
+ private IProjectType selectedProjectType;
+ private IConfiguration[] configurations;
private IConfiguration selectedConfiguration;
- private BuildSettingsPage currentSettingsPage;
- private Map configToPageListMap;
- private BuildToolsSettingsStore settingsStore;
- private Map settingsStoreMap;
- private IOptionCategory selectedCategory;
private Point lastShellSize;
- private ITool selectedTool;
-
- /**
- * The minimum page size; 200 by 200 by default.
- *
- * @see #setMinimumPageSize
- */
- private Point minimumPageSize = new Point(200, 200);
- private ToolListContentProvider provider;
-
- /**
- * Layout for the page container.
- *
- */
- private class PageLayout extends Layout {
- public void layout(Composite composite, boolean force) {
- Rectangle rect = composite.getClientArea();
- Control[] children = composite.getChildren();
- for (int i = 0; i < children.length; i++) {
- children[i].setSize(rect.width, rect.height);
- }
- }
- public Point computeSize(Composite composite, int wHint, int hHint, boolean force) {
- if (wHint != SWT.DEFAULT && hHint != SWT.DEFAULT) {
- return new Point(wHint, hHint);
- }
- int x = minimumPageSize.x;
- int y = minimumPageSize.y;
-
- Control[] children = composite.getChildren();
- for (int i = 0; i < children.length; i++) {
- Point size = children[i].computeSize(SWT.DEFAULT, SWT.DEFAULT, force);
- x = Math.max(x, size.x);
- y = Math.max(y, size.y);
- }
- if (wHint != SWT.DEFAULT) {
- x = wHint;
- }
- if (hHint != SWT.DEFAULT) {
- y = hHint;
- }
- return new Point(x, y);
- }
- }
+ protected ManagedBuildOptionBlock fOptionBlock;
+ protected boolean displayedConfig = false;
/**
* Default constructor
*/
public BuildPropertyPage() {
- configToPageListMap = new HashMap();
+ super();
}
+ public void setContainer(IPreferencePageContainer preferencePageContainer) {
+ super.setContainer(preferencePageContainer);
+ if (fOptionBlock == null) {
+ fOptionBlock = new ManagedBuildOptionBlock(this);
+ }
+ }
+
protected Control createContents(Composite parent) {
// Create the container we return to the property page editor
Composite composite = new Composite(parent, SWT.NULL);
composite.setFont(parent.getFont());
- composite.setLayout(new GridLayout(1, true));
+ GridLayout compositeLayout = new GridLayout();
+ compositeLayout.numColumns = 1;
+ compositeLayout.marginHeight = 0;
+ compositeLayout.marginWidth = 0;
+ composite.setLayout( compositeLayout );
+
+ IProject project = getProject();
+ if (!project.isOpen()) {
+ contentForClosedProject(composite);
+ } else {
+ contentForCProject(composite);
+ }
+
+ return composite;
+ }
+
+ private void contentForCProject(Composite parent) {
GridData gd;
// Initialize the key data
IManagedBuildInfo info = ManagedBuildManager.getBuildInfo(getProject());
if (info.getVersion() == null) {
// Display a message page instead of the properties control
- final Label invalidInfo = new Label(composite, SWT.LEFT);
- invalidInfo.setFont(composite.getFont());
+ final Label invalidInfo = new Label(parent, SWT.LEFT);
+ invalidInfo.setFont(parent.getFont());
invalidInfo.setText(ManagedBuilderUIMessages.getResourceString("BuildPropertyPage.error.version_low")); //$NON-NLS-1$
invalidInfo.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING, GridData.VERTICAL_ALIGN_CENTER, true, true));
- return composite;
+ return;
}
- targets = ManagedBuildManager.getTargets(getProject());
- ITarget defaultTarget = info.getDefaultTarget();
-
+ projectTypes = ManagedBuildManager.getDefinedProjectTypes();
+ IProjectType defaultProjectType = info.getManagedProject().getProjectType();
// Add a config selection area
- Group configGroup = ControlFactory.createGroup(composite, ManagedBuilderUIMessages.getResourceString(ACTIVE_LABEL), 1);
+ Group configGroup = ControlFactory.createGroup(parent, ManagedBuilderUIMessages.getResourceString(ACTIVE_LABEL), 1);
gd = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
gd.grabExcessHorizontalSpace = true;
configGroup.setLayoutData(gd);
@@ -200,13 +158,15 @@ public class BuildPropertyPage extends PropertyPage implements IWorkbenchPropert
configGroup.setLayout(form);
Label platformLabel = ControlFactory.createLabel(configGroup, ManagedBuilderUIMessages.getResourceString(PLATFORM_LABEL));
- targetSelector = ControlFactory.createSelectCombo(configGroup, getPlatformNames(), defaultTarget.getName());
- targetSelector.addListener(SWT.Selection, new Listener () {
+ projectTypeSelector = ControlFactory.createSelectCombo(configGroup, getPlatformNames(), defaultProjectType.getName());
+ // Note: Changing the project type is not currently handled, so this widget is disabled
+ projectTypeSelector.setEnabled(false);
+ projectTypeSelector.addListener(SWT.Selection, new Listener () {
public void handleEvent(Event e) {
- handleTargetSelection();
+ handleProjectTypeSelection();
}
});
- targetSelector.setToolTipText(ManagedBuilderUIMessages.getResourceString(PLAT_TIP));
+ projectTypeSelector.setToolTipText(ManagedBuilderUIMessages.getResourceString(PLAT_TIP));
Label configLabel = ControlFactory.createLabel(configGroup, ManagedBuilderUIMessages.getResourceString(CONFIG_LABEL));
configSelector = new Combo(configGroup, SWT.READ_ONLY|SWT.DROP_DOWN);
configSelector.addListener(SWT.Selection, new Listener () {
@@ -225,7 +185,7 @@ public class BuildPropertyPage extends PropertyPage implements IWorkbenchPropert
// Now do the form layout for the widgets
FormData fd = new FormData();
// Anchor the labels in the centre of their respective combos
- fd.top = new FormAttachment(targetSelector, 0, SWT.CENTER);
+ fd.top = new FormAttachment(projectTypeSelector, 0, SWT.CENTER);
platformLabel.setLayoutData(fd);
fd = new FormData();
fd.top = new FormAttachment(configSelector, 0, SWT.CENTER);
@@ -234,7 +194,7 @@ public class BuildPropertyPage extends PropertyPage implements IWorkbenchPropert
fd = new FormData();
fd.left = new FormAttachment(configSelector, 0, SWT.LEFT);
fd.right = new FormAttachment(100, 0);
- targetSelector.setLayoutData(fd);
+ projectTypeSelector.setLayoutData(fd);
// Anchor button right to combo and left to group
fd = new FormData();
fd.top = new FormAttachment(configSelector, 0, SWT.CENTER);
@@ -247,201 +207,105 @@ public class BuildPropertyPage extends PropertyPage implements IWorkbenchPropert
fd.top = new FormAttachment(55,0);
fd.right = new FormAttachment(manageConfigs, -5 , SWT.LEFT);
configSelector.setLayoutData(fd);
-
- // Create the sash form
- sashGroup = ControlFactory.createGroup(composite, ManagedBuilderUIMessages.getResourceString(SETTINGS_LABEL), 1);
- sashGroup.setLayoutData(new GridData(GridData.FILL_BOTH));
- sashForm = new SashForm(sashGroup, SWT.NONE);
- sashForm.setOrientation(SWT.HORIZONTAL);
- sashForm.setLayoutData(new GridData(GridData.FILL_BOTH));
- GridLayout layout = new GridLayout();
- layout.numColumns = 2;
- layout.marginHeight = 5;
- layout.marginWidth = 5;
- sashForm.setLayout(layout);
- createSelectionArea(sashForm);
- createEditArea(sashForm);
- initializeSashForm();
+ // Create the Tools Settings, Build Settings, ... Tabbed pane
+ Group tabGroup = ControlFactory.createGroup(parent, ManagedBuilderUIMessages.getResourceString(SETTINGS_LABEL), 1);
+ gd = new GridData(GridData.FILL_BOTH);
+ tabGroup.setLayoutData(gd);
+ fOptionBlock.createContents(tabGroup, getElement());
// Do not call this until the widgets are constructed
- handleTargetSelection();
+ handleProjectTypeSelection();
- WorkbenchHelp.setHelp(composite, ManagedBuilderHelpContextIds.MAN_PROJ_BUILD_PROP);
- return composite;
+ WorkbenchHelp.setHelp(parent, ManagedBuilderHelpContextIds.MAN_PROJ_BUILD_PROP);
}
-
- /* (non-Javadoc)
- * Add the tabs relevant to the project to edit area tab folder.
- */
- protected void createEditArea(Composite parent) {
- containerSC = new ScrolledComposite(parent, SWT.H_SCROLL | SWT.V_SCROLL);
- containerSC.setExpandHorizontal(true);
- containerSC.setExpandVertical(true);
-
- // Add a container for the build settings page
- settingsPageContainer = new Composite(containerSC, SWT.NULL);
- settingsPageContainer.setLayout(new PageLayout());
- containerSC.setContent(settingsPageContainer);
- containerSC.setMinSize(settingsPageContainer.computeSize(SWT.DEFAULT, SWT.DEFAULT));
- settingsPageContainer.layout();
- }
-
- protected void createSelectionArea (Composite parent) {
- // Create a label and list viewer
- Composite composite = ControlFactory.createComposite(parent, 1);
- optionList = new TreeViewer(composite, SWT.SINGLE|SWT.H_SCROLL|SWT.V_SCROLL|SWT.BORDER);
- optionList.addSelectionChangedListener(new ISelectionChangedListener() {
- public void selectionChanged(SelectionChangedEvent event) {
- handleOptionSelection();
- }
- });
- optionList.getControl().setLayoutData(new GridData(GridData.FILL_BOTH));
- optionList.setLabelProvider(new ToolListLabelProvider());
+ private void contentForClosedProject(Composite parent) {
+ Label label = new Label(parent, SWT.LEFT);
+ label.setText(ManagedBuilderUIMessages.getResourceString(MSG_CLOSEDPROJECT));
+ label.setFont(parent.getFont());
+
+ noDefaultAndApplyButton();
}
- /* (non-Javadoc)
- * Method displayOptionsForTool.
- * @param toolReference
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.jface.preference.IPreferencePage#performOk()
*/
- private void displayOptionsForCategory(IOptionCategory category) {
- // Do nothing if the selected category is is unchanged
- if (category == selectedCategory) {
- return;
- }
- selectedTool = null;
- selectedCategory = category;
-
- // Cache the current build setting page
- BuildSettingsPage oldPage = currentSettingsPage;
- currentSettingsPage = null;
-
- // Create a new settings page if necessary
- List pages = getPagesForConfig();
- ListIterator iter = pages.listIterator();
- while (iter.hasNext()) {
- BuildSettingsPage page = (BuildSettingsPage) iter.next();
- if (page instanceof BuildOptionSettingsPage &&
- ((BuildOptionSettingsPage)page).isForCategory(category)) {
- currentSettingsPage = page;
- break;
- }
- }
- if (currentSettingsPage == null) {
- currentSettingsPage = new BuildOptionSettingsPage(selectedConfiguration, category);
- pages.add(currentSettingsPage);
- currentSettingsPage.setContainer(this);
- if (currentSettingsPage.getControl() == null) {
- currentSettingsPage.createControl(settingsPageContainer);
- }
- }
-
- // Make all the other pages invisible
- Control[] children = settingsPageContainer.getChildren();
- Control currentControl = currentSettingsPage.getControl();
- for (int i = 0; i < children.length; i++) {
- if (children[i] != currentControl)
- children[i].setVisible(false);
- }
- currentSettingsPage.setVisible(true);
-
- // save the last page build options.
- // If the last page is tool page then parse all the options
- // and put it in the appropriate preference store.
- if (oldPage != null){
- if(oldPage instanceof BuildOptionSettingsPage) {
- ((BuildOptionSettingsPage)oldPage).storeSettings();
- }
- else if(oldPage instanceof BuildToolSettingsPage) {
- ((BuildToolSettingsPage)oldPage).storeSettings();
- ((BuildToolSettingsPage)oldPage).parseAllOptions();
+ public boolean performOk() {
+
+ // If the user did not visit this page, then there is nothing to do.
+ if (!displayedConfig) return true;
+
+ IRunnableWithProgress runnable = new IRunnableWithProgress() {
+ public void run(IProgressMonitor monitor) {
+ fOptionBlock.performApply(monitor);
}
+ };
+ IRunnableWithProgress op = new WorkspaceModifyDelegatingOperation(runnable);
+ try {
+ new ProgressMonitorDialog(getShell()).run(false, true, op);
+ } catch (InvocationTargetException e) {
+ Throwable e1 = e.getTargetException();
+ ManagedBuilderUIPlugin.errorDialog(getShell(), ManagedBuilderUIMessages.getResourceString("ManagedProjectPropertyPage.internalError"),e1.toString(), e1); //$NON-NLS-1$
+ return false;
+ } catch (InterruptedException e) {
+ // cancelled
+ return false;
}
- //update the field editors in the current page
- if(currentSettingsPage instanceof BuildOptionSettingsPage)
- ((BuildOptionSettingsPage)currentSettingsPage).updateFields();
-
- if (oldPage != null)
- oldPage.setVisible(false);
- // Set the size of the scrolled area
- containerSC.setMinSize(currentSettingsPage.computeSize());
- settingsPageContainer.layout();
+ // Write out the build model info
+ ManagedBuildManager.setDefaultConfiguration(getProject(), getSelectedConfiguration());
+ ManagedBuildManager.saveBuildInfo(getProject(), false);
+ return true;
}
- /* (non-Javadoc)
- * @param tool
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.jface.preference.PreferencePage#performDefaults()
*/
- private void displayOptionsForTool(ITool tool) {
- if (tool == selectedTool) {
- return;
- }
- // Unselect the category
- selectedCategory = null;
- // record that the tool selection has changed
- selectedTool = tool;
-
- // Cache the current build setting page
- BuildSettingsPage oldPage = currentSettingsPage;
- currentSettingsPage = null;
-
- // Create a new page if we need one
- List pages = getPagesForConfig();
- ListIterator iter = pages.listIterator();
- while (iter.hasNext()) {
- BuildSettingsPage page = (BuildSettingsPage) iter.next();
- if (page instanceof BuildToolSettingsPage &&
- ((BuildToolSettingsPage)page).isForTool(tool)) {
- currentSettingsPage = page;
- break;
- }
- }
- if (currentSettingsPage == null) {
- currentSettingsPage = new BuildToolSettingsPage(selectedConfiguration, tool);
- pages.add(currentSettingsPage);
- currentSettingsPage.setContainer(this);
- if (currentSettingsPage.getControl() == null) {
- currentSettingsPage.createControl(settingsPageContainer);
- }
- }
- // Make all the other pages invisible
- Control[] children = settingsPageContainer.getChildren();
- Control currentControl = currentSettingsPage.getControl();
- for (int i = 0; i < children.length; i++) {
- if (children[i] != currentControl)
- children[i].setVisible(false);
- }
-
- // Make the current page visible
- currentSettingsPage.setVisible(true);
-
- // save the last page build options.
- // If the last page is tool page then parse all the options
- // and put it in the appropriate preference store.
- if (oldPage != null){
- if(oldPage instanceof BuildOptionSettingsPage) {
- ((BuildOptionSettingsPage)oldPage).storeSettings();
- }
- else if(oldPage instanceof BuildToolSettingsPage) {
- ((BuildToolSettingsPage)oldPage).storeSettings();
- ((BuildToolSettingsPage)oldPage).parseAllOptions();
- }
+ protected void performDefaults() {
+ fOptionBlock.performDefaults();
+ super.performDefaults();
+ }
+
+ private String [] getPlatformNames() {
+ String [] names = new String[projectTypes.length];
+ for (int index = 0; index < projectTypes.length; ++index) {
+ names[index] = projectTypes[index].getName();
}
- //update the field editor that displays all the build options
- if(currentSettingsPage instanceof BuildToolSettingsPage)
- ((BuildToolSettingsPage)currentSettingsPage).updateAllOptionField();
+ return names;
+ }
- if (oldPage != null)
- oldPage.setVisible(false);
+ /* (non-Javadoc)
+ * @return
+ */
+ public IProjectType getSelectedProjectType() {
+ return selectedProjectType;
+ }
- // Set the size of the scrolled area
- containerSC.setMinSize(currentSettingsPage.computeSize());
- settingsPageContainer.layout();
+ private void populateConfigurations() {
+ // If the config select widget is not there yet, just stop
+ if (configSelector == null) return;
+
+ // Find the configurations defined for the platform
+ IManagedBuildInfo info = ManagedBuildManager.getBuildInfo(getProject());
+ configurations = info.getManagedProject().getConfigurations();
+ if (configurations.length == 0) return;
+
+ // Clear and replace the contents of the selector widget
+ configSelector.removeAll();
+ configSelector.setItems(getConfigurationNames());
+
+ // Make sure the active configuration is selected
+ IConfiguration defaultConfig = info.getDefaultConfiguration();
+ int index = configSelector.indexOf(defaultConfig.getName());
+ configSelector.select(index == -1 ? 0 : index);
+ handleConfigSelection();
}
/* (non-Javadoc)
- * @return an array of names for the configurations defined for the chosen target
+ * @return an array of names for the configurations defined for the chosen
*/
private String [] getConfigurationNames () {
String [] names = new String[configurations.length /*+ 1*/];
@@ -451,6 +315,17 @@ public class BuildPropertyPage extends PropertyPage implements IWorkbenchPropert
// names[names.length - 1] = ManagedBuilderUIPlugin.getResourceString(ALL_CONFS);
return names;
}
+
+ public void enableConfigSelection (boolean enable) {
+ configSelector.setEnabled(enable);
+ }
+
+ /* (non-Javadoc)
+ * @return
+ */
+ public IConfiguration getSelectedConfiguration() {
+ return selectedConfiguration;
+ }
/* (non-Javadoc)
* @return
@@ -465,71 +340,76 @@ public class BuildPropertyPage extends PropertyPage implements IWorkbenchPropert
}
/* (non-Javadoc)
- * Answers the list of settings pages for the selected configuration
- * @return
+ * @see org.eclipse.jface.preference.IPreferencePageContainer#getPreferenceStore()
*/
- private List getPagesForConfig() {
- // Make sure that something was selected
- if (selectedConfiguration == null) {
- return null;
- }
- List pages = (List) configToPageListMap.get(selectedConfiguration.getId());
- if (pages == null) {
- pages = new ArrayList();
- configToPageListMap.put(selectedConfiguration.getId(), pages);
- }
- return pages;
+ public IPreferenceStore getPreferenceStore()
+ {
+ return fOptionBlock.getPreferenceStore();
}
-
- private String [] getPlatformNames() {
- String [] names = new String[targets.length];
- for (int index = 0; index < targets.length; ++index) {
- names[index] = targets[index].getName();
- }
- return names;
+
+ /* (non-Javadoc)
+ * Return the IPreferenceStore of the Tool Settings block
+ */
+ public IPreferenceStore getToolSettingsPreferenceStore()
+ {
+ return fOptionBlock.getToolSettingsPreferenceStore();
}
/* (non-Javadoc)
- * @see org.eclipse.jface.preference.IPreferencePageContainer#getPreferenceStore()
+ * @see org.eclipse.cdt.ui.dialog.ICOptionContainer.getPreferences()
*/
- public IPreferenceStore getPreferenceStore()
+ public Preferences getPreferences()
{
- return settingsStore;
+ return null;
}
- private IProject getProject() {
+ public IProject getProject() {
Object element= getElement();
if (element != null && element instanceof IProject) {
return (IProject)element;
}
return null;
}
-
- /* (non-Javadoc)
- * @return
- */
- public ITarget getSelectedTarget() {
- return selectedTarget;
+
+ public void updateContainer() {
+ fOptionBlock.update();
+ setValid(fOptionBlock.isValid());
+ setErrorMessage(fOptionBlock.getErrorMessage());
}
- /* (non-Javadoc)
- * @return
- */
- protected IConfiguration getSelectedConfiguration() {
- return selectedConfiguration;
+ public boolean isValid() {
+ updateContainer();
+ return super.isValid();
}
- /* (non-Javadoc)
- * Safe accessor method
- *
- * @return Returns the Map of configurations to preference stores.
+ /**
+ * @see DialogPage#setVisible(boolean)
*/
- protected Map getSettingsStoreMap() {
- if (settingsStoreMap == null) {
- settingsStoreMap = new HashMap();
+ public void setVisible(boolean visible) {
+ super.setVisible(visible);
+ fOptionBlock.setVisible(visible);
+ if (visible) {
+ fOptionBlock.updateValues();
+ displayedConfig = true;
}
- return settingsStoreMap;
}
+
+ /**
+ * @see org.eclipse.jface.preference.IPreferencePageContainer#updateButtons()
+ */
+ public void updateButtons() {
+ }
+ /**
+ * @see org.eclipse.jface.preference.IPreferencePageContainer#updateMessage()
+ */
+ public void updateMessage() {
+ }
+ /**
+ * @see org.eclipse.jface.preference.IPreferencePageContainer#updateTitle()
+ */
+ public void updateTitle() {
+ }
+
/*
* Event Handlers
*/
@@ -537,7 +417,7 @@ public class BuildPropertyPage extends PropertyPage implements IWorkbenchPropert
// If there is nothing in config selection widget just bail
if (configSelector.getItemCount() == 0) return;
- // Check if the user has selected the "all" configuration
+ // TODO: Check if the user has selected the "all" configuration
int selectionIndex = configSelector.getSelectionIndex();
if (selectionIndex == -1) return;
String configName = configSelector.getItem(selectionIndex);
@@ -546,95 +426,58 @@ public class BuildPropertyPage extends PropertyPage implements IWorkbenchPropert
return;
} else {
// Cache the selected config
- selectedConfiguration = configurations[selectionIndex];
- }
-
- if (provider == null) {
- provider = new ToolListContentProvider();
- optionList.setContentProvider(provider);
- }
- optionList.setInput(selectedConfiguration);
- optionList.expandAll();
-
- // Create (or retrieve) the settings store for the configuration
- BuildToolsSettingsStore store = (BuildToolsSettingsStore) getSettingsStoreMap().get(selectedConfiguration.getId());
- if (store == null) {
- store = new BuildToolsSettingsStore(selectedConfiguration);
- getSettingsStoreMap().put(selectedConfiguration.getId(), store);
- }
- settingsStore = store;
-
- // Select the first tool in the list
- Object[] elements = provider.getElements(selectedConfiguration);
- Object primary = elements.length > 0 ? elements[0] : null;
-
-/* if (primary != null && primary instanceof ITool) {
- // set the tool as primary selection in the tree hence it displays all the build options.
- ITool tool = (ITool)primary;
- IOptionCategory top = tool.getTopOptionCategory();
- IOption[] topOpts = top.getOptions(selectedConfiguration);
- if (topOpts != null && topOpts.length == 0) {
- // Get the children categories and start looking
- IOptionCategory[] children = top.getChildCategories();
- for (int i = 0; i < children.length; i++) {
- IOptionCategory category = children[i];
- IOption[] catOpts = category.getOptions(selectedConfiguration);
- if (catOpts != null && catOpts.length > 0) {
- primary = category;
- break;
- }
- }
+ IConfiguration newConfig = configurations[selectionIndex];
+ if (newConfig != selectedConfiguration) {
+ // If the user has changed values, and is now switching configurations, prompt for saving
+ if (selectedConfiguration != null) {
+ if (fOptionBlock.isDirty()) {
+ Shell shell = ManagedBuilderUIPlugin.getDefault().getShell();
+ boolean shouldApply = MessageDialog.openQuestion(shell,
+ ManagedBuilderUIMessages.getResourceString("BuildPropertyPage.changes.save.title"), //$NON-NLS-1$
+ ManagedBuilderUIMessages.getFormattedString("BuildPropertyPage.changes.save.question", //$NON-NLS-1$
+ new String[] {selectedConfiguration.getName(), newConfig.getName()}));
+ if (shouldApply) {
+ if (performOk()) {
+ fOptionBlock.setDirty(false);
+ } else {
+ MessageDialog.openWarning(shell,
+ ManagedBuilderUIMessages.getResourceString("BuildPropertyPage.changes.save.title"), //$NON-NLS-1$
+ ManagedBuilderUIMessages.getResourceString("BuildPropertyPage.changes.save.error")); //$NON-NLS-1$
+ }
+ }
+ }
+ }
+ // Set the new selected configuration
+ selectedConfiguration = newConfig;
+ ManagedBuildManager.setSelectedConfiguration(getProject(), selectedConfiguration);
+ // TODO: Set the appropriate error parsers...
+ // TODO: Binary parsers too?
+ fOptionBlock.updateValues();
}
}
-*/
- if (primary != null) {
- optionList.setSelection(new StructuredSelection(primary));
- }
}
// Event handler for the manage configuration button event
private void handleManageConfig () {
- ManageConfigDialog manageDialog = new ManageConfigDialog(getShell(), ManagedBuilderUIMessages.getResourceString(MANAGE_TITLE), selectedTarget);
+ IManagedBuildInfo info = ManagedBuildManager.getBuildInfo(getProject());
+ ManageConfigDialog manageDialog = new ManageConfigDialog(getShell(), ManagedBuilderUIMessages.getResourceString(MANAGE_TITLE), info.getManagedProject());
if (manageDialog.open() == ManageConfigDialog.OK) {
boolean updateConfigs = false;
- // Get the build output name
- String newBuildOutput = manageDialog.getBuildArtifactName();
- if (!selectedTarget.getArtifactName().equals(newBuildOutput)) {
- selectedTarget.setArtifactName(newBuildOutput);
- }
- String newBuildExt = manageDialog.getBuildArtifaceExtension();
- if (!selectedTarget.getArtifactExtension().equals(newBuildExt)) {
- selectedTarget.setArtifactExtension(newBuildExt);
- }
-
- // Get the new make command
- if (manageDialog.useDefaultMakeCommand()) {
- // This is a cheap assignment to null so do it to be doubly sure
- selectedTarget.resetMakeCommand();
- } else {
- // Parse for command and arguments
- String rawCommand = manageDialog.getMakeCommand();
- String makeCommand = parseMakeCommand(rawCommand);
- selectedTarget.setMakeCommand(makeCommand);
- String makeArguments = parseMakeArgs(rawCommand);
- selectedTarget.setMakeArguments(makeArguments);
- }
-
// Check to see if any configurations have to be deleted
List deletedConfigs = manageDialog.getDeletedConfigIds();
Iterator iter = deletedConfigs.listIterator();
while (iter.hasNext()) {
String id = (String)iter.next();
- // Remove the configurations from the target
- selectedTarget.removeConfiguration(id);
+ // Remove the configurations from the project
+ info.getManagedProject().removeConfiguration(id);
// Remove any settings stores
- getSettingsStoreMap().remove(id);
+ fOptionBlock.removeValues(id);
// Clean up the UI
- configurations = selectedTarget.getConfigurations();
+ configurations = info.getManagedProject().getConfigurations();
configSelector.removeAll();
configSelector.setItems(getConfigurationNames());
configSelector.select(0);
@@ -645,16 +488,11 @@ public class BuildPropertyPage extends PropertyPage implements IWorkbenchPropert
SortedMap newConfigs = manageDialog.getNewConfigs();
Set keys = newConfigs.keySet();
Iterator keyIter = keys.iterator();
- Random r = new Random();
- r.setSeed(System.currentTimeMillis());
while (keyIter.hasNext()) {
String name = (String) keyIter.next();
IConfiguration parent = (IConfiguration) newConfigs.get(name);
if (parent != null) {
- int id = r.nextInt();
- if (id < 0) {
- id *= -1;
- }
+ int id = ManagedBuildManager.getRandomNumber();
// Create ID for the new component based on the parent ID and random component
String newId = parent.getId();
@@ -667,10 +505,16 @@ public class BuildPropertyPage extends PropertyPage implements IWorkbenchPropert
}
}
newId += ID_SEPARATOR + id;
- IConfiguration newConfig = selectedTarget.createConfiguration(parent, newId);
+ IConfiguration newConfig;
+ if (parent.isExtensionElement()) {
+ newConfig = info.getManagedProject().createConfiguration(parent, newId);
+ } else {
+ newConfig = info.getManagedProject().createConfigurationClone(parent, newId);
+ }
newConfig.setName(name);
+ newConfig.setArtifactName(info.getManagedProject().getDefaultArtifactName());
// Update the config lists
- configurations = selectedTarget.getConfigurations();
+ configurations = info.getManagedProject().getConfigurations();
configSelector.removeAll();
configSelector.setItems(getConfigurationNames());
configSelector.select(configSelector.indexOf(name));
@@ -684,22 +528,9 @@ public class BuildPropertyPage extends PropertyPage implements IWorkbenchPropert
return;
}
- private void handleOptionSelection() {
- // Get the selection from the tree list
- IStructuredSelection selection = (IStructuredSelection) optionList.getSelection();
-
- // Set the option page based on the selection
- Object element = selection.getFirstElement();
- if (element instanceof ITool) {
- displayOptionsForTool((ITool)element);
- } else if (element instanceof IOptionCategory) {
- displayOptionsForCategory((IOptionCategory)element);
- }
- }
-
- private void handleTargetSelection() {
+ private void handleProjectTypeSelection() {
// Is there anything in the selector widget
- if (targetSelector.getItemCount() == 0) {
+ if (projectTypeSelector.getItemCount() == 0) {
manageConfigs.setEnabled(false);
return;
}
@@ -708,233 +539,10 @@ public class BuildPropertyPage extends PropertyPage implements IWorkbenchPropert
manageConfigs.setEnabled(true);
// Cache the platform at the selection index
- selectedTarget = targets[targetSelector.getSelectionIndex()];
- ManagedBuildManager.setSelectedTarget(getProject(), selectedTarget);
+ selectedProjectType = projectTypes[projectTypeSelector.getSelectionIndex()];
+ ManagedBuildManager.setSelectedConfiguration(getProject(), selectedConfiguration);
// Update the contents of the configuration widget
populateConfigurations();
}
-
- /*
- * (non-javadoc)
- * Initialize the relative weights (widths) of the 2 sides of the sash.
- */
- protected void initializeSashForm() {
- sashForm.setWeights(DEFAULT_SASH_WEIGHTS);
- }
-
- /* (non-Javadoc)
- * @param rawCommand
- * @return
- */
- private String parseMakeArgs(String rawCommand) {
- StringBuffer result = new StringBuffer();
-
- // Parse out the command
- String actualCommand = parseMakeCommand(rawCommand);
-
- // The flags and targets are anything not in the command
- String arguments = rawCommand.substring(actualCommand.length());
-
- // If there aren't any, we can stop
- if (arguments.length() == 0) {
- return result.toString().trim();
- }
-
- String[] tokens = arguments.trim().split("\\s"); //$NON-NLS-1$
- /*
- * Cases to consider
- * --<flag> Sensible, modern single flag. Add to result and continue.
- * -<flags> Flags in single token, add to result and stop
- * -<flag_with_arg> ARG Flag with argument. Add next token if valid arg.
- * -<mixed_flags> ARG Mix of flags, one takes arg. Add next token if valid arg.
- * -<flag_with_arg>ARG Corrupt case where next token should be arg but isn't
- * -<flags> [target].. Flags with no args, another token, add flags and stop.
- */
- Pattern flagPattern = Pattern.compile("C|f|I|j|l|O|W"); //$NON-NLS-1$
- // Look for a '-' followed by 1 or more flags with no args and exactly 1 that expects args
- Pattern mixedFlagWithArg = Pattern.compile("-[^CfIjloW]*[CfIjloW]{1}.+"); //$NON-NLS-1$
- for (int i = 0; i < tokens.length; ++i) {
- String currentToken = tokens[i];
- if (currentToken.startsWith("--")) { //$NON-NLS-1$
- result.append(currentToken);
- result.append(" "); //$NON-NLS-1$
- } else if (currentToken.startsWith("-")) { //$NON-NLS-1$
- // Is there another token
- if (i + 1 >= tokens.length) {
- //We are done
- result.append(currentToken);
- } else {
- String nextToken = tokens[i + 1];
- // Are we expecting arguments
- Matcher flagMatcher = flagPattern.matcher(currentToken);
- if (!flagMatcher.find()) {
- // Evalutate whether the next token should be added normally
- result.append(currentToken);
- result.append(" "); //$NON-NLS-1$
- } else {
- // Look for the case where there is no space between flag and arg
- if (mixedFlagWithArg.matcher(currentToken).matches()) {
- // Add this single token and keep going
- result.append(currentToken);
- result.append(" "); //$NON-NLS-1$
- } else {
- // Add this token and the next one right now
- result.append(currentToken);
- result.append(" "); //$NON-NLS-1$
- result.append(nextToken);
- result.append(" "); //$NON-NLS-1$
- // Skip the next token the next time through, though
- ++i;
- }
- }
- }
- }
- }
-
- return result.toString().trim();
- }
-
- /* (non-Javadoc)
- *
- * @param string
- * @return
- */
- private String parseMakeCommand(String rawCommand) {
- StringBuffer command = new StringBuffer();
- boolean hasSpace = false;
-
- // Try to separate out the command from the arguments
- String[] result = rawCommand.split("\\s"); //$NON-NLS-1$
-
- /*
- * Here are the cases to consider:
- * cmd First segment is last segment, assume is command
- * cmd [flags] First segment is the command
- * path/cmd [flags] Same as above
- * path with space/make [flags] Must append each segment up-to flags as command
- */
- for (int i = 0; i < result.length; ++i) {
- // Get the segment
- String cmdSegment = result[i];
- // If there is not another segment, we found the end
- if (i + 1 >= result.length) {
- command.append(cmdSegment);
- } else {
- // See if the next segment is the start of the flags
- String nextSegment = result[i + 1];
- if (nextSegment.startsWith("-")) { //$NON-NLS-1$
- // we have found the end of the command
- command.append(cmdSegment);
- break;
- } else {
- command.append(cmdSegment);
- // Add the whitespace back
- command.append(" "); //$NON-NLS-1$
- hasSpace = true;
- }
- }
- }
-
-// if (hasSpace == true) {
-// return "\"" + command.toString().trim() + "\"";
-// } else {
- return command.toString().trim();
-// }
- }
-
- /*
- * (non-Javadoc)
- * @see org.eclipse.jface.preference.PreferencePage#performDefaults()
- */
- protected void performDefaults() {
- // Empty the page list
- List pages = getPagesForConfig();
- pages.clear();
-
- // Get the build manager to reset build info for project
- ManagedBuildManager.resetConfiguration(getProject(), getSelectedConfiguration());
-
- // Recreate the settings store for the configuration
- settingsStore = new BuildToolsSettingsStore(getSelectedConfiguration());
-
- // Write out the build model info
- ManagedBuildManager.setDefaultConfiguration(getProject(), getSelectedConfiguration());
- ManagedBuildManager.saveBuildInfo(getProject(), false);
-
- // Reset the category or tool selection and run selection event handler
- selectedCategory = null;
- selectedTool = null;
- handleOptionSelection();
- }
-
- /*
- * (non-Javadoc)
- * @see org.eclipse.jface.preference.IPreferencePage#performOk()
- */
- public boolean performOk() {
- // Force each settings page to update
- List pages = getPagesForConfig();
- // Make sure we have something to work on
- if (pages == null) {
- // Nothing to do
- return true;
- }
- ListIterator iter = pages.listIterator();
- while (iter.hasNext()) {
- BuildSettingsPage page = (BuildSettingsPage) iter.next();
- if (page == null) continue;
- if (page instanceof BuildToolSettingsPage) {
- // if the currentsettings page is not the tool settings page
- // then update the all build options field editor based on the
- // build options in other options settings page.
- if (!(currentSettingsPage instanceof BuildToolSettingsPage))
- ((BuildToolSettingsPage)page).updateAllOptionField();
- ((BuildToolSettingsPage)page).performOk();
- } else if (page instanceof BuildOptionSettingsPage) {
- ((BuildOptionSettingsPage)page).performOk();
- }
- }
-
- // Write out the build model info
- ManagedBuildManager.setDefaultConfiguration(getProject(), getSelectedConfiguration());
- ManagedBuildManager.saveBuildInfo(getProject(), false);
- return true;
- }
-
- private void populateConfigurations() {
- // If the config select widget is not there yet, just stop
- if (configSelector == null) return;
-
- // Find the configurations defined for the platform
- configurations = selectedTarget.getConfigurations();
- if (configurations.length == 0) return;
-
- // Clear and replace the contents of the selector widget
- configSelector.removeAll();
- configSelector.setItems(getConfigurationNames());
-
- // Make sure the active configuration is selected
- IManagedBuildInfo info = ManagedBuildManager.getBuildInfo(getProject());
- IConfiguration defaultConfig = info.getDefaultConfiguration(selectedTarget);
- int index = configSelector.indexOf(defaultConfig.getName());
- configSelector.select(index == -1 ? 0 : index);
- handleConfigSelection();
- }
-
- /**
- * @see org.eclipse.jface.preference.IPreferencePageContainer#updateButtons()
- */
- public void updateButtons() {
- }
- /**
- * @see org.eclipse.jface.preference.IPreferencePageContainer#updateMessage()
- */
- public void updateMessage() {
- }
- /**
- * @see org.eclipse.jface.preference.IPreferencePageContainer#updateTitle()
- */
- public void updateTitle() {
- }
} \ No newline at end of file
diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildSettingsPage.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildSettingsPage.java
index 2d9c518163..c9aa6233f0 100644
--- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildSettingsPage.java
+++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildSettingsPage.java
@@ -1,5 +1,3 @@
-package org.eclipse.cdt.managedbuilder.ui.properties;
-
/**********************************************************************
* Copyright (c) 2004 IBM Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
@@ -10,13 +8,20 @@ package org.eclipse.cdt.managedbuilder.ui.properties;
* Contributors:
* IBM Rational Software - Initial API and implementation
* **********************************************************************/
+package org.eclipse.cdt.managedbuilder.ui.properties;
import org.eclipse.cdt.managedbuilder.core.IConfiguration;
+import org.eclipse.cdt.managedbuilder.core.IResourceConfiguration;
+import org.eclipse.jface.preference.FieldEditor;
import org.eclipse.jface.preference.FieldEditorPreferencePage;
+import org.eclipse.jface.preference.IPreferencePageContainer;
import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.util.PropertyChangeEvent;
-public class BuildSettingsPage extends FieldEditorPreferencePage {
+public abstract class BuildSettingsPage extends FieldEditorPreferencePage {
protected IConfiguration configuration;
+ protected IResourceConfiguration resConfig;
+ private boolean dirty = false;
/**
* @param style
@@ -28,13 +33,56 @@ public class BuildSettingsPage extends FieldEditorPreferencePage {
configuration = config;
}
+ protected BuildSettingsPage(IResourceConfiguration resConfig) {
+ // Must be a grid layout and we don't want another set of buttons
+ super(GRID);
+ noDefaultAndApplyButton();
+ this.resConfig = resConfig;
+ }
/* (non-Javadoc)
* @see org.eclipse.jface.preference.FieldEditorPreferencePage#createFieldEditors()
*/
protected void createFieldEditors() {
// Get the preference store for the build settings
- IPreferenceStore settings = getPreferenceStore();
+ IPreferenceStore settings = getToolSettingsPreferenceStore();
setPreferenceStore(settings);
}
+ /**
+ * Return the tool settings preference store
+ */
+ protected IPreferenceStore getToolSettingsPreferenceStore() {
+ IPreferencePageContainer container = getContainer();
+ if (container instanceof BuildPropertyPage) {
+ return ((BuildPropertyPage)container).getToolSettingsPreferenceStore();
+ } else if ( container instanceof ResourceBuildPropertyPage) {
+ return ((ResourceBuildPropertyPage)container).getToolSettingsPreferenceStore();
+ }
+ return null;
+ }
+
+ /**
+ * Method called when the value of a dialog field changes
+ */
+ public void propertyChange(PropertyChangeEvent event) {
+ super.propertyChange(event);
+ if (event.getProperty().equals(FieldEditor.VALUE)) {
+ setDirty(true);
+ }
+ }
+
+ /**
+ * Sets the "dirty" state
+ */
+ public void setDirty(boolean b) {
+ dirty = b;
+ }
+
+ /**
+ * Returns the "dirty" state
+ */
+ public boolean isDirty() {
+ return dirty;
+ }
+
}
diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildToolSettingsPage.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildToolSettingsPage.java
index bc1cd780e0..091f0c8b25 100644
--- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildToolSettingsPage.java
+++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildToolSettingsPage.java
@@ -1,7 +1,5 @@
-package org.eclipse.cdt.managedbuilder.ui.properties;
-
/**********************************************************************
- * Copyright (c) 2004 IBM Rational Software Corporation and others.
+ * Copyright (c) 2004 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
@@ -10,6 +8,8 @@ package org.eclipse.cdt.managedbuilder.ui.properties;
* Contributors:
* IBM Rational Software - Initial API and implementation
* **********************************************************************/
+package org.eclipse.cdt.managedbuilder.ui.properties;
+
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
@@ -20,10 +20,13 @@ import java.util.Vector;
import org.eclipse.cdt.managedbuilder.core.BuildException;
import org.eclipse.cdt.managedbuilder.core.IConfiguration;
+import org.eclipse.cdt.managedbuilder.core.IManagedCommandLineGenerator;
+import org.eclipse.cdt.managedbuilder.core.IManagedCommandLineInfo;
import org.eclipse.cdt.managedbuilder.core.IOption;
+import org.eclipse.cdt.managedbuilder.core.IOptionCategory;
+import org.eclipse.cdt.managedbuilder.core.IResourceConfiguration;
import org.eclipse.cdt.managedbuilder.core.ITool;
import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
-import org.eclipse.cdt.managedbuilder.internal.core.ToolReference;
import org.eclipse.cdt.managedbuilder.internal.ui.ManagedBuilderUIMessages;
import org.eclipse.jface.preference.StringFieldEditor;
import org.eclipse.swt.graphics.Point;
@@ -49,16 +52,27 @@ public class BuildToolSettingsPage extends BuildSettingsPage {
private ITool tool;
// Map that holds all user object options and its values
private HashMap userObjsMap;
+
+ private boolean isItResourceConfigPage;
- BuildToolSettingsPage(IConfiguration configuration, ITool tool) {
+ public BuildToolSettingsPage(IConfiguration configuration, ITool tool) {
// Cache the configuration and tool this page is for
super(configuration);
this.tool = tool;
allOptionsId = tool.getId() + ".allOptions"; //$NON-NLS-1$
stringOptionsMap = new HashMap();
userObjsMap = new HashMap();
+ isItResourceConfigPage = false;
+ }
+ public BuildToolSettingsPage(IResourceConfiguration resConfig, ITool tool) {
+ // Cache the configuration and tool this page is for
+ super(resConfig);
+ this.tool = tool;
+ allOptionsId = tool.getId() + ".allOptions"; //$NON-NLS-1$
+ stringOptionsMap = new HashMap();
+ userObjsMap = new HashMap();
+ isItResourceConfigPage = true;
}
-
/* (non-Javadoc)
* @see org.eclipse.jface.preference.IPreferencePage#computeSize()
*/
@@ -83,7 +97,8 @@ public class BuildToolSettingsPage extends BuildSettingsPage {
// Add a field editor that displays over all build options
allOptionFieldEditor = new MultiLineTextFieldEditor(allOptionsId,
ALL_OPTIONS, getFieldEditorParent());
- getPreferenceStore().setValue(allOptionsId, ""); //$NON-NLS-1$
+ allOptionFieldEditor.getTextControl().setEditable(false);
+ getToolSettingsPreferenceStore().setValue(allOptionsId, ""); //$NON-NLS-1$
addField(allOptionFieldEditor);
}
@@ -157,6 +172,15 @@ public class BuildToolSettingsPage extends BuildSettingsPage {
return output;
}
+
+ /**
+ * Look for $(VALUE) in the command string
+ */
+ private String evaluateCommand( String command, String values ) {
+ if( command == null ) return values.trim();
+ if( command.indexOf( "$(" ) > 0 ) return command.replaceAll( "\\$\\([value|Value|VALUE]\\)", values.trim() ).trim(); //$NON-NLS-1$ //$NON-NLS-2$
+ else return (new String(command + values)).trim();
+ }
/**
* Returns all the build options string
@@ -165,54 +189,45 @@ public class BuildToolSettingsPage extends BuildSettingsPage {
* @throws BuildException
*/
private String getToolFlags() throws BuildException {
- ITool[] tools = configuration.getTools();
- for (int i = 0; i < tools.length; ++i) {
- if (tools[i] instanceof ToolReference) {
- if (((ToolReference) tools[i]).references(tool)) {
- tool = tools[i];
- break;
- }
- } else if (tools[i].equals(tool))
- break;
- }
StringBuffer buf = new StringBuffer();
+ ArrayList flags = new ArrayList();
// get the options for this tool
IOption[] options = tool.getOptions();
String listStr = ""; //$NON-NLS-1$
String[] listVal = null;
for (int k = 0; k < options.length; k++) {
IOption option = options[k];
+ buf.setLength( 0 );
switch (option.getValueType()) {
case IOption.BOOLEAN :
String boolCmd;
- if (getPreferenceStore().getBoolean(option.getId())) {
+ if (getToolSettingsPreferenceStore().getBoolean(option.getId())) {
boolCmd = option.getCommand();
} else {
// Note: getCommandFalse is new with CDT 2.0
boolCmd = option.getCommandFalse();
}
if (boolCmd != null && boolCmd.length() > 0) {
- buf.append(boolCmd + ITool.WHITE_SPACE);
+ buf.append(boolCmd);
}
break;
case IOption.ENUMERATED :
- String enumCommand = getPreferenceStore().getString(
+ String enumCommand = getToolSettingsPreferenceStore().getString(
option.getId());
if (enumCommand.indexOf(DEFAULT_SEPERATOR) != -1)
enumCommand = option.getSelectedEnum();
String enum = option.getEnumCommand(enumCommand);
if (enum.length() > 0) {
- buf.append(enum + ITool.WHITE_SPACE);
+ buf.append(enum);
}
break;
case IOption.STRING :
String strCmd = option.getCommand();
- String val = getPreferenceStore().getString(option.getId());
+ String val = getToolSettingsPreferenceStore().getString(option.getId());
// add this string option value to the list
stringOptionsMap.put(option, val);
if (val.length() > 0) {
- if (strCmd != null) buf.append(strCmd);
- buf.append(val + ITool.WHITE_SPACE);
+ buf.append(evaluateCommand( strCmd, val ));
}
break;
case IOption.STRING_LIST :
@@ -221,23 +236,30 @@ public class BuildToolSettingsPage extends BuildSettingsPage {
case IOption.LIBRARIES :
case IOption.OBJECTS :
String cmd = option.getCommand();
- listStr = getPreferenceStore().getString(option.getId());
+ listStr = getToolSettingsPreferenceStore().getString(option.getId());
if (cmd == null)
userObjsMap.put(option, listStr);
listVal = BuildToolsSettingsStore.parseString(listStr);
for (int j = 0; j < listVal.length; j++) {
String temp = listVal[j];
- if (cmd != null)
- buf.append(cmd + temp + ITool.WHITE_SPACE);
- else
- buf.append(temp + ITool.WHITE_SPACE);
+ buf.append( evaluateCommand( cmd, temp ) + ITool.WHITE_SPACE);
}
break;
default :
break;
}
+ if( buf.toString().trim().length() > 0 ) flags.add( buf.toString().trim() );
+ }
+
+ String outputName = "temp"; //$NON-NLS-1$
+ if (tool.getInputExtensions().get(0) != null) {
+ outputName += tool.getInputExtensions().get(0);
}
- return buf.toString().trim();
+ String[] f = new String[ flags.size() ];
+ IManagedCommandLineGenerator gen = tool.getCommandLineGenerator();
+ IManagedCommandLineInfo info = gen.generateCommandLineInfo( tool, tool.getToolCommand(), (String[])flags.toArray( f ),
+ tool.getOutputFlag(), tool.getOutputPrefix(), outputName, new String[0], tool.getCommandLinePattern() );
+ return info.getFlags();
}
/**
@@ -259,18 +281,8 @@ public class BuildToolSettingsPage extends BuildSettingsPage {
* field editor and stores the options to the corresponding option fields.
*/
public void parseAllOptions() {
- ITool[] tools = configuration.getTools();
- for (int i = 0; i < tools.length; ++i) {
- if (tools[i] instanceof ToolReference) {
- if (((ToolReference) tools[i]).references(tool)) {
- tool = tools[i];
- break;
- }
- } else if (tools[i].equals(tool))
- break;
- }
// Get the all build options string from all options field
- String alloptions = getPreferenceStore().getString(allOptionsId);
+ String alloptions = getToolSettingsPreferenceStore().getString(allOptionsId);
// list that holds the options for the option type other than
// boolean,string and enumerated
List optionsList = new ArrayList();
@@ -302,53 +314,55 @@ public class BuildToolSettingsPage extends BuildSettingsPage {
// if the value does not exist in string option or user objects
// option
if (!optionValueExist) {
- // check whether the option value is already exist
- // and also change the preference store based on
- // the option value
- switch (opt.getValueType()) {
- case IOption.BOOLEAN :
- String boolCommand;
- boolCommand = opt.getCommand();
- if (boolCommand != null && boolCommand.equals(optionValue)) {
- getPreferenceStore()
- .setValue(opt.getId(), true);
- optionValueExist = true;
- }
- boolCommand = opt.getCommandFalse();
- if (boolCommand != null && boolCommand.equals(optionValue)) {
- getPreferenceStore()
- .setValue(opt.getId(), false);
- optionValueExist = true;
- }
- break;
- case IOption.ENUMERATED :
- String enum = ""; //$NON-NLS-1$
- String[] enumValues = opt.getApplicableValues();
- for (int i = 0; i < enumValues.length; i++) {
- if (opt.getEnumCommand(enumValues[i]).equals(
- optionValue)) {
- enum = enumValues[i];
+ try {
+ // check whether the option value is already exist
+ // and also change the preference store based on
+ // the option value
+ switch (opt.getValueType()) {
+ case IOption.BOOLEAN :
+ String boolCommand;
+ boolCommand = opt.getCommand();
+ if (boolCommand != null && boolCommand.equals(optionValue)) {
+ getToolSettingsPreferenceStore()
+ .setValue(opt.getId(), true);
optionValueExist = true;
}
- }
- if (!enum.equals("")) //$NON-NLS-1$
- getPreferenceStore()
- .setValue(opt.getId(), enum);
- break;
- case IOption.STRING_LIST :
- case IOption.INCLUDE_PATH :
- case IOption.PREPROCESSOR_SYMBOLS :
- case IOption.LIBRARIES :
- if (opt.getCommand() != null
- && optionValue.startsWith(opt
- .getCommand())) {
- optionsList.add(optionValue);
- optionValueExist = true;
- }
- break;
- default :
- break;
- }
+ boolCommand = opt.getCommandFalse();
+ if (boolCommand != null && boolCommand.equals(optionValue)) {
+ getToolSettingsPreferenceStore()
+ .setValue(opt.getId(), false);
+ optionValueExist = true;
+ }
+ break;
+ case IOption.ENUMERATED :
+ String enum = ""; //$NON-NLS-1$
+ String[] enumValues = opt.getApplicableValues();
+ for (int i = 0; i < enumValues.length; i++) {
+ if (opt.getEnumCommand(enumValues[i]).equals(
+ optionValue)) {
+ enum = enumValues[i];
+ optionValueExist = true;
+ }
+ }
+ if (!enum.equals("")) //$NON-NLS-1$
+ getToolSettingsPreferenceStore()
+ .setValue(opt.getId(), enum);
+ break;
+ case IOption.STRING_LIST :
+ case IOption.INCLUDE_PATH :
+ case IOption.PREPROCESSOR_SYMBOLS :
+ case IOption.LIBRARIES :
+ if (opt.getCommand() != null
+ && optionValue.startsWith(opt
+ .getCommand())) {
+ optionsList.add(optionValue);
+ optionValueExist = true;
+ }
+ break;
+ default :
+ break;
+ }
+ } catch (BuildException e) {}
}
}
// If the parsed string does not match with any previous option
@@ -373,7 +387,7 @@ public class BuildToolSettingsPage extends BuildSettingsPage {
if (alloptions.indexOf(vals[t]) != -1)
buf.append(vals[t] + ITool.WHITE_SPACE);
}
- getPreferenceStore().setValue(((IOption) key).getId(),
+ getToolSettingsPreferenceStore().setValue(((IOption) key).getId(),
buf.toString().trim());
}
}
@@ -394,7 +408,7 @@ public class BuildToolSettingsPage extends BuildSettingsPage {
String listArr[] = new String[list.size()];
list.toArray(listArr);
String liststr = BuildToolsSettingsStore.createList(listArr);
- getPreferenceStore().setValue(((IOption) key).getId(), liststr);
+ getToolSettingsPreferenceStore().setValue(((IOption) key).getId(), liststr);
}
}
// Now update the preference store with parsed options
@@ -405,52 +419,54 @@ public class BuildToolSettingsPage extends BuildSettingsPage {
String name = opt.getId();
String listStr = ""; //$NON-NLS-1$
String[] listVal = null;
- switch (opt.getValueType()) {
- case IOption.BOOLEAN :
- ArrayList optsList = new ArrayList(optionsArr);
- if (opt.getCommand() != null
- && opt.getCommand().length() > 0
- && !optsList.contains(opt.getCommand()))
- getPreferenceStore().setValue(opt.getId(), false);
- if (opt.getCommandFalse() != null
- && opt.getCommandFalse().length() > 0
- && !optsList.contains(opt.getCommandFalse()))
- getPreferenceStore().setValue(opt.getId(), true);
- break;
- case IOption.STRING :
- // TODO create a lst of valid default string options for the tool
- if (getDefaultOptionNames().contains(opt.getName())) {
- String newOptions = getPreferenceStore().getString(
- opt.getId());
- if (addnOptions.length() > 0) {
- newOptions = newOptions + ITool.WHITE_SPACE
- + addnOptions.toString().trim();
+ try {
+ switch (opt.getValueType()) {
+ case IOption.BOOLEAN :
+ ArrayList optsList = new ArrayList(optionsArr);
+ if (opt.getCommand() != null
+ && opt.getCommand().length() > 0
+ && !optsList.contains(opt.getCommand()))
+ getToolSettingsPreferenceStore().setValue(opt.getId(), false);
+ if (opt.getCommandFalse() != null
+ && opt.getCommandFalse().length() > 0
+ && !optsList.contains(opt.getCommandFalse()))
+ getToolSettingsPreferenceStore().setValue(opt.getId(), true);
+ break;
+ case IOption.STRING :
+ // TODO create a lst of valid default string options for the tool
+ if (getDefaultOptionNames().contains(opt.getName())) {
+ String newOptions = getToolSettingsPreferenceStore().getString(
+ opt.getId());
+ if (addnOptions.length() > 0) {
+ newOptions = newOptions + ITool.WHITE_SPACE
+ + addnOptions.toString().trim();
+ }
+ getToolSettingsPreferenceStore().setValue(opt.getId(), newOptions);
}
- getPreferenceStore().setValue(opt.getId(), newOptions);
- }
- break;
- case IOption.STRING_LIST :
- case IOption.INCLUDE_PATH :
- case IOption.PREPROCESSOR_SYMBOLS :
- case IOption.LIBRARIES :
- ArrayList newList = new ArrayList();
- for (int i = 0; i < optionsList.size(); i++) {
- if (opt.getCommand() != null
- && ((String) optionsList.get(i)).startsWith(opt
- .getCommand())) {
- newList.add(((String) optionsList.get(i))
- .substring(opt.getCommand().length()));
+ break;
+ case IOption.STRING_LIST :
+ case IOption.INCLUDE_PATH :
+ case IOption.PREPROCESSOR_SYMBOLS :
+ case IOption.LIBRARIES :
+ ArrayList newList = new ArrayList();
+ for (int i = 0; i < optionsList.size(); i++) {
+ if (opt.getCommand() != null
+ && ((String) optionsList.get(i)).startsWith(opt
+ .getCommand())) {
+ newList.add(((String) optionsList.get(i))
+ .substring(opt.getCommand().length()));
+ }
}
- }
- String[] strlist = new String[newList.size()];
- newList.toArray(strlist);
- newList.clear();
- getPreferenceStore().setValue(opt.getId(),
- BuildToolsSettingsStore.createList(strlist));
- break;
- default :
- break;
- }
+ String[] strlist = new String[newList.size()];
+ newList.toArray(strlist);
+ newList.clear();
+ getToolSettingsPreferenceStore().setValue(opt.getId(),
+ BuildToolsSettingsStore.createList(strlist));
+ break;
+ default :
+ break;
+ }
+ } catch (BuildException e) {}
}
}
@@ -462,61 +478,84 @@ public class BuildToolSettingsPage extends BuildSettingsPage {
boolean result = super.performOk();
//parse and store all build options in the corresponding preference store
- parseAllOptions();
+ //parseAllOptions();
// Write the preference store values back to the build model
- ITool[] tools = configuration.getTools();
- for (int i = 0; i < tools.length; ++i) {
- if (tools[i] instanceof ToolReference) {
- if (((ToolReference) tools[i]).references(tool)) {
- tool = tools[i];
- break;
- }
- } else if (tools[i].equals(tool)) {
- break;
- }
+ IOptionCategory category = (IOptionCategory)tool;
+ Object[][] options;
+ if ( isItResourceConfigPage ) {
+ options = category.getOptions(resConfig);
+ } else {
+ options = category.getOptions(configuration);
}
- IOption[] options = tool.getOptions();
+ if ( options == null)
+ return true;
+
for (int i = 0; i < options.length; i++) {
- IOption option = options[i];
- // Transfer value from preference store to options
- switch (option.getValueType()) {
- case IOption.BOOLEAN :
- boolean boolVal = getPreferenceStore().getBoolean(option.getId());
- ManagedBuildManager.setOption(configuration, option, boolVal);
- break;
- case IOption.ENUMERATED :
- String enumVal = getPreferenceStore().getString(option.getId());
- String enumId = option.getEnumeratedId(enumVal);
- ManagedBuildManager.setOption(configuration, option,
+ ITool tool = (ITool)options[i][0];
+ if (tool == null) break; // The array may not be full
+ IOption option = (IOption)options[i][1];
+ try {
+ // Transfer value from preference store to options
+ IOption setOption;
+ switch (option.getValueType()) {
+ case IOption.BOOLEAN :
+ boolean boolVal = getToolSettingsPreferenceStore().getBoolean(option.getId());
+ setOption = ManagedBuildManager.setOption(configuration, tool, option, boolVal);
+ // Reset the preference store since the Id may have changed
+ if (setOption != option) {
+ getToolSettingsPreferenceStore().setValue(setOption.getId(), boolVal);
+ }
+ break;
+ case IOption.ENUMERATED :
+ String enumVal = getToolSettingsPreferenceStore().getString(option.getId());
+ String enumId = option.getEnumeratedId(enumVal);
+ setOption = ManagedBuildManager.setOption(configuration, tool, option,
(enumId != null && enumId.length() > 0) ? enumId : enumVal);
- break;
- case IOption.STRING :
- String strVal = getPreferenceStore().getString(option.getId());
- ManagedBuildManager.setOption(configuration, option, strVal);
- break;
- case IOption.STRING_LIST :
- case IOption.INCLUDE_PATH :
- case IOption.PREPROCESSOR_SYMBOLS :
- case IOption.LIBRARIES :
- case IOption.OBJECTS :
- String listStr = getPreferenceStore().getString(option.getId());
- String[] listVal = BuildToolsSettingsStore.parseString(listStr);
- ManagedBuildManager.setOption(configuration, option, listVal);
- break;
- default :
- break;
- }
+ // Reset the preference store since the Id may have changed
+ if (setOption != option) {
+ getToolSettingsPreferenceStore().setValue(setOption.getId(), enumVal);
+ }
+ break;
+ case IOption.STRING :
+ String strVal = getToolSettingsPreferenceStore().getString(option.getId());
+ setOption = ManagedBuildManager.setOption(configuration, tool, option, strVal);
+ // Reset the preference store since the Id may have changed
+ if (setOption != option) {
+ getToolSettingsPreferenceStore().setValue(setOption.getId(), strVal);
+ }
+ break;
+ case IOption.STRING_LIST :
+ case IOption.INCLUDE_PATH :
+ case IOption.PREPROCESSOR_SYMBOLS :
+ case IOption.LIBRARIES :
+ case IOption.OBJECTS :
+ String listStr = getToolSettingsPreferenceStore().getString(option.getId());
+ String[] listVal = BuildToolsSettingsStore.parseString(listStr);
+ setOption = ManagedBuildManager.setOption(configuration, tool, option, listVal);
+ // Reset the preference store since the Id may have changed
+ if (setOption != option) {
+ getToolSettingsPreferenceStore().setValue(setOption.getId(), listStr);
+ }
+ break;
+ default :
+ break;
+ }
+ } catch (BuildException e) {}
}
// Get the actual value out of the field editor
- String command = getPreferenceStore().getString(tool.getId());
+ String command = getToolSettingsPreferenceStore().getString(tool.getId());
if (command.length() == 0) {
return result;
}
// Ask the build system manager to change the tool command
- ManagedBuildManager.setToolCommand(configuration, tool, command);
+ if ( isItResourceConfigPage ) {
+ ManagedBuildManager.setToolCommand(resConfig, tool, command);
+ } else {
+ ManagedBuildManager.setToolCommand(configuration, tool, command);
+ }
return result;
}
@@ -534,7 +573,7 @@ public class BuildToolSettingsPage extends BuildSettingsPage {
public void updateAllOptionField() {
try {
if (getToolFlags() != null) {
- getPreferenceStore().setValue(allOptionsId, getToolFlags());
+ getToolSettingsPreferenceStore().setValue(allOptionsId, getToolFlags());
allOptionFieldEditor.load();
}
} catch (BuildException e) {
diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildToolsSettingsStore.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildToolsSettingsStore.java
index 9507da90b5..1aa7a628db 100644
--- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildToolsSettingsStore.java
+++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildToolsSettingsStore.java
@@ -1,7 +1,5 @@
-package org.eclipse.cdt.managedbuilder.ui.properties;
-
/**********************************************************************
- * Copyright (c) 2002,2003 Rational Software Corporation and others.
+ * Copyright (c) 2002,2004 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
@@ -10,6 +8,7 @@ package org.eclipse.cdt.managedbuilder.ui.properties;
* Contributors:
* IBM Rational Software - Initial API and implementation
* **********************************************************************/
+package org.eclipse.cdt.managedbuilder.ui.properties;
import java.util.HashMap;
import java.util.Map;
@@ -18,6 +17,7 @@ import org.eclipse.cdt.managedbuilder.core.BuildException;
import org.eclipse.cdt.managedbuilder.core.IConfiguration;
import org.eclipse.cdt.managedbuilder.core.IOption;
import org.eclipse.cdt.managedbuilder.core.IOptionCategory;
+import org.eclipse.cdt.managedbuilder.core.IResourceConfiguration;
import org.eclipse.cdt.managedbuilder.core.ITool;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.util.IPropertyChangeListener;
@@ -32,7 +32,10 @@ public class BuildToolsSettingsStore implements IPreferenceStore {
private Map settingsMap;
private boolean dirtyFlag;
private IConfiguration owner;
-
+
+ private IResourceConfiguration resConfigOwner;
+// private IFile file;
+
/**
*
*/
@@ -47,11 +50,22 @@ public class BuildToolsSettingsStore implements IPreferenceStore {
public BuildToolsSettingsStore (IConfiguration config) {
this();
owner = config;
+ resConfigOwner = null;
// Now populate the options map
populateSettingsMap();
}
-
+ public BuildToolsSettingsStore(IResourceConfiguration resConfig) {
+ this();
+ // owner = resConfig.getParent();
+ owner = null;
+ resConfigOwner = resConfig;
+ populateSettingsMap();
+ }
+ /**
+ *
+ */
+
/* (non-Javadoc)
* @see org.eclipse.jface.preference.IPreferenceStore#addPropertyChangeListener(org.eclipse.jface.util.IPropertyChangeListener)
*/
@@ -213,86 +227,98 @@ public class BuildToolsSettingsStore implements IPreferenceStore {
getOptionsForCategory(children[i]);
}
// Else get the options for this category and add them to the map
- IOption [] options = cat.getOptions(owner);
+ Object[][] options;
+ if(resConfigOwner != null) {
+ options = cat.getOptions(resConfigOwner);
+ } else {
+ options = cat.getOptions(owner);
+ }
+
+ if ( options == null)
+ return;
for (int j = 0; j < options.length; ++j) {
- IOption opt = options[j];
+ ITool tool = (ITool)options[j][0];
+ if (tool == null) break; // The array may not be full
+ IOption opt = (IOption)options[j][1];
String name = opt.getId();
Object value;
- // Switch on the type of option
- switch (opt.getValueType()) {
- case IOption.BOOLEAN :
- try {
- value = new Boolean(opt.getBooleanValue());
- } catch (BuildException e) {
- // Exception occurs if there's an option value type mismatch
+ try {
+ // Switch on the type of option
+ switch (opt.getValueType()) {
+ case IOption.BOOLEAN :
+ try {
+ value = new Boolean(opt.getBooleanValue());
+ } catch (BuildException e) {
+ // Exception occurs if there's an option value type mismatch
+ break;
+ }
+ getSettingsMap().put(name, value);
+ break;
+
+ case IOption.ENUMERATED :
+ try{
+ String selId;
+ selId = opt.getSelectedEnum();
+ value = opt.getEnumName(selId);
+ } catch (BuildException e) {
+ break;
+ }
+ getSettingsMap().put(name, value);
break;
- }
- getSettingsMap().put(name, value);
- break;
-
- case IOption.ENUMERATED :
- try{
- String selId;
- selId = opt.getSelectedEnum();
- value = opt.getEnumName(selId);
- } catch (BuildException e) {
+
+ case IOption.STRING :
+ try {
+ value = opt.getStringValue();
+ } catch (BuildException e) {
+ break;
+ }
+ getSettingsMap().put(name, value);
break;
- }
- getSettingsMap().put(name, value);
- break;
-
- case IOption.STRING :
- try {
- value = opt.getStringValue();
- } catch (BuildException e) {
+
+ case IOption.STRING_LIST :
+ try {
+ value = createList(opt.getStringListValue());
+ } catch (BuildException e) {
+ break;
+ }
+ getSettingsMap().put(name, value);
break;
- }
- getSettingsMap().put(name, value);
- break;
-
- case IOption.STRING_LIST :
- try {
- value = createList(opt.getStringListValue());
- } catch (BuildException e) {
+ case IOption.INCLUDE_PATH :
+ try {
+ value = createList(opt.getIncludePaths());
+ } catch (BuildException e) {
+ break;
+ }
+ getSettingsMap().put(name, value);
break;
- }
- getSettingsMap().put(name, value);
- break;
- case IOption.INCLUDE_PATH :
- try {
- value = createList(opt.getIncludePaths());
- } catch (BuildException e) {
+ case IOption.PREPROCESSOR_SYMBOLS :
+ try {
+ value = createList(opt.getDefinedSymbols());
+ } catch (BuildException e) {
+ break;
+ }
+ getSettingsMap().put(name, value);
break;
- }
- getSettingsMap().put(name, value);
- break;
- case IOption.PREPROCESSOR_SYMBOLS :
- try {
- value = createList(opt.getDefinedSymbols());
- } catch (BuildException e) {
+ case IOption.LIBRARIES :
+ try {
+ value = createList(opt.getLibraries());
+ } catch (BuildException e) {
+ break;
+ }
+ getSettingsMap().put(name, value);
break;
- }
- getSettingsMap().put(name, value);
- break;
- case IOption.LIBRARIES :
- try {
- value = createList(opt.getLibraries());
- } catch (BuildException e) {
+ case IOption.OBJECTS :
+ try {
+ value = createList(opt.getUserObjects());
+ } catch (BuildException e) {
+ break;
+ }
+ getSettingsMap().put(name, value);
break;
- }
- getSettingsMap().put(name, value);
- break;
- case IOption.OBJECTS :
- try {
- value = createList(opt.getUserObjects());
- } catch (BuildException e) {
+ default :
break;
- }
- getSettingsMap().put(name, value);
- break;
- default :
- break;
- }
+ }
+ } catch (BuildException e) {}
}
}
@@ -340,7 +366,16 @@ public class BuildToolsSettingsStore implements IPreferenceStore {
*/
private void populateSettingsMap() {
// Each configuration has a list of tools
- ITool [] tools = owner.getTools();
+ ITool [] tools;
+
+ // If resConfigOwner is not null, get the resource specific tools.
+
+ if ( resConfigOwner != null) {
+ tools = resConfigOwner.getTools();
+ } else {
+ tools = owner.getFilteredTools();
+ }
+
for (int index = 0; index < tools.length; ++index) {
// Add the tool to the map
ITool tool = tools[index];
@@ -468,4 +503,16 @@ public class BuildToolsSettingsStore implements IPreferenceStore {
}
+ /**
+ * @return Returns the resConfigOwner.
+ */
+ public IResourceConfiguration getResConfigOwner() {
+ return resConfigOwner;
+ }
+ /**
+ * @param resConfigOwner The resConfigOwner to set.
+ */
+ public void setResConfigOwner(IResourceConfiguration resConfigOwner) {
+ this.resConfigOwner = resConfigOwner;
+ }
}
diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/ManageConfigDialog.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/ManageConfigDialog.java
index f2ab605760..3cd684bfd7 100644
--- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/ManageConfigDialog.java
+++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/ManageConfigDialog.java
@@ -1,7 +1,5 @@
-package org.eclipse.cdt.managedbuilder.ui.properties;
-
/**********************************************************************
- * Copyright (c) 2002,2004 Rational Software Corporation and others.
+ * Copyright (c) 2002,2004 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
@@ -10,21 +8,19 @@ package org.eclipse.cdt.managedbuilder.ui.properties;
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
+package org.eclipse.cdt.managedbuilder.ui.properties;
import java.util.ArrayList;
import java.util.SortedMap;
import java.util.TreeMap;
+import org.eclipse.cdt.managedbuilder.core.IManagedProject;
import org.eclipse.cdt.managedbuilder.core.IConfiguration;
-import org.eclipse.cdt.managedbuilder.core.ITarget;
-import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
import org.eclipse.cdt.managedbuilder.internal.ui.ManagedBuilderUIMessages;
import org.eclipse.core.resources.IProject;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.swt.SWT;
-import org.eclipse.swt.accessibility.AccessibleAdapter;
-import org.eclipse.swt.accessibility.AccessibleEvent;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.SelectionAdapter;
@@ -38,7 +34,6 @@ import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.List;
import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Text;
public class ManageConfigDialog extends Dialog {
// String constants
@@ -49,41 +44,27 @@ public class ManageConfigDialog extends Dialog {
private static final String PREFIX = "ManageConfig"; //$NON-NLS-1$
private static final String LABEL = PREFIX + ".label"; //$NON-NLS-1$
private static final String RESTORE = LABEL + ".restore"; //$NON-NLS-1$
- private static final String GROUP = LABEL + ".makecmdgroup"; //$NON-NLS-1$
- private static final String DEF_BTN = LABEL + ".makecmddef"; //$NON-NLS-1$
- private static final String OUTPUT_GROUP = LABEL + ".output.group"; //$NON-NLS-1$
- private static final String OUTPUT_EXT = LABEL + ".output.extension"; //$NON-NLS-1$
- private static final String OUTPUT_NAME = LABEL + ".output.name"; //$NON-NLS-1$
private static final String CONFIGS = LABEL + ".configs"; //$NON-NLS-1$
private static final String CURRENT_CONFIGS = CONFIGS + ".current"; //$NON-NLS-1$
private static final String DELETED_CONFIGS = CONFIGS + ".deleted"; //$NON-NLS-1$
private static final String CONF_DLG = LABEL + ".new.config.dialog"; //$NON-NLS-1$
- // The name of the build artifact
- private String artifactExt;
- private String artifactName;
+ private static final String EMPTY_STRING = new String();
+
// The list of configurations to delete
private SortedMap deletedConfigs;
// Map of configuration names and ids
private SortedMap existingConfigs;
- // The make command associated with the target
- private String makeCommand;
// The target the configs belong to
- private ITarget managedTarget;
+ private IManagedProject managedProject;
// Map of new configurations chosen by the user
private SortedMap newConfigs;
// The title of the dialog.
private String title = ""; //$NON-NLS-1$
- // State of the check box on exit
- private boolean useDefaultMake;
// Widgets
- protected Text buildArtifactExt;
- protected Text buildArtifactName;
protected List currentConfigList;
protected List deletedConfigList;
- protected Button makeCommandDefault;
- protected Text makeCommandEntry;
protected Button newBtn;
protected Button okBtn;
protected Button removeBtn;
@@ -92,20 +73,14 @@ public class ManageConfigDialog extends Dialog {
/**
* @param parentShell
*/
- protected ManageConfigDialog(Shell parentShell, String title, ITarget target) {
+ protected ManageConfigDialog(Shell parentShell, String title, IManagedProject proj) {
super(parentShell);
this.title = title;
- this.managedTarget = target;
-
- setMakeCommand();
-
- // Get the name of the build artifact
- artifactExt = managedTarget.getArtifactExtension();
- artifactName = managedTarget.getArtifactName();
+ this.managedProject = proj;
// Get the defined configurations from the target
getExistingConfigs().clear();
- IConfiguration [] configs = managedTarget.getConfigurations();
+ IConfiguration [] configs = managedProject.getConfigurations();
for (int i = 0; i < configs.length; i++) {
IConfiguration configuration = configs[i];
getExistingConfigs().put(configuration.getName(), configuration.getId());
@@ -114,22 +89,6 @@ public class ManageConfigDialog extends Dialog {
getDeletedConfigs().clear();
getNewConfigs().clear();
}
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.dialogs.Dialog#buttonPressed(int)
- */
- protected void buttonPressed(int buttonId) {
- if (buttonId == IDialogConstants.OK_ID) {
- useDefaultMake = makeCommandDefault.getSelection();
- makeCommand = makeCommandEntry.getText().trim();
- artifactName = buildArtifactName.getText().trim();
- artifactExt = buildArtifactExt.getText().trim();
- } else {
- useDefaultMake = true;
- artifactName = managedTarget.getArtifactName();
- }
- super.buttonPressed(buttonId);
- }
/* (non-Javadoc)
* @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell)
@@ -139,72 +98,6 @@ public class ManageConfigDialog extends Dialog {
if (title != null)
shell.setText(title);
}
-
- /* (non-Javadoc)
- * Creates the group that contains the build artifact name controls.
- */
- private void createBuildArtifactGroup(Composite parent) {
- final Group outputGroup = new Group(parent, SWT.NONE);
- outputGroup.setFont(parent.getFont());
- outputGroup.setText(ManagedBuilderUIMessages.getResourceString(OUTPUT_GROUP));
- outputGroup.setLayout(new GridLayout(3, false));
- outputGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-
- // Three labels
- final Label nameLabel = new Label(outputGroup, SWT.LEFT);
- nameLabel.setFont(outputGroup.getFont());
- nameLabel.setText(ManagedBuilderUIMessages.getResourceString(OUTPUT_NAME));
- nameLabel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-
- final Label placeHolder = new Label(outputGroup, SWT.CENTER);
- placeHolder.setText(new String());
- placeHolder.setLayoutData(new GridData());
-
- final Label extLabel = new Label(outputGroup, SWT.LEFT);
- extLabel.setFont(outputGroup.getFont());
- extLabel.setText(ManagedBuilderUIMessages.getResourceString(OUTPUT_EXT));
- extLabel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-
- // Now we need two text widgets separated by a label
- buildArtifactName = new Text(outputGroup, SWT.SINGLE | SWT.BORDER);
- buildArtifactName.setFont(outputGroup.getFont());
- buildArtifactName.setText(artifactName);
- GridData data = new GridData(GridData.FILL_HORIZONTAL);
- data.widthHint = IDialogConstants.ENTRY_FIELD_WIDTH;
- buildArtifactName.setLayoutData(data);
- buildArtifactName.addDisposeListener(new DisposeListener() {
- public void widgetDisposed(DisposeEvent event) {
- buildArtifactName = null;
- }
- });
- buildArtifactName.getAccessible().addAccessibleListener(new AccessibleAdapter(){
- public void getName(AccessibleEvent e) {
- e.result = ManagedBuilderUIMessages.getResourceString(OUTPUT_NAME);
- }
- });
-
- final Label dotLabel = new Label(outputGroup, SWT.CENTER);
- dotLabel.setFont(outputGroup.getFont());
- dotLabel.setText(new String(".")); //$NON-NLS-1$
- dotLabel.setLayoutData(new GridData());
-
- buildArtifactExt = new Text(outputGroup, SWT.SINGLE | SWT.BORDER);
- buildArtifactExt.setFont(outputGroup.getFont());
- buildArtifactExt.setText(artifactExt);
- data = new GridData(GridData.FILL_HORIZONTAL);
- data.widthHint = (IDialogConstants.ENTRY_FIELD_WIDTH / 2);
- buildArtifactExt.setLayoutData(data);
- buildArtifactExt.addDisposeListener(new DisposeListener() {
- public void widgetDisposed(DisposeEvent e) {
- buildArtifactExt = null;
- }
- });
- buildArtifactExt.getAccessible().addAccessibleListener(new AccessibleAdapter() {
- public void getName(AccessibleEvent e) {
- e.result = ManagedBuilderUIMessages.getResourceString(OUTPUT_EXT);
- }
- });
- }
/* (non-Javadoc)
* @see org.eclipse.jface.dialogs.Dialog#createButtonsForButtonBar(org.eclipse.swt.widgets.Composite)
@@ -325,12 +218,6 @@ public class ManageConfigDialog extends Dialog {
comp.setLayout(new GridLayout(1, true));
comp.setLayoutData(new GridData(GridData.FILL_BOTH));
- // Create a group for the build output
- createBuildArtifactGroup(comp);
-
- // Create the make command group area
- createMakeCommandGroup(comp);
-
// Make the configuration management area
createConfigListGroup(comp);
@@ -341,64 +228,6 @@ public class ManageConfigDialog extends Dialog {
return comp;
}
- /* (non-Javadoc)
- * Creates the group control for the make command
- * @param parent
- */
- private void createMakeCommandGroup(Composite parent) {
- final Group makeCommandGroup = new Group(parent, SWT.NONE);
- makeCommandGroup.setFont(parent.getFont());
- makeCommandGroup.setText(ManagedBuilderUIMessages.getResourceString(GROUP));
- makeCommandGroup.setLayout(new GridLayout(1, true));
- makeCommandGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-
- makeCommandDefault = new Button(makeCommandGroup, SWT.CHECK | SWT.LEFT);
- makeCommandDefault.setFont(makeCommandGroup.getFont());
- makeCommandDefault.setText(ManagedBuilderUIMessages.getResourceString(DEF_BTN));
- setButtonLayoutData(makeCommandDefault);
- makeCommandDefault.setBackground(makeCommandGroup.getBackground());
- makeCommandDefault.setForeground(makeCommandGroup.getForeground());
- makeCommandDefault.setSelection(!managedTarget.hasOverridenMakeCommand());
- makeCommandDefault.addSelectionListener(new SelectionAdapter () {
- public void widgetSelected(SelectionEvent e) {
- handleUseDefaultPressed();
- }
- });
- makeCommandDefault.addDisposeListener(new DisposeListener() {
- public void widgetDisposed(DisposeEvent event) {
- makeCommandDefault = null;
- }
- });
-
- makeCommandEntry = new Text(makeCommandGroup, SWT.SINGLE | SWT.BORDER);
- makeCommandEntry.setFont(makeCommandGroup.getFont());
- makeCommandEntry.setEditable(!makeCommandDefault.getSelection());
- makeCommandEntry.setText(makeCommand);
- makeCommandEntry.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
- makeCommandEntry.addDisposeListener(new DisposeListener() {
- public void widgetDisposed(DisposeEvent event) {
- makeCommandEntry = null;
- }
- });
- }
-
- /**
- * Answers the extension for the build artifact.
- * @return
- */
- public String getBuildArtifaceExtension() {
- return artifactExt;
- }
-
- /**
- * Answers the value in the build artifact entry widget.
- *
- * @return
- */
- public String getBuildArtifactName() {
- return artifactName;
- }
-
private String [] getConfigurationNames() {
return (String[]) getExistingConfigs().keySet().toArray(new String[getExistingConfigs().size()]);
}
@@ -432,15 +261,6 @@ public class ManageConfigDialog extends Dialog {
}
/**
- * Answers the value in the make command entry widget.
- *
- * @return
- */
- public String getMakeCommand() {
- return makeCommand;
- }
-
- /**
* Answers a map of configuration names to <code>IConfiguration</code>.
* The name is selected by the user and should be unique for the target
* it will be added to. The configuration is the what the new
@@ -456,28 +276,18 @@ public class ManageConfigDialog extends Dialog {
}
/*
- * @return the <code>IProject</code> associated with the target
+ * @return the <code>IProject</code> associated with the managed project
*/
private IProject getProject() {
- return managedTarget.getOwner().getProject();
+ return (IProject)managedProject.getOwner();
}
/*
* Event handler for the add button
*/
protected void handleNewPressed() {
- // Find the defined target
- ITarget parentTarget = null;
- ITarget [] targets = ManagedBuildManager.getDefinedTargets(getProject());
- for (int i = 0; i < targets.length; i++) {
- ITarget target = targets[i];
- if (target.getId().equals(managedTarget.getParent().getId())) {
- parentTarget = target;
- break;
- }
- }
NewConfigurationDialog dialog = new NewConfigurationDialog(getShell(),
- managedTarget,
+ managedProject,
ManagedBuilderUIMessages.getResourceString(CONF_DLG));
if (dialog.open() == NewConfigurationDialog.OK) {
// Get the new name and configuration to base the new config on
@@ -535,7 +345,7 @@ public class ManageConfigDialog extends Dialog {
// If this was a new config (it won't be in the existing list) then add it back there
if (!getExistingConfigs().containsKey(selectedConfigName)) {
- IConfiguration restoredConfig = managedTarget.getConfiguration(selectedConfigId);
+ IConfiguration restoredConfig = managedProject.getConfiguration(selectedConfigId);
getNewConfigs().put(selectedConfigName, restoredConfig);
}
@@ -551,46 +361,10 @@ public class ManageConfigDialog extends Dialog {
}
}
- /* (non-Javadoc)
- * Event handler for the use default check box in the make command group
- */
- protected void handleUseDefaultPressed() {
- // If the state of the button is unchecked, then we want to enable the edit widget
- boolean checked = makeCommandDefault.getSelection();
- if (checked == true) {
- managedTarget.resetMakeCommand();
- setMakeCommand();
- makeCommandEntry.setText(makeCommand);
- makeCommandEntry.setEditable(false);
- } else {
- makeCommandEntry.setEditable(true);
- }
- }
-
- /*
- *
- */
- private void setMakeCommand() {
- // Figure out the make command
- makeCommand = managedTarget.getMakeCommand();
- String makeArgs = managedTarget.getMakeArguments();
- if (makeArgs.length() > 0) {
- makeCommand += " " + makeArgs; //$NON-NLS-1$
- }
- }
-
private void updateButtons() {
// Disable the remove button if there is only 1 configuration
removeBtn.setEnabled(currentConfigList.getItemCount() > 1);
// Enable the restore button if there is anything in the deleted list
restoreBtn.setEnabled(deletedConfigList.getItemCount() > 0);
}
-
- /**
- * Answers <code>true</code> if the user has left the use default check box selected.
- * @return
- */
- public boolean useDefaultMakeCommand () {
- return useDefaultMake;
- }
}
diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/ManagedBuilderPropertyPage.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/ManagedBuilderPropertyPage.java
deleted file mode 100644
index a8d27fab4a..0000000000
--- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/ManagedBuilderPropertyPage.java
+++ /dev/null
@@ -1,174 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- * Intel Corp - use in Managed Make system
- *******************************************************************************/
-package org.eclipse.cdt.managedbuilder.ui.properties;
-
-import java.lang.reflect.InvocationTargetException;
-
-import org.eclipse.cdt.managedbuilder.internal.ui.ManagedBuilderUIMessages;
-import org.eclipse.cdt.managedbuilder.internal.ui.ManagedProjectOptionBlock;
-import org.eclipse.cdt.managedbuilder.internal.ui.ManagedBuilderUIPlugin;
-import org.eclipse.cdt.managedbuilder.internal.ui.ErrorParserBlock;
-import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
-import org.eclipse.cdt.managedbuilder.core.IManagedBuildInfo;
-import org.eclipse.cdt.managedbuilder.core.ITarget;
-import org.eclipse.cdt.ui.dialogs.ICOptionContainer;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.Preferences;
-import org.eclipse.jface.dialogs.ProgressMonitorDialog;
-import org.eclipse.jface.operation.IRunnableWithProgress;
-import org.eclipse.jface.preference.IPreferencePageContainer;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.FillLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.ui.actions.WorkspaceModifyDelegatingOperation;
-import org.eclipse.ui.dialogs.PropertyPage;
-
-public class ManagedBuilderPropertyPage extends PropertyPage implements ICOptionContainer {
-
- protected ManagedProjectOptionBlock fOptionBlock;
- protected ITarget displayedTarget;
-
- private static final String MSG_CLOSEDPROJECT = "MngMakeProjectPropertyPage.closedproject"; //$NON-NLS-1$
-
- public ManagedBuilderPropertyPage() {
- super();
- }
-
- public void setContainer(IPreferencePageContainer preferencePageContainer) {
- super.setContainer(preferencePageContainer);
- if (fOptionBlock == null) {
- fOptionBlock = new ManagedProjectOptionBlock(this);
- }
- }
-
- protected Control createContents(Composite parent) {
- Composite composite = new Composite(parent, SWT.NONE);
- composite.setLayout(new FillLayout());
-
- IProject project = getProject();
- if (!project.isOpen()) {
- contentForClosedProject(composite);
- } else {
- contentForCProject(composite);
- }
-
- return composite;
- }
-
- private void contentForCProject(Composite parent) {
- fOptionBlock.createContents(parent);
- // WorkbenchHelp.setHelp(parent, ICMakeHelpContextIds.PROJECT_PROPERTY_PAGE);
- }
-
- private void contentForClosedProject(Composite parent) {
- Label label = new Label(parent, SWT.LEFT);
- label.setText(ManagedBuilderUIMessages.getResourceString(MSG_CLOSEDPROJECT));
- label.setFont(parent.getFont());
-
- noDefaultAndApplyButton();
- }
-
- /**
- * @see PreferencePage#performOk
- */
- public boolean performOk() {
- IRunnableWithProgress runnable = new IRunnableWithProgress() {
- public void run(IProgressMonitor monitor) {
- fOptionBlock.performApply(monitor);
- }
- };
-
- // If the user did not come to this page when the current selected target
- // was the selected target, then there is nothing to do. The page was either
- // never visited, or was visited for another target.
- ITarget target = getSelectedTarget();
- if (target != displayedTarget) return true;
-
- IRunnableWithProgress op = new WorkspaceModifyDelegatingOperation(runnable);
- try {
- new ProgressMonitorDialog(getShell()).run(false, true, op);
- } catch (InvocationTargetException e) {
- Throwable e1 = e.getTargetException();
- ManagedBuilderUIPlugin.errorDialog(getShell(), ManagedBuilderUIMessages.getResourceString("ManagedProjectPropertyPage.internalError"),e1.toString(), e1); //$NON-NLS-1$
- return false;
- } catch (InterruptedException e) {
- // cancelled
- return false;
- }
-
- // Write out the build model info
- IProject project = getProject();
- ManagedBuildManager.saveBuildInfo(project, false);
- return true;
- }
-
- public IProject getProject() {
- Object element = getElement();
- if (element instanceof IProject) {
- return (IProject) element;
- }
- return null;
- }
-
- /**
- * @see DialogPage#setVisible(boolean)
- */
- public void setVisible(boolean visible) {
- super.setVisible(visible);
- fOptionBlock.setVisible(visible);
- if (visible) {
- ErrorParserBlock errorParsers = fOptionBlock.getErrorParserBlock();
- errorParsers.updateValues();
- displayedTarget = getSelectedTarget();
- }
- }
-
- protected ITarget getSelectedTarget() {
- // If the selected target is not yet set, set it to the default target
- // The selected target is needed for saving error parser information
- IProject project = getProject();
- ITarget target = ManagedBuildManager.getSelectedTarget(project);
- if (target == null) {
- IManagedBuildInfo info = ManagedBuildManager.getBuildInfo(project);
- target = info.getDefaultTarget();
- ManagedBuildManager.setSelectedTarget(project, target);
- }
- return target;
- }
-
- public void updateContainer() {
- fOptionBlock.update();
- setValid(fOptionBlock.isValid());
- setErrorMessage(fOptionBlock.getErrorMessage());
- }
-
- protected void performDefaults() {
- fOptionBlock.performDefaults();
- super.performDefaults();
- }
-
- public boolean isValid() {
- updateContainer();
- return super.isValid();
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.cdt.ui.dialogs.ICOptionContainer#getPreferences()
- */
- public Preferences getPreferences() {
- return null;
- }
-
-}
diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/NewConfigurationDialog.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/NewConfigurationDialog.java
index 082e15c71e..0d15f97775 100644
--- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/NewConfigurationDialog.java
+++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/NewConfigurationDialog.java
@@ -1,7 +1,5 @@
-package org.eclipse.cdt.managedbuilder.ui.properties;
-
/**********************************************************************
- * Copyright (c) 2003,2004 IBM Rational Software Corporation and others.
+ * Copyright (c) 2003,2004 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
@@ -10,9 +8,11 @@ package org.eclipse.cdt.managedbuilder.ui.properties;
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
+package org.eclipse.cdt.managedbuilder.ui.properties;
+import org.eclipse.cdt.managedbuilder.core.IProjectType;
+import org.eclipse.cdt.managedbuilder.core.IManagedProject;
import org.eclipse.cdt.managedbuilder.core.IConfiguration;
-import org.eclipse.cdt.managedbuilder.core.ITarget;
import org.eclipse.cdt.managedbuilder.internal.ui.ManagedBuilderUIMessages;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
@@ -59,7 +59,7 @@ public class NewConfigurationDialog extends Dialog {
private IConfiguration[] defaultConfigs;
private IConfiguration[] definedConfigs;
private IConfiguration parentConfig;
- private ITarget target;
+ private IManagedProject managedProject;
private String newName;
private String title = ""; //$NON-NLS-1$
@@ -67,21 +67,21 @@ public class NewConfigurationDialog extends Dialog {
/**
* @param parentShell
*/
- protected NewConfigurationDialog(Shell parentShell, ITarget managedTarget, String title) {
+ protected NewConfigurationDialog(Shell parentShell, IManagedProject managedProject, String title) {
super(parentShell);
this.title = title;
setShellStyle(getShellStyle()|SWT.RESIZE);
newName = new String();
parentConfig = null;
- this.target = managedTarget;
+ this.managedProject = managedProject;
// The default behaviour is to clone the settings
clone = true;
// Populate the list of default and defined configurations
- definedConfigs = target.getConfigurations();
- ITarget grandparent = target.getParent();
- defaultConfigs = grandparent.getConfigurations();
+ definedConfigs = managedProject.getConfigurations();
+ IProjectType projectType = managedProject.getProjectType();
+ defaultConfigs = projectType.getConfigurations();
}
/* (non-Javadoc)
@@ -242,7 +242,7 @@ public class NewConfigurationDialog extends Dialog {
}
/*
- * Returns the array of configuration names defined for all targets
+ * Returns the array of configuration names defined for all projects
* of this type in the plugin manifest. This list will be used to
* populate the the configurations to copy default settings from.
*/
@@ -256,7 +256,7 @@ public class NewConfigurationDialog extends Dialog {
}
/*
- * Returns the array of configuration names defined for this target.
+ * Returns the array of configuration names defined for this managed project.
* This list will be used to populate the list of configurations to
* clone.
*/
@@ -285,11 +285,11 @@ public class NewConfigurationDialog extends Dialog {
* @return
*/
protected boolean isDuplicateName(String newName) {
- // Return true if there is already a config of that name defined on the target
- IConfiguration [] configs = target.getConfigurations();
+ // Return true if there is already a config of that name defined
+ IConfiguration [] configs = managedProject.getConfigurations();
for (int index = 0; index < configs.length; index++) {
IConfiguration configuration = configs[index];
- if (configuration.getName() == newName) {
+ if (configuration.getName().equals(newName)) {
return true;
}
}
diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/ResourceBuildPropertyPage.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/ResourceBuildPropertyPage.java
new file mode 100644
index 0000000000..1d52e20fd4
--- /dev/null
+++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/ResourceBuildPropertyPage.java
@@ -0,0 +1,487 @@
+/**********************************************************************
+ * Copyright (c) 2004 Intel Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors:
+ * Intel Corporation - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.cdt.managedbuilder.ui.properties;
+
+import java.lang.reflect.InvocationTargetException;
+import org.eclipse.cdt.managedbuilder.core.IConfiguration;
+import org.eclipse.cdt.managedbuilder.core.IManagedBuildInfo;
+import org.eclipse.cdt.managedbuilder.core.IResourceConfiguration;
+import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
+import org.eclipse.cdt.managedbuilder.internal.ui.ManagedBuildOptionBlock;
+import org.eclipse.cdt.managedbuilder.internal.ui.ManagedBuilderHelpContextIds;
+import org.eclipse.cdt.managedbuilder.internal.ui.ManagedBuilderUIMessages;
+import org.eclipse.cdt.managedbuilder.internal.ui.ManagedBuilderUIPlugin;
+import org.eclipse.cdt.ui.dialogs.ICOptionContainer;
+import org.eclipse.cdt.utils.ui.controls.ControlFactory;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Preferences;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.preference.IPreferencePageContainer;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.layout.FormLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IWorkbenchPropertyPage;
+import org.eclipse.ui.actions.WorkspaceModifyDelegatingOperation;
+import org.eclipse.ui.dialogs.PropertyPage;
+import org.eclipse.ui.help.WorkbenchHelp;
+
+
+public class ResourceBuildPropertyPage extends PropertyPage implements
+ IWorkbenchPropertyPage, IPreferencePageContainer, ICOptionContainer {
+ /*
+ * String constants
+ */
+ private static final String PREFIX = "ResourceBuildPropertyPage"; //$NON-NLS-1$
+ private static final String LABEL = PREFIX + ".label"; //$NON-NLS-1$
+ private static final String NAME_LABEL = LABEL + ".NameText"; //$NON-NLS-1$
+ private static final String CONFIG_LABEL = LABEL + ".Configuration"; //$NON-NLS-1$
+ private static final String ALL_CONFS = PREFIX + ".selection.configuration.all"; //$NON-NLS-1$
+ private static final String ACTIVE_RESOURCE_LABEL = LABEL + ".ActiveResource"; //$NON-NLS-1$
+ private static final String RESOURCE_SETTINGS_LABEL = LABEL + ".ResourceSettings"; //$NON-NLS-1$
+ private static final String TREE_LABEL = LABEL + ".ToolTree"; //$NON-NLS-1$
+ private static final String OPTIONS_LABEL = LABEL + ".ToolOptions"; //$NON-NLS-1$
+ private static final String EXCLUDE_CHECKBOX = LABEL + ".ExcludeCheckBox"; //$NON-NLS-1$
+ private static final String TIP = PREFIX + ".tip"; //$NON-NLS-1$
+ private static final String RESOURCE_PLAT_TIP = TIP + ".ResourcePlatform"; //$NON-NLS-1$
+ private static final String CONF_TIP = TIP + ".config"; //$NON-NLS-1$
+ private static final String EXCLUDE_TIP = TIP + ".excludecheck"; //$NON-NLS-1$
+ private static final String MANAGE_TITLE = PREFIX + ".manage.title"; //$NON-NLS-1$
+ private static final int[] DEFAULT_SASH_WEIGHTS = new int[] { 20, 30 };
+ private static final String ID_SEPARATOR = "."; //$NON-NLS-1$
+
+ /*
+ * Dialog widgets
+ */
+
+ private Combo configSelector;
+
+// private Point lastShellSize;
+ private Button excludedCheckBox;
+ private boolean isExcluded = false;
+
+ /*
+ * Bookeeping variables
+ */
+
+
+ private IConfiguration[] configurations;
+ private IConfiguration selectedConfiguration;
+ private IResourceConfiguration currentResourceConfig;
+ private Point lastShellSize;
+ protected ManagedBuildOptionBlock fOptionBlock;
+ protected boolean displayedConfig = false;
+ /**
+ * Default constructor
+ */
+ public ResourceBuildPropertyPage() {
+ // super();
+ }
+
+ public void setContainer(IPreferencePageContainer preferencePageContainer) {
+ super.setContainer(preferencePageContainer);
+ if (fOptionBlock == null) {
+ fOptionBlock = new ManagedBuildOptionBlock(this);
+ }
+ }
+
+ protected Control createContents(Composite parent) {
+ GridData gd;
+
+// Create the container we return to the property page editor
+ Composite composite = new Composite(parent, SWT.NULL);
+ composite.setFont(parent.getFont());
+ GridLayout compositeLayout = new GridLayout();
+ compositeLayout.numColumns = 1;
+ compositeLayout.marginHeight = 0;
+ compositeLayout.marginWidth = 0;
+ composite.setLayout( compositeLayout );
+
+// Initialize the key data
+ IManagedBuildInfo info = ManagedBuildManager.getBuildInfo(getProject());
+ if (info.getVersion() == null) {
+ // Display a message page instead of the properties control
+ final Label invalidInfo = new Label(composite, SWT.LEFT);
+ invalidInfo.setFont(composite.getFont());
+ invalidInfo.setText(ManagedBuilderUIMessages.getResourceString("ResourceBuildPropertyPage.error.version_low")); //$NON-NLS-1$
+ invalidInfo.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING,GridData.VERTICAL_ALIGN_CENTER, true, true));
+ return composite;
+ }
+
+ // Add a config selection area
+ Group configGroup = ControlFactory.createGroup(composite, ManagedBuilderUIMessages.getResourceString(ACTIVE_RESOURCE_LABEL), 1);
+ gd = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
+ gd.grabExcessHorizontalSpace = true;
+ configGroup.setLayoutData(gd);
+ // Use the form layout inside the group composite
+ FormLayout form = new FormLayout();
+ form.marginHeight = 5;
+ form.marginWidth = 5;
+ configGroup.setLayout(form);
+
+ excludedCheckBox = ControlFactory.createCheckBox(configGroup, ManagedBuilderUIMessages.getResourceString(EXCLUDE_CHECKBOX));
+ excludedCheckBox.addListener(SWT.Selection, new Listener() {
+ public void handleEvent(Event e) {
+ handleIsExcluded();
+ }
+ });
+ excludedCheckBox.setToolTipText(ManagedBuilderUIMessages.getResourceString(EXCLUDE_TIP));
+
+ FormData fd = new FormData();
+ fd = new FormData();
+ fd.left = new FormAttachment(excludedCheckBox, 0, SWT.CENTER);
+ excludedCheckBox.setLayoutData(fd);
+
+ Label configLabel = ControlFactory.createLabel(configGroup, ManagedBuilderUIMessages.getResourceString(CONFIG_LABEL));
+ configSelector = new Combo(configGroup, SWT.READ_ONLY | SWT.DROP_DOWN);
+ configSelector.addListener(SWT.Selection, new Listener() {
+ public void handleEvent(Event e) {
+ handleConfigSelection();
+ }
+ });
+ configSelector.setToolTipText(ManagedBuilderUIMessages.getResourceString(CONF_TIP));
+
+ // Now do the form layout for the widgets
+
+ fd = new FormData();
+ fd.top = new FormAttachment(excludedCheckBox, 15, SWT.DEFAULT);
+
+ configLabel.setLayoutData(fd);
+
+ fd = new FormData();
+ fd.top = new FormAttachment(excludedCheckBox, 15, SWT.DEFAULT);
+ fd.left = new FormAttachment(configLabel, 5, SWT.DEFAULT);
+ fd.right = new FormAttachment(80, -20);
+ configSelector.setLayoutData(fd);
+
+// Create the Tools Settings, Build Settings, ... Tabbed pane
+ Group tabGroup = ControlFactory.createGroup(composite, ManagedBuilderUIMessages.getResourceString(RESOURCE_SETTINGS_LABEL), 1);
+ gd = new GridData(GridData.FILL_BOTH);
+ tabGroup.setLayoutData(gd);
+ fOptionBlock.createContents(tabGroup, getElement());
+
+// Update the contents of the configuration widget
+ populateConfigurations();
+ WorkbenchHelp.setHelp(composite,ManagedBuilderHelpContextIds.MAN_PROJ_BUILD_PROP);
+ return composite;
+ }
+
+ private void handleIsExcluded() {
+
+ // Check whether the check box is selected or not.
+ boolean isSelected = excludedCheckBox.getSelection();
+ setExcluded(isSelected);
+ }
+
+ /*
+ * (non-Javadoc) @return an array of names for the configurations defined
+ * for the chosen
+ */
+ private String[] getConfigurationNames() {
+ String[] names = new String[configurations.length];
+ for (int index = 0; index < configurations.length; ++index) {
+ names[index] = configurations[index].getName();
+ }
+ return names;
+ }
+
+ protected Point getLastShellSize() {
+ if (lastShellSize == null) {
+ Shell shell = getShell();
+ if (shell != null)
+ lastShellSize = shell.getSize();
+ }
+ return lastShellSize;
+ }
+
+ public IProject getProject() {
+ Object element = getElement();
+ if (element != null && element instanceof IFile) {
+ IFile file = (IFile) element;
+ return (IProject) file.getProject();
+ }
+ return null;
+ }
+
+ /*
+ * (non-Javadoc) @return
+ */
+ public IConfiguration getSelectedConfiguration() {
+ return selectedConfiguration;
+ }
+
+ /*
+ * Event Handlers
+ */
+ private void handleConfigSelection() {
+ // If there is nothing in config selection widget just bail
+ if (configSelector.getItemCount() == 0)
+ return;
+
+ // Check if the user has selected the "all" configuration
+ int selectionIndex = configSelector.getSelectionIndex();
+ if (selectionIndex == -1)
+ return;
+ String configName = configSelector.getItem(selectionIndex);
+ if (configName.equals(ManagedBuilderUIMessages
+ .getResourceString(ALL_CONFS))) {
+ // This is the all config
+ return;
+ } else {
+ IConfiguration newConfig = configurations[selectionIndex];
+ if (newConfig != selectedConfiguration) {
+ // If the user has changed values, and is now switching configurations, prompt for saving
+ if (selectedConfiguration != null) {
+ if (fOptionBlock.isDirty()) {
+ Shell shell = ManagedBuilderUIPlugin.getDefault().getShell();
+ boolean shouldApply = MessageDialog.openQuestion(shell,
+ ManagedBuilderUIMessages.getResourceString("BuildPropertyPage.changes.save.title"), //$NON-NLS-1$
+ ManagedBuilderUIMessages.getFormattedString("BuildPropertyPage.changes.save.question", //$NON-NLS-1$
+ new String[] {selectedConfiguration.getName(), newConfig.getName()}));
+ if (shouldApply) {
+ if (performOk()) {
+ fOptionBlock.setDirty(false);
+ } else {
+ MessageDialog.openWarning(shell,
+ ManagedBuilderUIMessages.getResourceString("BuildPropertyPage.changes.save.title"), //$NON-NLS-1$
+ ManagedBuilderUIMessages.getResourceString("BuildPropertyPage.changes.save.error")); //$NON-NLS-1$
+ }
+ }
+ }
+ }
+ // Set the new selected configuration
+ selectedConfiguration = newConfig;
+ ManagedBuildManager.setSelectedConfiguration(getProject(), selectedConfiguration);
+ // Set the current Resource Configuration
+ setCurrentResourceConfig(findCurrentResourceConfig());
+
+ isExcluded = getCurrentResourceConfig().isExcluded();
+ fOptionBlock.updateValues();
+ excludedCheckBox.setSelection(isExcluded);
+ }
+ }
+ return;
+ }
+
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.preference.PreferencePage#performDefaults()
+ */
+
+
+ protected void performDefaults() {
+ fOptionBlock.performDefaults();
+ excludedCheckBox.setSelection(getCurrentResourceConfig().isExcluded());
+ super.performDefaults();
+ }
+
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.preference.IPreferencePage#performOk()
+ */
+ public boolean performOk() {
+
+ // If the user did not visit this page, then there is nothing to do.
+ if (!displayedConfig) return true;
+ IRunnableWithProgress runnable = new IRunnableWithProgress() {
+ public void run(IProgressMonitor monitor) {
+ fOptionBlock.performApply(monitor);
+ }
+ };
+ IRunnableWithProgress op = new WorkspaceModifyDelegatingOperation(runnable);
+ try {
+ new ProgressMonitorDialog(getShell()).run(false, true, op);
+ } catch (InvocationTargetException e) {
+ Throwable e1 = e.getTargetException();
+ ManagedBuilderUIPlugin.errorDialog(getShell(), ManagedBuilderUIMessages.getResourceString("ManagedProjectPropertyPage.internalError"),e1.toString(), e1); //$NON-NLS-1$
+ return false;
+ } catch (InterruptedException e) {
+ // cancelled
+ return false;
+ }
+
+ // Write out the build model info
+ ManagedBuildManager.setDefaultConfiguration(getProject(), getSelectedConfiguration());
+ if ( getCurrentResourceConfig().isExcluded() != isExcluded() ) {
+ getCurrentResourceConfig().setExclude(isExcluded());
+ selectedConfiguration.setRebuildState(true);
+ }
+
+ ManagedBuildManager.saveBuildInfo(getProject(), false);
+ return true;
+ }
+
+ private void populateConfigurations() {
+
+ ManagedBuildManager.setSelectedConfiguration(getProject(), selectedConfiguration);
+ // If the config select widget is not there yet, just stop
+ if (configSelector == null)
+ return;
+
+ // Find the configurations defined for the platform
+ IManagedBuildInfo info = ManagedBuildManager.getBuildInfo(getProject());
+ configurations = info.getManagedProject().getConfigurations();
+ if (configurations.length == 0)
+ return;
+
+ // Clear and replace the contents of the selector widget
+ configSelector.removeAll();
+ configSelector.setItems(getConfigurationNames());
+
+ // Make sure the active configuration is selected
+ IConfiguration defaultConfig = info.getDefaultConfiguration();
+ int index = configSelector.indexOf(defaultConfig.getName());
+ configSelector.select(index == -1 ? 0 : index);
+ handleConfigSelection();
+
+ }
+
+
+ /**
+ * @return Returns the currentResourceConfig.
+ */
+ public IResourceConfiguration getCurrentResourceConfig() {
+ return currentResourceConfig;
+ }
+
+ /**
+ * @param currentResourceConfig
+ * The currentResourceConfig to set.
+ */
+ public void setCurrentResourceConfig(
+ IResourceConfiguration currentResourceConfig) {
+ if (currentResourceConfig != null)
+ this.currentResourceConfig = currentResourceConfig;
+ else {
+ IFile file = (IFile) getElement();
+
+ // create a new resource configuration for this resource.
+ this.currentResourceConfig = selectedConfiguration.createResourceConfiguration(file);
+ }
+ }
+
+ // Check whether a resource configuration already exists for the current
+ // resource in selectedConfiguration.
+ // if so, return the resource configuration, otherwise return null.
+
+ public IResourceConfiguration findCurrentResourceConfig() {
+
+ IResourceConfiguration resConfigElement = null;
+
+ // Check if the selected configuration has any resourceConfigurations.
+ if (selectedConfiguration.getResourceConfigurations().length == 0)
+ return null;
+
+ IResourceConfiguration[] resourceConfigurations = selectedConfiguration
+ .getResourceConfigurations();
+ IFile file = (IFile) getElement();
+
+ // Check whether a resource configuration is already exists for the
+ // selected file.
+ for (int i = 0; i < resourceConfigurations.length; i++) {
+ resConfigElement = resourceConfigurations[i];
+ if (file.getFullPath().toString().equals(
+ resConfigElement.getResourcePath())) {
+ return resConfigElement;
+ }
+ }
+
+ return null;
+ }
+ /**
+ * @see org.eclipse.jface.preference.IPreferencePageContainer#updateButtons()
+ */
+ public void updateButtons() {
+ }
+ /**
+ * @see org.eclipse.jface.preference.IPreferencePageContainer#updateMessage()
+ */
+ public void updateMessage() {
+ }
+ /**
+ * @see org.eclipse.jface.preference.IPreferencePageContainer#updateTitle()
+ */
+ public void updateTitle() {
+ }
+
+ public void updateContainer() {
+ fOptionBlock.update();
+ setValid(fOptionBlock.isValid());
+ setErrorMessage(fOptionBlock.getErrorMessage());
+ }
+
+ public boolean isValid() {
+ updateContainer();
+ return super.isValid();
+ }
+
+ public void setVisible(boolean visible) {
+ super.setVisible(visible);
+ fOptionBlock.setVisible(visible);
+ if (visible) {
+ fOptionBlock.updateValues();
+ displayedConfig = true;
+ }
+ }
+
+ public IPreferenceStore getPreferenceStore()
+ {
+ return fOptionBlock.getPreferenceStore();
+ }
+
+ /* (non-Javadoc)
+ * Return the IPreferenceStore of the Tool Settings block
+ */
+ public IPreferenceStore getToolSettingsPreferenceStore()
+ {
+ return fOptionBlock.getToolSettingsPreferenceStore();
+ }
+ public Preferences getPreferences()
+ {
+ return null;
+ }
+ public void enableConfigSelection (boolean enable) {
+ configSelector.setEnabled(enable);
+ }
+ /**
+ * @return Returns the isExcluded.
+ */
+ public boolean isExcluded() {
+ return isExcluded;
+ }
+ /**
+ * @param isExcluded The isExcluded to set.
+ */
+ public void setExcluded(boolean isExcluded) {
+ this.isExcluded = isExcluded;
+ }
+}
diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/ToolListContentProvider.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/ToolListContentProvider.java
index 88acea5bb0..f67a93c39e 100644
--- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/ToolListContentProvider.java
+++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/ToolListContentProvider.java
@@ -1,7 +1,5 @@
-package org.eclipse.cdt.managedbuilder.ui.properties;
-
/**********************************************************************
- * Copyright (c) 2002,2003 Rational Software Corporation and others.
+ * Copyright (c) 2002,2003 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
@@ -11,16 +9,22 @@ package org.eclipse.cdt.managedbuilder.ui.properties;
* Timesys - Initial API and implementation
* IBM Rational Software
* *********************************************************************/
+package org.eclipse.cdt.managedbuilder.ui.properties;
import org.eclipse.cdt.managedbuilder.core.IConfiguration;
+import org.eclipse.cdt.managedbuilder.core.IResourceConfiguration;
import org.eclipse.cdt.managedbuilder.core.IOptionCategory;
import org.eclipse.cdt.managedbuilder.core.ITool;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.Viewer;
public class ToolListContentProvider implements ITreeContentProvider{
+ public static final int FILE = 0x1;
+ public static final int PROJECT = 0x4;
private static Object[] EMPTY_ARRAY = new Object[0];
- private IConfiguration root;
+ private IConfiguration configRoot;
+ private IResourceConfiguration resConfigRoot;
+ private int elementType;
/**
* @see org.eclipse.jface.viewers.IContentProvider#dispose()
@@ -28,6 +32,9 @@ public class ToolListContentProvider implements ITreeContentProvider{
public void dispose() {
}
+ public ToolListContentProvider(int elementType) {
+ this.elementType = elementType;
+ }
/**
* @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object)
*/
@@ -36,7 +43,11 @@ public class ToolListContentProvider implements ITreeContentProvider{
if (parentElement instanceof IConfiguration) {
IConfiguration config = (IConfiguration)parentElement;
// the categories are all accessed through the tools
- return config.getTools();
+ return config.getFilteredTools();
+ } else if( parentElement instanceof IResourceConfiguration) {
+ // If parent is a resource configuration, return a list of its tools
+ IResourceConfiguration resConfig = (IResourceConfiguration)parentElement;
+ return resConfig.getTools();
} else if (parentElement instanceof ITool) {
// If this is a tool, return the categories it contains
ITool tool = (ITool)parentElement;
@@ -67,7 +78,10 @@ public class ToolListContentProvider implements ITreeContentProvider{
IOptionCategory parent = cat.getOwner();
// Then we need to get the configuration we belong to
if (parent == null) {
- return root;
+ if(elementType == FILE)
+ return resConfigRoot;
+ else
+ return configRoot;
}
return parent;
}
@@ -85,7 +99,14 @@ public class ToolListContentProvider implements ITreeContentProvider{
* @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
*/
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
- root = (IConfiguration) newInput;
+ if(elementType == FILE) {
+ resConfigRoot = (IResourceConfiguration)newInput;
+ configRoot = null;
+ }
+ else if(elementType == PROJECT) {
+ configRoot = (IConfiguration) newInput;
+ resConfigRoot = null;
+ }
}
}
diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/ToolListLabelProvider.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/ToolListLabelProvider.java
index b2f85d94b2..e9d00a093d 100644
--- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/ToolListLabelProvider.java
+++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/ToolListLabelProvider.java
@@ -1,7 +1,5 @@
-package org.eclipse.cdt.managedbuilder.ui.properties;
-
/**********************************************************************
- * Copyright (c) 2002,2003 Rational Software Corporation and others.
+ * Copyright (c) 2002,2004 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
@@ -10,6 +8,7 @@ package org.eclipse.cdt.managedbuilder.ui.properties;
* Contributors:
* IBM Rational Software - Initial API and implementation
* **********************************************************************/
+package org.eclipse.cdt.managedbuilder.ui.properties;
import org.eclipse.cdt.managedbuilder.core.IOptionCategory;
import org.eclipse.cdt.managedbuilder.core.ITool;
@@ -18,7 +17,7 @@ import org.eclipse.cdt.managedbuilder.internal.ui.ManagedBuilderUIMessages;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.graphics.Image;
-class ToolListLabelProvider extends LabelProvider {
+public class ToolListLabelProvider extends LabelProvider {
private final Image IMG_TOOL = ManagedBuilderUIImages.get(ManagedBuilderUIImages.IMG_BUILD_TOOL);
private final Image IMG_CAT = ManagedBuilderUIImages.get(ManagedBuilderUIImages.IMG_BUILD_CAT);
private static final String TREE_LABEL = "BuildPropertyPage.label.ToolTree"; //$NON-NLS-1$
diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/CProjectPlatformPage.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/CProjectPlatformPage.java
index 950908890d..2f47bf7a7d 100644
--- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/CProjectPlatformPage.java
+++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/CProjectPlatformPage.java
@@ -1,7 +1,5 @@
-package org.eclipse.cdt.managedbuilder.ui.wizards;
-
/**********************************************************************
- * Copyright (c) 2002,2003 Rational Software Corporation and others.
+ * Copyright (c) 2002,2004 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
@@ -10,14 +8,16 @@ package org.eclipse.cdt.managedbuilder.ui.wizards;
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
+package org.eclipse.cdt.managedbuilder.ui.wizards;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.ListIterator;
+import org.eclipse.cdt.managedbuilder.core.IProjectType;
import org.eclipse.cdt.managedbuilder.core.IConfiguration;
-import org.eclipse.cdt.managedbuilder.core.ITarget;
+import org.eclipse.cdt.managedbuilder.core.IToolChain;
import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
import org.eclipse.cdt.managedbuilder.internal.ui.ManagedBuilderHelpContextIds;
import org.eclipse.cdt.managedbuilder.internal.ui.ManagedBuilderUIMessages;
@@ -45,7 +45,7 @@ import org.eclipse.swt.widgets.Table;
import org.eclipse.ui.help.WorkbenchHelp;
/**
- * Class that implements the target and configuration selection page in the new
+ * Class that implements the project type and configuration selection page in the new
* project wizard for managed builder projects.
*
* @since 1.2
@@ -65,11 +65,11 @@ public class CProjectPlatformPage extends WizardPage {
protected NewManagedProjectWizard parentWizard;
protected Combo platformSelection;
private ArrayList selectedConfigurations;
- protected ITarget selectedTarget;
+ protected IProjectType selectedProjectType;
protected Button showAll;
protected CheckboxTableViewer tableViewer;
- protected String[] targetNames;
- protected ArrayList targets;
+ protected String[] projectTypeNames;
+ protected ArrayList projectTypes;
/**
* Constructor.
@@ -79,7 +79,7 @@ public class CProjectPlatformPage extends WizardPage {
public CProjectPlatformPage(String pageName, NewManagedProjectWizard parentWizard) {
super(pageName);
setPageComplete(false);
- selectedTarget = null;
+ selectedProjectType = null;
selectedConfigurations = new ArrayList(0);
this.parentWizard = parentWizard;
}
@@ -141,14 +141,14 @@ public class CProjectPlatformPage extends WizardPage {
WorkbenchHelp.setHelp(composite, ManagedBuilderHelpContextIds.MAN_PROJ_PLATFORM_HELP);
// Create the widgets
- createTargetSelectGroup(composite);
+ createTypeSelectGroup(composite);
createConfigSelectionGroup(composite);
createShowAllGroup(composite);
- // Select the first target in the list
- populateTargets();
+ // Select the first project type in the list
+ populateTypes();
platformSelection.select(0);
- handleTargetSelection();
+ handleTypeSelection();
// Do the nasty
setErrorMessage(null);
@@ -168,9 +168,9 @@ public class CProjectPlatformPage extends WizardPage {
showAll.setText(ManagedBuilderUIMessages.getResourceString(SHOWALL_LABEL));
showAll.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event e) {
- populateTargets();
+ populateTypes();
platformSelection.select(0);
- handleTargetSelection();
+ handleTypeSelection();
}
});
showAll.addDisposeListener(new DisposeListener() {
@@ -180,7 +180,7 @@ public class CProjectPlatformPage extends WizardPage {
});
}
- private void createTargetSelectGroup(Composite parent) {
+ private void createTypeSelectGroup(Composite parent) {
// Create the group composite
Composite composite = new Composite(parent, SWT.NULL);
composite.setFont(parent.getFont());
@@ -197,7 +197,7 @@ public class CProjectPlatformPage extends WizardPage {
platformSelection.setToolTipText(ManagedBuilderUIMessages.getResourceString(TARGET_TIP));
platformSelection.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event e) {
- handleTargetSelection();
+ handleTypeSelection();
}
});
platformSelection.addDisposeListener(new DisposeListener() {
@@ -227,13 +227,13 @@ public class CProjectPlatformPage extends WizardPage {
}
/**
- * Returns the name of the selected platform.
+ * Returns the selected project type.
*
- * @return String containing platform name or <code>null</code> if an invalid selection
+ * @return IProjectType Selected type or <code>null</code> if an invalid selection
* has been made.
*/
- public ITarget getSelectedTarget() {
- return selectedTarget;
+ public IProjectType getSelectedProjectType() {
+ return selectedProjectType;
}
private void handleConfigurationSelectionChange() {
@@ -250,16 +250,16 @@ public class CProjectPlatformPage extends WizardPage {
* @return <code>true</code> if all controls are valid, and
* <code>false</code> if at least one is invalid
*/
- protected void handleTargetSelection() {
+ protected void handleTypeSelection() {
/*
- * The index in the combo is the offset into the target list
+ * The index in the combo is the offset into the project type list
*/
int index;
if (platformSelection != null
&& (index = platformSelection.getSelectionIndex()) != -1) {
- if (selectedTarget != (ITarget) targets.get(index)) {
- selectedTarget = (ITarget) targets.get(index);
- parentWizard.updateTargetProperties();
+ if (selectedProjectType != (IProjectType) projectTypes.get(index)) {
+ selectedProjectType = (IProjectType) projectTypes.get(index);
+ parentWizard.updateProjectTypeProperties();
}
}
populateConfigurations();
@@ -271,59 +271,66 @@ public class CProjectPlatformPage extends WizardPage {
* By default, all the configurations are selected.
*/
private void populateConfigurations() {
- // Make the root of the content provider the new target
- tableViewer.setInput(selectedTarget);
+ // Make the root of the content provider the new project type
+ tableViewer.setInput(selectedProjectType);
tableViewer.setAllChecked(true);
handleConfigurationSelectionChange();
}
/* (non-Javadoc)
- * Extracts the names from the targets that are valid for the wizard
+ * Extracts the names from the project types that are valid for the wizard
* session and populates the combo widget with them.
*/
- private void populateTargetNames() {
- targetNames = new String[targets.size()];
- ListIterator iter = targets.listIterator();
+ private void populateTypeNames() {
+ projectTypeNames = new String[projectTypes.size()];
+ ListIterator iter = projectTypes.listIterator();
int index = 0;
while (iter.hasNext()) {
- targetNames[index++] = ((ITarget) iter.next()).getName();
+ projectTypeNames[index++] = ((IProjectType) iter.next()).getName();
}
// Now setup the combo
platformSelection.removeAll();
- platformSelection.setItems(targetNames);
+ platformSelection.setItems(projectTypeNames);
}
/* (non-Javadoc)
- * Collects all the valid targets for the platform Eclipse is running on
+ * Collects all the valid project types for the platform Eclipse is running on
*/
- private void populateTargets() {
+ private void populateTypes() {
// Get a list of platforms defined by plugins
- ITarget[] allTargets = ManagedBuildManager.getDefinedTargets(null);
- targets = new ArrayList();
+ IProjectType[] allProjectTypes = ManagedBuildManager.getDefinedProjectTypes();
+ projectTypes = new ArrayList();
String os = Platform.getOS();
String arch = Platform.getOSArch();
- // Add all of the concrete targets to the target list
- for (int index = 0; index < allTargets.length; ++index) {
- ITarget target = allTargets[index];
- if (!target.isAbstract() && !target.isTestTarget()) {
+ // Add all of the concrete project types to the list
+ for (int index = 0; index < allProjectTypes.length; ++index) {
+ IProjectType type = allProjectTypes[index];
+ if (!type.isAbstract() && !type.isTestProjectType()) {
// If the check box is selected show all the targets
if (showAll != null && showAll.getSelection() == true) {
- targets.add(target);
+ projectTypes.add(type);
} else {
// Apply the OS and ARCH filters to determine if the target should be shown
- List targetOSList = Arrays.asList(target.getTargetOSList());
- if (targetOSList.contains("all") || targetOSList.contains(os)) { //$NON-NLS-1$
- List targetArchList = Arrays.asList(target.getTargetArchList());
- if (targetArchList.contains("all") || targetArchList.contains(arch)) { //$NON-NLS-1$
- targets.add(target);
+ // Determine if the project type has any configuration with a tool-chain
+ // that supports this OS & Architecture.
+ IConfiguration[] configs = type.getConfigurations();
+ for (int j = 0; j < configs.length; ++j) {
+ IToolChain tc = configs[j].getToolChain();
+ List osList = Arrays.asList(tc.getOSList());
+ if (osList.contains("all") || osList.contains(os)) { //$NON-NLS-1$
+ List archList = Arrays.asList(tc.getArchList());
+ if (archList.contains("all") || archList.contains(arch)) { //$NON-NLS-1$
+ projectTypes.add(type);
+ break;
+ }
}
}
}
}
}
- targets.trimToSize();
- populateTargetNames();
+ projectTypes.trimToSize();
+ populateTypeNames();
}
/**
diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/ConfigurationContentProvider.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/ConfigurationContentProvider.java
index 27db61034b..c800b9f43c 100644
--- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/ConfigurationContentProvider.java
+++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/ConfigurationContentProvider.java
@@ -1,7 +1,5 @@
-package org.eclipse.cdt.managedbuilder.ui.wizards;
-
/**********************************************************************
- * Copyright (c) 2002,2003 Rational Software Corporation and others.
+ * Copyright (c) 2002,2004 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
@@ -10,9 +8,10 @@ package org.eclipse.cdt.managedbuilder.ui.wizards;
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
+package org.eclipse.cdt.managedbuilder.ui.wizards;
import org.eclipse.cdt.managedbuilder.core.IConfiguration;
-import org.eclipse.cdt.managedbuilder.core.ITarget;
+import org.eclipse.cdt.managedbuilder.core.IProjectType;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.Viewer;
@@ -20,7 +19,7 @@ public class ConfigurationContentProvider implements IStructuredContentProvider
// The contents of the parent of the table is a list of configurations
public Object[] getElements(Object parent) {
// The content is a list of configurations
- IConfiguration[] configs = ((ITarget) parent).getConfigurations();
+ IConfiguration[] configs = ((IProjectType) parent).getConfigurations();
return (configs.length == 0) ? new Object[0] : configs;
}
diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/NewManagedProjectOptionPage.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/NewManagedProjectOptionPage.java
index c219877319..35cc4d7397 100644
--- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/NewManagedProjectOptionPage.java
+++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/NewManagedProjectOptionPage.java
@@ -1,7 +1,5 @@
-package org.eclipse.cdt.managedbuilder.ui.wizards;
-
/**********************************************************************
- * Copyright (c) 2002,2003 Rational Software Corporation and others.
+ * Copyright (c) 2002,2004 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
@@ -10,6 +8,7 @@ package org.eclipse.cdt.managedbuilder.ui.wizards;
* Contributors:
* IBM Rational Software - Initial API and implementation
* **********************************************************************/
+package org.eclipse.cdt.managedbuilder.ui.wizards;
import java.util.Iterator;
import java.util.List;
@@ -43,7 +42,7 @@ public class NewManagedProjectOptionPage extends NewCProjectWizardOptionPage {
parent = parentPage;
}
- public void updateTargetProperties() {
+ public void updateProjectTypeProperties() {
// Update the error parser list
if (errorParsers != null) {
errorParsers.updateValues();
@@ -55,8 +54,13 @@ public class NewManagedProjectOptionPage extends NewCProjectWizardOptionPage {
*/
protected void addTabs() {
addTab(new ReferenceBlock());
- errorParsers = new ErrorParserBlock();
- addTab(errorParsers);
+ // NOTE: The setting of error parsers is commented out here
+ // because they need to be set per-configuration.
+ // The other tabs on this page are per-project.
+ // Error parsers can be selected per configuration in the
+ // project properties
+ //errorParsers = new ErrorParserBlock();
+ //addTab(errorParsers);
addTab(indexBlock = new IndexerBlock());
}
@@ -112,9 +116,9 @@ public class NewManagedProjectOptionPage extends NewCProjectWizardOptionPage {
return ManagedBuilderUIPlugin.getDefault().getPluginPreferences();
}
- public void updateTargetProperties() {
+ public void updateProjectTypeProperties() {
// Update the error parser list
- optionBlock.updateTargetProperties();
+ optionBlock.updateProjectTypeProperties();
}
public void setupHelpContextIds(){
diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/NewManagedProjectWizard.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/NewManagedProjectWizard.java
index 2fa2b16586..3ca45f48be 100644
--- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/NewManagedProjectWizard.java
+++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/NewManagedProjectWizard.java
@@ -1,7 +1,5 @@
-package org.eclipse.cdt.managedbuilder.ui.wizards;
-
/**********************************************************************
- * Copyright (c) 2002,2004 Rational Software Corporation and others.
+ * Copyright (c) 2002,2004 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
@@ -10,14 +8,16 @@ package org.eclipse.cdt.managedbuilder.ui.wizards;
* Contributors:
* IBM Rational Software - Initial API and implementation
* **********************************************************************/
-
-import java.util.Random;
+package org.eclipse.cdt.managedbuilder.ui.wizards;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.ICDescriptor;
import org.eclipse.cdt.managedbuilder.core.BuildException;
+import org.eclipse.cdt.managedbuilder.core.IProjectType;
+import org.eclipse.cdt.managedbuilder.core.IManagedProject;
import org.eclipse.cdt.managedbuilder.core.IConfiguration;
-import org.eclipse.cdt.managedbuilder.core.ITarget;
+import org.eclipse.cdt.managedbuilder.core.IToolChain;
+import org.eclipse.cdt.managedbuilder.core.ITargetPlatform;
import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
import org.eclipse.cdt.managedbuilder.core.ManagedBuilderCorePlugin;
import org.eclipse.cdt.managedbuilder.core.ManagedCProjectNature;
@@ -55,7 +55,7 @@ public class NewManagedProjectWizard extends NewCProjectWizard {
protected static final String SETTINGS_DESC = "MngMakeWizardSettings.description"; //$NON-NLS-1$
// Wizard pages
- protected CProjectPlatformPage targetConfigurationPage;
+ protected CProjectPlatformPage projectConfigurationPage;
protected NewManagedProjectOptionPage optionPage;
public NewManagedProjectWizard() {
@@ -71,10 +71,10 @@ public class NewManagedProjectWizard extends NewCProjectWizard {
super.addPages();
// Add the configuration selection page
- targetConfigurationPage = new CProjectPlatformPage(PREFIX, this);
- targetConfigurationPage.setTitle(ManagedBuilderUIMessages.getResourceString(CONF_TITLE));
- targetConfigurationPage.setDescription(ManagedBuilderUIMessages.getResourceString(CONF_DESC));
- addPage(targetConfigurationPage);
+ projectConfigurationPage = new CProjectPlatformPage(PREFIX, this);
+ projectConfigurationPage.setTitle(ManagedBuilderUIMessages.getResourceString(CONF_TITLE));
+ projectConfigurationPage.setDescription(ManagedBuilderUIMessages.getResourceString(CONF_DESC));
+ addPage(projectConfigurationPage);
// Add the options (tabbed) page
optionPage = new NewManagedProjectOptionPage(PREFIX, this);
@@ -97,9 +97,9 @@ public class NewManagedProjectWizard extends NewCProjectWizard {
optionPage.setupHelpContextIds();
}
}
- public void updateTargetProperties() {
+ public void updateProjectTypeProperties() {
// Update the error parser list
- optionPage.updateTargetProperties();
+ optionPage.updateProjectTypeProperties();
}
protected void doRun(IProgressMonitor monitor) throws CoreException {
@@ -120,40 +120,42 @@ public class NewManagedProjectWizard extends NewCProjectWizard {
ManagedBuilderUIPlugin.log(e);
}
- // Add the target to the project
- ITarget newTarget = null;
+ // Add the ManagedProject to the project
+ IManagedProject newManagedProject = null;
try {
ManagedBuildManager.createBuildInfo(newProject);
- ITarget parent = targetConfigurationPage.getSelectedTarget();
- newTarget = ManagedBuildManager.createTarget(newProject, parent);
- if (newTarget != null) {
- ICDescriptor desc = null;
- try {
- desc = CCorePlugin.getDefault().getCProjectDescription(newProject, true);
- desc.create(CCorePlugin.BUILD_SCANNER_INFO_UNIQ_ID, ManagedBuildManager.INTERFACE_IDENTITY);
- desc.create(CCorePlugin.BINARY_PARSER_UNIQ_ID, newTarget.getBinaryParserId());
- } catch (CoreException e) {
- ManagedBuilderUIPlugin.log(e);
- }
- newTarget.setArtifactName(getBuildGoalName());
- IConfiguration [] selectedConfigs = targetConfigurationPage.getSelectedConfigurations();
- Random r = new Random();
- r.setSeed(System.currentTimeMillis());
+ IProjectType parent = projectConfigurationPage.getSelectedProjectType();
+ newManagedProject = ManagedBuildManager.createManagedProject(newProject, parent);
+ if (newManagedProject != null) {
+ IConfiguration [] selectedConfigs = projectConfigurationPage.getSelectedConfigurations();
for (int i = 0; i < selectedConfigs.length; i++) {
IConfiguration config = selectedConfigs[i];
- int id = r.nextInt();
- if (id < 0) {
- id *= -1;
- }
- newTarget.createConfiguration(config, config.getId() + "." + id); //$NON-NLS-1$
+ int id = ManagedBuildManager.getRandomNumber();
+ IConfiguration newConfig = newManagedProject.createConfiguration(config, config.getId() + "." + id); //$NON-NLS-1$
+ newConfig.setArtifactName(newManagedProject.getDefaultArtifactName());
}
// Now add the first config in the list as the default
- IConfiguration[] newConfigs = newTarget.getConfigurations();
+ IConfiguration[] newConfigs = newManagedProject.getConfigurations();
if (newConfigs.length > 0) {
ManagedBuildManager.setDefaultConfiguration(newProject, newConfigs[0]);
+ ManagedBuildManager.setSelectedConfiguration(newProject, newConfigs[0]);
}
- ManagedBuildManager.setSelectedTarget(newProject, newTarget);
ManagedBuildManager.setNewProjectVersion(newProject);
+ ICDescriptor desc = null;
+ try {
+ desc = CCorePlugin.getDefault().getCProjectDescription(newProject, true);
+ desc.create(CCorePlugin.BUILD_SCANNER_INFO_UNIQ_ID, ManagedBuildManager.INTERFACE_IDENTITY);
+ // TODO: The binary parser setting is currently per-project in the rest of CDT.
+ // In the MBS, it is per-coonfiguration. For now, select the binary parser of the
+ // first configuration.
+ if (newConfigs.length > 0) {
+ IToolChain tc = newConfigs[0].getToolChain();
+ ITargetPlatform targetPlatform = tc.getTargetPlatform();
+ desc.create(CCorePlugin.BINARY_PARSER_UNIQ_ID, targetPlatform.getBinaryParserId());
+ }
+ } catch (CoreException e) {
+ ManagedBuilderUIPlugin.log(e);
+ }
}
} catch (BuildException e) {
ManagedBuilderUIPlugin.log(e);
@@ -170,19 +172,6 @@ public class NewManagedProjectWizard extends NewCProjectWizard {
monitor.done();
}
- /**
- * @return
- */
- private String getBuildGoalName() {
- String name = new String();
- // Check for spaces
- String[] tokens = newProject.getName().split("\\s"); //$NON-NLS-1$
- for (int index = 0; index < tokens.length; ++index) {
- name += tokens[index];
- }
- return name;
- }
-
/* (non-Javadoc)
* @see org.eclipse.cdt.ui.wizards.NewCProjectWizard#doRunPrologue(org.eclipse.core.runtime.IProgressMonitor)
*/
@@ -211,8 +200,8 @@ public class NewManagedProjectWizard extends NewCProjectWizard {
return ManagedBuilderCorePlugin.MANAGED_MAKE_PROJECT_ID;
}
- public ITarget getSelectedTarget() {
- return targetConfigurationPage.getSelectedTarget();
+ public IProjectType getSelectedProjectType() {
+ return projectConfigurationPage.getSelectedProjectType();
}
}

Back to the top