From 7157df942131c4572db99ae252f19eead94263a8 Mon Sep 17 00:00:00 2001 From: Oleg Krasilnikov Date: Tue, 11 Dec 2007 16:55:29 +0000 Subject: [PATCH] Bug # 182450: allow changing settings for multimple configs simultaneously --- .../core}/BuildListComparator.java | 12 +- .../core/IMultiConfiguration.java | 37 + .../internal/core/MultiConfiguration.java | 1172 +++++++++++++++++ .../plugin.properties | 1 + .../plugin.xml | 11 + .../ui/preferences/PrefPage_MultiConfig.java | 15 + .../ui/preferences/PropertyMultiCfgTab.java | 173 +++ .../ui/preferences/PropertyPageDefsTab.java | 9 - .../properties/AbstractCBuildPropertyTab.java | 11 +- .../ui/properties/ArtifactTab.java | 68 +- .../ui/properties/BuildBehaviourTab.java | 188 ++- .../ui/properties/BuildStepsTab.java | 15 +- .../ui/properties/BuilderSettingsTab.java | 191 ++- .../properties/CBuildLocationOutputTab.java | 7 +- .../ui/properties/CPropertyVarsTab.java | 164 ++- .../ui/properties/DiscoveryTab.java | 69 +- .../ui/properties/NewVarDialog.java | 3 +- .../ui/properties/ToolChainEditTab.java | 15 +- .../ui/properties/ToolSelectionDialog.java | 1 + .../ui/properties/ToolSettingsTab.java | 13 +- .../ui/properties/messages.properties | 1 + .../ui/wizards/ManagedBuildWizard.java | 2 +- .../core/model/util}/CDTListComparator.java | 25 +- .../model/ICMultiConfigDescription.java | 16 + .../settings/model/ICMultiItemsHolder.java | 98 ++ .../model/ICMultiResourceDescription.java | 18 + .../core/settings/model/MultiItemsHolder.java | 173 +++ .../model/MultiConfigDescription.java | 523 ++++++++ .../settings/model/MultiFileDescription.java | 36 + .../model/MultiFolderDescription.java | 145 ++ .../settings/model/MultiLanguageSetting.java | 225 ++++ .../model/MultiResourceDescription.java | 205 +++ .../cdt/ui/newui/AbstractCPropertyTab.java | 6 +- .../cdt/ui/newui/AbstractExportTab.java | 14 +- .../cdt/ui/newui/AbstractLangsListTab.java | 26 +- .../eclipse/cdt/ui/newui/AbstractPage.java | 47 +- .../org/eclipse/cdt/ui/newui/CDTPrefUtil.java | 10 + .../cdt/ui/newui/CDTUIListComparator.java | 49 + .../eclipse/cdt/ui/newui/CLocationTab.java | 11 + .../org/eclipse/cdt/ui/newui/EnvDialog.java | 15 +- .../eclipse/cdt/ui/newui/EnvironmentTab.java | 22 +- .../eclipse/cdt/ui/newui/ErrorParsTab.java | 28 +- .../cdt/ui/newui/ICPropertyProvider.java | 1 - .../eclipse/cdt/ui/newui/IncludeDialog.java | 4 +- .../cdt/ui/newui/ManageConfigDialog.java | 1 + .../newui/MultiCfgContributedEnvironment.java | 152 +++ .../cdt/ui/newui/PluginResources.properties | 1 - .../src/org/eclipse/cdt/ui/newui/RefsTab.java | 11 +- .../org/eclipse/cdt/ui/newui/SymbolTab.java | 1 + 49 files changed, 3763 insertions(+), 278 deletions(-) rename build/{org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties => org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core}/BuildListComparator.java (84%) create mode 100644 build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IMultiConfiguration.java create mode 100644 build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/MultiConfiguration.java create mode 100644 build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/preferences/PrefPage_MultiConfig.java create mode 100644 build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/preferences/PropertyMultiCfgTab.java rename core/{org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui => org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/util}/CDTListComparator.java (69%) create mode 100644 core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/ICMultiConfigDescription.java create mode 100644 core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/ICMultiItemsHolder.java create mode 100644 core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/ICMultiResourceDescription.java create mode 100644 core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/MultiItemsHolder.java create mode 100644 core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/MultiConfigDescription.java create mode 100644 core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/MultiFileDescription.java create mode 100644 core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/MultiFolderDescription.java create mode 100644 core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/MultiLanguageSetting.java create mode 100644 core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/MultiResourceDescription.java create mode 100644 core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/CDTUIListComparator.java create mode 100644 core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/MultiCfgContributedEnvironment.java diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildListComparator.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/BuildListComparator.java similarity index 84% rename from build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildListComparator.java rename to build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/BuildListComparator.java index 06c9ec5950b..233354fe7d9 100644 --- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildListComparator.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/BuildListComparator.java @@ -8,22 +8,20 @@ * Contributors: * Intel Corporation - Initial API and implementation *******************************************************************************/ -package org.eclipse.cdt.managedbuilder.ui.properties; +package org.eclipse.cdt.managedbuilder.core; +import java.util.Comparator; + +import org.eclipse.cdt.core.model.util.CDTListComparator; import org.eclipse.cdt.managedbuilder.buildproperties.IBuildPropertyValue; -import org.eclipse.cdt.managedbuilder.core.IBuilder; -import org.eclipse.cdt.managedbuilder.core.ITool; -import org.eclipse.cdt.managedbuilder.core.IToolChain; -import org.eclipse.cdt.ui.newui.CDTListComparator; /** * This class is intended to compare MBS-specific classes */ public class BuildListComparator extends CDTListComparator { - private static BuildListComparator comparator = null; private static final String EMPTY = ""; //$NON-NLS-1$ - public static CDTListComparator getInstance() { + public static Comparator getInstance() { if (comparator == null) comparator = new BuildListComparator(); return comparator; diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IMultiConfiguration.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IMultiConfiguration.java new file mode 100644 index 00000000000..0addddb79f6 --- /dev/null +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IMultiConfiguration.java @@ -0,0 +1,37 @@ +/******************************************************************************* + * Copyright (c) 2007 Intel Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Intel Corporation - Initial API and implementation + *******************************************************************************/ +package org.eclipse.cdt.managedbuilder.core; + +import org.eclipse.cdt.core.settings.model.ICMultiItemsHolder; +import org.eclipse.cdt.managedbuilder.buildproperties.IBuildProperty; +import org.eclipse.cdt.managedbuilder.buildproperties.IBuildPropertyValue; + +public interface IMultiConfiguration extends IConfiguration, ICMultiItemsHolder { + + boolean getParallelDef(); + void setParallelDef(boolean def); + + int getParallelNumber(); + void setParallelNumber(int num); + + boolean getInternalBuilderParallel(); + + boolean isInternalBuilderEnabled(); + boolean canEnableInternalBuilder(boolean v); + void enableInternalBuilder(boolean v); + + void setOutputPrefixForPrimaryOutput(String pref); + String getToolOutputPrefix(); + + IBuildProperty getBuildProperty(String id); + void setBuildProperty(String id, String val); + IBuildPropertyValue[] getSupportedValues(String id); +} diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/MultiConfiguration.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/MultiConfiguration.java new file mode 100644 index 00000000000..f7e6d1d5c06 --- /dev/null +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/MultiConfiguration.java @@ -0,0 +1,1172 @@ +/******************************************************************************* + * Copyright (c) 2007 Intel Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Intel Corporation - Initial API and implementation + *******************************************************************************/ +package org.eclipse.cdt.managedbuilder.internal.core; + +import java.util.Arrays; + +import org.eclipse.cdt.core.CCorePlugin; +import org.eclipse.cdt.core.settings.model.ICSourceEntry; +import org.eclipse.cdt.core.settings.model.MultiItemsHolder; +import org.eclipse.cdt.core.settings.model.extension.CBuildData; +import org.eclipse.cdt.core.settings.model.extension.CConfigurationData; +import org.eclipse.cdt.managedbuilder.buildproperties.IBuildProperty; +import org.eclipse.cdt.managedbuilder.buildproperties.IBuildPropertyValue; +import org.eclipse.cdt.managedbuilder.core.BuildException; +import org.eclipse.cdt.managedbuilder.core.IBuildObjectProperties; +import org.eclipse.cdt.managedbuilder.core.IBuilder; +import org.eclipse.cdt.managedbuilder.core.IConfiguration; +import org.eclipse.cdt.managedbuilder.core.IFileInfo; +import org.eclipse.cdt.managedbuilder.core.IFolderInfo; +import org.eclipse.cdt.managedbuilder.core.IHoldsOptions; +import org.eclipse.cdt.managedbuilder.core.IManagedCommandLineInfo; +import org.eclipse.cdt.managedbuilder.core.IManagedProject; +import org.eclipse.cdt.managedbuilder.core.IMultiConfiguration; +import org.eclipse.cdt.managedbuilder.core.IOption; +import org.eclipse.cdt.managedbuilder.core.IProjectType; +import org.eclipse.cdt.managedbuilder.core.IResourceConfiguration; +import org.eclipse.cdt.managedbuilder.core.IResourceInfo; +import org.eclipse.cdt.managedbuilder.core.ITool; +import org.eclipse.cdt.managedbuilder.core.IToolChain; +import org.eclipse.cdt.managedbuilder.envvar.IConfigurationEnvironmentVariableSupplier; +import org.eclipse.cdt.managedbuilder.macros.IConfigurationBuildMacroSupplier; +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IResource; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.PluginVersionIdentifier; + +/** + * + * + */ +public class MultiConfiguration extends MultiItemsHolder implements + IMultiConfiguration { + private static final String[] EMPTY_STR_ARRAY = new String[0]; + + protected IConfiguration[] fCfgs = null; + + public MultiConfiguration(IConfiguration[] cfs, int mode) { + fCfgs = cfs; + setStringListMode(mode); + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.settings.model.MultiItemsHolder#getItems() + */ + public Object[] getItems() { + return fCfgs; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IConfiguration#buildsFileType(java.lang.String) + */ + public boolean buildsFileType(String srcExt) { + return curr().buildsFileType(srcExt); + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IConfiguration#calculateTargetTool() + */ + public ITool calculateTargetTool() { + System.out.println("Bad multi access: MultiConfiguration.calculateTargetTool()"); + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IConfiguration#changeBuilder(org.eclipse.cdt.managedbuilder.core.IBuilder, java.lang.String, java.lang.String) + */ + public void changeBuilder(IBuilder newBuilder, String id, String name) { + for (int i=0; i 0) { + IBuildPropertyValue[] b = new IBuildPropertyValue[cnt]; + int pos = 0; + for (int x=0; x + + @@ -397,6 +403,11 @@ class="org.eclipse.cdt.managedbuilder.ui.preferences.PropertyPageDefsTab" name="%PropertyPage.defaults" parent="org.eclipse.cdt.managedbuilder.ui.preferences.PrefPage_PropertyPage"/> + + 0) { - scGroup.setVisible(true); - profileComp.setVisible(true); - resTable.setEnabled(true); + setVisibility(null); resTable.select((pos < len && pos > -1) ? pos : 0); handleToolSelected(); } else { - scGroup.setVisible(false); - profileComp.setVisible(false); - TableItem ti = new TableItem(resTable, SWT.NONE); - resTable.setEnabled(false); - ti.setText(Messages.getString("DiscoveryTab.6")); //$NON-NLS-1$ + setVisibility(Messages.getString("DiscoveryTab.6")); //$NON-NLS-1$ } } + private void setVisibility(String errMsg) { + scGroup.setVisible(errMsg == null); + profileComp.setVisible(errMsg == null); + resTable.setEnabled(errMsg == null); + if (errMsg != null) { + String[] ss = errMsg.split("\n"); //$NON-NLS-1$ + for (int i=0; i= 0) + list.add(ls[j][x]); + } + if (list.size() == 1) + lsets[i] = (ICLanguageSetting)list.get(0); + else if (list.size() > 1) + lsets[i] = new MultiLanguageSetting(list, getConfiguration()); + } + return lsets; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.settings.model.ICFolderDescription#getNestedResourceDescription(org.eclipse.core.runtime.IPath, boolean) + */ + public ICResourceDescription getNestedResourceDescription(IPath relPath, + boolean exactPath) { + System.out.println("Bad multi access: MultiFolderDescription.getNestedResourceDescription(path, exact)"); + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.settings.model.ICFolderDescription#getNestedResourceDescriptions(int) + */ + public ICResourceDescription[] getNestedResourceDescriptions(int kind) { + System.out.println("Bad multi access: MultiFolderDescription.getNestedResourceDescriptions(kind)"); + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.settings.model.ICFolderDescription#getNestedResourceDescriptions() + */ + public ICResourceDescription[] getNestedResourceDescriptions() { + System.out.println("Bad multi access: MultiFolderDescription.getNestedResourceDescriptions()"); + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.settings.model.ICFolderDescription#isRoot() + */ + public boolean isRoot() { + for (int i=0; i= cfgDescs.length) { - if ((selectionIndex - cfgDescs.length) == 0) // all + ICConfigurationDescription[] multiCfgs = null; // selected multi cfg + if ((selectionIndex - cfgDescs.length) == 0) { // all multiCfgs = cfgDescs; - else { + cfgIndex = selectionIndex; + } else { ICConfigurationDescription[] mcfgs = ConfigMultiSelectionDialog.select(cfgDescs); if (mcfgs == null || mcfgs.length == 0) { - // return back to previous selection, but not to multi ! - if (cfgIndex >= cfgDescs.length) { + // return back to previous selection + if (cfgIndex > configSelector.getItemCount()) { cfgIndex = 0; configSelector.select(0); cfgChanged(cfgDescs[0]); @@ -397,11 +399,9 @@ implements } multiCfgs = mcfgs; } - - isMulti = true; - // if tab does not support multi cfg, - // it will show 1st cfg, at least. - cfgChanged(multiCfgs[0]); + // TODO: avoid repeated update like for single cfg + cfgChanged(MultiItemsHolder.createCDescription(multiCfgs, + ICMultiItemsHolder.MODE_DEFAULT)); return; } else { String id1 = getResDesc() == null ? null : getResDesc().getId(); @@ -461,9 +461,19 @@ implements final boolean needs = (mode != SAVE_MODE_OK); final ICProjectDescription local_prjd = needs ? CoreModel.getDefault().getProjectDescription(getProject()) : null; - ICConfigurationDescription c = needs ? local_prjd.getConfigurationById(resd.getConfiguration().getId()) : null; - final ICResourceDescription local_cfgd = needs ? getResDesc(c) : null; - + + ICResourceDescription lc = null; + + if (needs) { + if (isMultiCfg()) { + lc = resd; + } else { + ICConfigurationDescription c = needs ? local_prjd.getConfigurationById(resd.getConfiguration().getId()) : null; + lc = getResDesc(c); + } + } + final ICResourceDescription local_cfgd = lc; + IRunnableWithProgress runnable = new IRunnableWithProgress() { private void sendOK() { @@ -749,7 +759,6 @@ implements if (CDTPropertyManager.getPagesCount() == 0) { resd = null; cfgDescs = null; - multiCfgs = null; } } @@ -976,9 +985,7 @@ implements public boolean isForFolder() { return isFolder; } public boolean isForFile() { return isFile; } public boolean isForPrefs() { return false; } - - public boolean isMultiCfg() { return isMulti; } - public ICConfigurationDescription[] getMultiCfg() { return (isMulti) ? multiCfgs : null; } + public boolean isMultiCfg() { return resd instanceof ICMultiItemsHolder; } /** * Checks whether CDT property pages can be open for given object. diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/CDTPrefUtil.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/CDTPrefUtil.java index 24588536e61..6cea040709e 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/CDTPrefUtil.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/CDTPrefUtil.java @@ -24,6 +24,7 @@ public class CDTPrefUtil { public static final String KEY_OTHERS = "wizard.group.others.enable"; //$NON-NLS-1$ public static final String KEY_NOMNG = "properties.manage.config.disable"; //$NON-NLS-1$ public static final String KEY_MULTI = "properties.multi.config.enable"; //$NON-NLS-1$ + public static final String KEY_3STATE = "properties.multi.3state.enable"; //$NON-NLS-1$ public static final String KEY_DTREE = "properties.data.hierarchy.enable"; //$NON-NLS-1$ public static final String KEY_NOTOOLM = "properties.toolchain.modification.disable"; //$NON-NLS-1$ public static final String KEY_EXPORT = "properties.export.page.enable"; //$NON-NLS-1$ @@ -42,6 +43,15 @@ public class CDTPrefUtil { public static final int DISC_NAMING_ALWAYS_IDS = 3; public static final int DISC_NAMING_DEFAULT = DISC_NAMING_UNIQUE_OR_BOTH; + public static final String KEY_DMODE = "properties.multi.displ.mode"; //$NON-NLS-1$ + public static final int DMODE_EMPTY = 1; + public static final int DMODE_CONJUNCTION = 2; + public static final int DMODE_DISJUNCTION = 4; + + public static final String KEY_WMODE = "properties.multi.write.mode"; //$NON-NLS-1$ + public static final int WMODE_MODIFY = 8; + public static final int WMODE_REPLACE = 16; + public static final String NULL = "NULL"; //$NON-NLS-1$ private static final IPreferenceStore pref = CUIPlugin.getDefault().getPreferenceStore(); private static final String DELIMITER = " "; //$NON-NLS-1$ diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/CDTUIListComparator.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/CDTUIListComparator.java new file mode 100644 index 00000000000..a7be8e7bb80 --- /dev/null +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/CDTUIListComparator.java @@ -0,0 +1,49 @@ +/******************************************************************************* + * Copyright (c) 2005, 2007 Intel Corporation and others + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Intel Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.cdt.ui.newui; + +import java.util.Comparator; + +import org.eclipse.core.runtime.IConfigurationElement; + +import org.eclipse.cdt.core.model.util.CDTListComparator; +import org.eclipse.cdt.ui.newui.AbstractExportTab.ExtData; +import org.eclipse.cdt.ui.wizards.EntryDescriptor; + +public class CDTUIListComparator extends CDTListComparator implements Comparator { + + public static Comparator getInstance() { + if (comparator == null) + comparator = new CDTUIListComparator(); + return comparator; + } + public int compare(Object a, Object b) { + if (a == null || b == null) + return 0; + if (a instanceof ExtData) { + ExtData c1 = (ExtData)a; + ExtData c2 = (ExtData)b; + return c1.getName().compareToIgnoreCase(c2.getName()); + } + if (a instanceof IConfigurationElement) { + IConfigurationElement e1 = (IConfigurationElement)a; + IConfigurationElement e2 = (IConfigurationElement)b; + return AbstractPage.getWeight(e1).compareTo(AbstractPage.getWeight(e2)); + } + if (a instanceof EntryDescriptor) { + EntryDescriptor c1 = (EntryDescriptor) a; + EntryDescriptor c2 = (EntryDescriptor) b; + return c1.getName().compareToIgnoreCase(c2.getName()); + } + return super.compare(a, b); + } + +} diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/CLocationTab.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/CLocationTab.java index 0ae4adf337b..45bfc449a44 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/CLocationTab.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/CLocationTab.java @@ -43,6 +43,7 @@ import org.eclipse.ui.model.WorkbenchLabelProvider; import org.eclipse.cdt.core.model.ICProject; import org.eclipse.cdt.core.settings.model.ICExclusionPatternPathEntry; +import org.eclipse.cdt.core.settings.model.ICMultiItemsHolder; import org.eclipse.cdt.core.settings.model.ICResourceDescription; import org.eclipse.cdt.internal.ui.CPluginImages; @@ -231,6 +232,13 @@ public abstract class CLocationTab extends AbstractCPropertyTab { } public void updateData(ICResourceDescription _cfgd) { + if (page.isMultiCfg()) { + usercomp.setVisible(false); + return; + } + if ( !usercomp.getVisible()) + usercomp.setVisible(true); + cfgd = _cfgd; ICExclusionPatternPathEntry[] ent = getEntries(cfgd); src = new ArrayList(ent.length); @@ -263,6 +271,9 @@ public abstract class CLocationTab extends AbstractCPropertyTab { // This page can be displayed for project only public boolean canBeVisible() { + if (page.getResDesc() instanceof ICMultiItemsHolder) + return false; // cannot work with multi cfg + return page.isForProject(); } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/EnvDialog.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/EnvDialog.java index 7034757d4c5..9a46b0993d7 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/EnvDialog.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/EnvDialog.java @@ -34,21 +34,23 @@ public class EnvDialog extends Dialog { Button b_add2all; private Text text1; private Text text2; - boolean newAction; - Shell shell; - ICConfigurationDescription cfgd; + private boolean newAction; + private boolean multiCfg; + private ICConfigurationDescription cfgd; public String t1 = AbstractCPropertyTab.EMPTY_STR; public String t2 = AbstractCPropertyTab.EMPTY_STR; public boolean toAll = false; public EnvDialog(Shell parent, IEnvironmentVariable _var, - String title, boolean _newAction, + String title, + boolean _newAction, + boolean _multiCfg, ICConfigurationDescription _cfgd) { super(parent); - shell = parent; var = _var; newAction = _newAction; + multiCfg = _multiCfg; cfgd = _cfgd; } @@ -113,6 +115,9 @@ public class EnvDialog extends Dialog { toAll = b_add2all.getSelection(); }}); + if (multiCfg) + b_add2all.setVisible(false); + if (!newAction) { gd.heightHint = 1; b_add2all.setVisible(false); diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/EnvironmentTab.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/EnvironmentTab.java index 7ab157eec0e..4fd8c5edd98 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/EnvironmentTab.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/EnvironmentTab.java @@ -45,9 +45,8 @@ import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.ui.dialogs.ListSelectionDialog; -import org.eclipse.cdt.core.CCorePlugin; -import org.eclipse.cdt.core.envvar.IContributedEnvironment; import org.eclipse.cdt.core.envvar.IEnvironmentVariable; +import org.eclipse.cdt.core.model.util.CDTListComparator; import org.eclipse.cdt.core.settings.model.ICConfigurationDescription; import org.eclipse.cdt.core.settings.model.ICResourceDescription; import org.eclipse.cdt.utils.envvar.StorableEnvironment; @@ -66,13 +65,13 @@ public class EnvironmentTab extends AbstractCPropertyTab { private static final String RBR = "]"; //$NON-NLS-1$ private static final UserDefinedEnvironmentSupplier fUserSupplier = EnvironmentVariableManager.fUserSupplier; + private final MultiCfgContributedEnvironment ce = new MultiCfgContributedEnvironment(); private Table table; private TableViewer tv; private ArrayList data = new ArrayList(); private Button b1, b2; - private static final IContributedEnvironment ce = CCorePlugin.getDefault().getBuildEnvironmentManager().getContributedEnvironment(); private ICConfigurationDescription cfgd = null; private StorableEnvironment vars = null; @@ -218,7 +217,12 @@ public class EnvironmentTab extends AbstractCPropertyTab { int[] idx; switch (i) { case 0: - dlg = new EnvDialog(usercomp.getShell(), var, UIMessages.getString("EnvironmentTab.10"), true, cfgd); //$NON-NLS-1$ + dlg = new EnvDialog(usercomp.getShell(), + var, + UIMessages.getString("EnvironmentTab.10"), //$NON-NLS-1$ + true, + page.isMultiCfg(), + cfgd); if (dlg.open() == Window.OK) { if (dlg.t1.trim().length() > 0) { ICConfigurationDescription[] cfgs; @@ -246,7 +250,12 @@ public class EnvironmentTab extends AbstractCPropertyTab { case 2: // edit if (n == -1) return; var = ((TabData)tv.getElementAt(n)).var; - dlg = new EnvDialog(usercomp.getShell(), var, UIMessages.getString("EnvironmentTab.11"), false, cfgd); //$NON-NLS-1$ + dlg = new EnvDialog(usercomp.getShell(), + var, + UIMessages.getString("EnvironmentTab.11"), //$NON-NLS-1$ + false, + page.isMultiCfg(), + cfgd); if (dlg.open() == Window.OK) { if (cfgd != null) ce.addVariable( dlg.t1.trim(), dlg.t2.trim(), @@ -308,8 +317,11 @@ public class EnvironmentTab extends AbstractCPropertyTab { cfgd = (_cfgd != null) ? _cfgd.getConfiguration() : null; if (cfgd == null && vars == null) vars = fUserSupplier.getWorkspaceEnvironmentCopy(); + else + ce.setMulti(page.isMultiCfg()); updateData(); } + private void updateData() { IEnvironmentVariable[] _vars = null; if (cfgd != null) { diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/ErrorParsTab.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/ErrorParsTab.java index 8b4610e33f1..fbe717318da 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/ErrorParsTab.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/ErrorParsTab.java @@ -31,6 +31,7 @@ import org.eclipse.swt.widgets.Table; import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.settings.model.ICConfigurationDescription; +import org.eclipse.cdt.core.settings.model.ICMultiConfigDescription; import org.eclipse.cdt.core.settings.model.ICResourceDescription; @@ -141,7 +142,9 @@ public class ErrorParsTab extends AbstractCPropertyTab { public void updateData(ICResourceDescription _cfgd) { cfgd = _cfgd.getConfiguration(); if (mapParsers == null) return; - String[] ss = cfgd.getBuildSetting().getErrorParserIDs(); + String[] ss = (page.isMultiCfg()) ? + ((ICMultiConfigDescription)cfgd).getErrorParserIDs() : + cfgd.getBuildSetting().getErrorParserIDs(); ArrayList data = new ArrayList(mapParsers.size()); ArrayList checked = new ArrayList(ss.length); @@ -176,10 +179,16 @@ public class ErrorParsTab extends AbstractCPropertyTab { buttonSetEnabled(4, cnt > 0); } - public void performApply(ICResourceDescription src, ICResourceDescription dst) { - String[] s1 = src.getConfiguration().getBuildSetting().getErrorParserIDs(); - dst.getConfiguration().getBuildSetting().setErrorParserIDs(s1); + ICConfigurationDescription sd = src.getConfiguration(); + ICConfigurationDescription dd = dst.getConfiguration(); + String[] s = (sd instanceof ICMultiConfigDescription) ? + ((ICMultiConfigDescription)sd).getErrorParserIDs() : + sd.getBuildSetting().getErrorParserIDs(); + if (dd instanceof ICMultiConfigDescription) + ((ICMultiConfigDescription)sd).setErrorParserIDs(s); + else + dd.getBuildSetting().setErrorParserIDs(s); } private void saveChecked() { @@ -189,7 +198,11 @@ public class ErrorParsTab extends AbstractCPropertyTab { for (int i=0; i