1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-20 23:45:23 +02:00

Bug #182450 : Multi-configuration support

This commit is contained in:
Oleg Krasilnikov 2008-02-08 16:39:21 +00:00
parent e08ec31825
commit 95c056e27e
33 changed files with 857 additions and 611 deletions

View file

@ -1,5 +1,5 @@
/******************************************************************************* /*******************************************************************************
* Copyright (c) 2003, 2006 Rational Software Corporation and others. * Copyright (c) 2003, 2008 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials * All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0 * are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at * which accompanies this distribution, and is available at
@ -332,7 +332,7 @@ public interface IManagedBuildInfo {
* *
* @return * @return
*/ */
public List getTargets(); public List<ITarget> getTargets();
/** /**
* Returns a <code>String</code> containing the command-line invocation * Returns a <code>String</code> containing the command-line invocation

View file

@ -195,7 +195,7 @@ public class ManagedBuildManager extends AbstractCExtension implements IScannerI
private static boolean projectTypesLoading = false; private static boolean projectTypesLoading = false;
// Project types defined in the manifest files // Project types defined in the manifest files
public static SortedMap<String, IProjectType> projectTypeMap; public static SortedMap<String, IProjectType> projectTypeMap;
private static List projectTypes; private static List<IProjectType> projectTypes;
// Early configuration initialization extension elements // Early configuration initialization extension elements
private static List startUpConfigElements; private static List startUpConfigElements;
// Configurations defined in the manifest files // Configurations defined in the manifest files
@ -313,7 +313,7 @@ public class ManagedBuildManager extends AbstractCExtension implements IScannerI
} }
// Get the project types for this project and all referenced projects // Get the project types for this project and all referenced projects
List definedTypes = null; List<IProjectType> definedTypes = null;
// To Do // To Do
// Create the array and copy the elements over // Create the array and copy the elements over
@ -329,7 +329,7 @@ public class ManagedBuildManager extends AbstractCExtension implements IScannerI
if (definedTypes != null) if (definedTypes != null)
for (int i = 0; i < definedTypes.size(); ++i) for (int i = 0; i < definedTypes.size(); ++i)
types[n++] = (IProjectType)definedTypes.get(i); types[n++] = definedTypes.get(i);
return types; return types;
} }
@ -573,8 +573,8 @@ public class ManagedBuildManager extends AbstractCExtension implements IScannerI
IManagedBuildInfo buildInfo = getBuildInfo(resource); IManagedBuildInfo buildInfo = getBuildInfo(resource);
if (buildInfo != null) { if (buildInfo != null) {
List targets = buildInfo.getTargets(); List<ITarget> targets = buildInfo.getTargets();
return (ITarget[])targets.toArray(new ITarget[targets.size()]); return targets.toArray(new ITarget[targets.size()]);
} }
return emptyTargets; return emptyTargets;
} }
@ -930,6 +930,7 @@ public class ManagedBuildManager extends AbstractCExtension implements IScannerI
* @param config * @param config
* @param option * @param option
*/ */
/*
private static void notifyListeners(IConfiguration config, IOption option) { private static void notifyListeners(IConfiguration config, IOption option) {
// Continue if change is something that effect the scanner // Continue if change is something that effect the scanner
try { try {
@ -964,7 +965,7 @@ public class ManagedBuildManager extends AbstractCExtension implements IScannerI
((IScannerInfoChangeListener)iter.next()).changeNotification(resource, (IScannerInfo)getBuildInfo(resource)); ((IScannerInfoChangeListener)iter.next()).changeNotification(resource, (IScannerInfo)getBuildInfo(resource));
} }
} }
*/
public static void initializePathEntries(IConfiguration config, IOption option){ public static void initializePathEntries(IConfiguration config, IOption option){
try{ try{
if(config.isTemporary() || if(config.isTemporary() ||
@ -1756,7 +1757,7 @@ public class ManagedBuildManager extends AbstractCExtension implements IScannerI
*/ */
public static void addExtensionProjectType(ProjectType projectType) { public static void addExtensionProjectType(ProjectType projectType) {
if (projectTypes == null) { if (projectTypes == null) {
projectTypes = new ArrayList(); projectTypes = new ArrayList<IProjectType>();
} }
projectTypes.add(projectType); projectTypes.add(projectType);
@ -3924,7 +3925,7 @@ public class ManagedBuildManager extends AbstractCExtension implements IScannerI
if (cfgDes instanceof ICMultiConfigDescription) { if (cfgDes instanceof ICMultiConfigDescription) {
ICMultiConfigDescription mcd = (ICMultiConfigDescription)cfgDes; ICMultiConfigDescription mcd = (ICMultiConfigDescription)cfgDes;
ICConfigurationDescription[] cfds = (ICConfigurationDescription[])mcd.getItems(); ICConfigurationDescription[] cfds = (ICConfigurationDescription[])mcd.getItems();
return new MultiConfiguration(cfds, mcd.getStringListMode()); return new MultiConfiguration(cfds);
} }
CConfigurationData cfgData = cfgDes.getConfigurationData(); CConfigurationData cfgData = cfgDes.getConfigurationData();

View file

@ -2551,10 +2551,10 @@ public class Builder extends BuildObject implements IBuilder, IMatchKeyProvider,
setDirty(true); setDirty(true);
} }
public Set contributeErrorParsers(Set set){ public Set<String> contributeErrorParsers(Set<String> set){
if(getErrorParserIds() != null){ if(getErrorParserIds() != null){
if(set == null) if(set == null)
set = new HashSet(); set = new HashSet<String>();
String ids[] = getErrorParserList(); String ids[] = getErrorParserList();
if(ids.length != 0) if(ids.length != 0)

View file

@ -925,14 +925,12 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
} }
private ITool[][] getBestMatches(ITool[] tools1, ITool[] tools2){ private ITool[][] getBestMatches(ITool[] tools1, ITool[] tools2){
HashSet set = new HashSet(Arrays.asList(tools2)); HashSet<ITool> set = new HashSet<ITool>(Arrays.asList(tools2));
List list = new ArrayList(tools1.length); List<ITool[]> list = new ArrayList<ITool[]>(tools1.length);
for(int i = 0; i < tools1.length; i++){ for(ITool tool1 : tools1){
ITool tool1 = tools1[i];
ITool bestMatchTool = null; ITool bestMatchTool = null;
int num = 0; int num = 0;
for(Iterator iter = set.iterator(); iter.hasNext();){ for(ITool tool2 : set){
ITool tool2 = (ITool)iter.next();
int extsNum = getConflictingInputExts(tool1, tool2).length; int extsNum = getConflictingInputExts(tool1, tool2).length;
if(extsNum > num){ if(extsNum > num){
bestMatchTool = tool2; bestMatchTool = tool2;

View file

@ -57,9 +57,8 @@ public class MultiConfiguration extends MultiItemsHolder implements
protected IConfiguration[] fCfgs = null; protected IConfiguration[] fCfgs = null;
private int curr = 0; private int curr = 0;
public MultiConfiguration(IConfiguration[] cfs, int mode) { public MultiConfiguration(IConfiguration[] cfs) {
fCfgs = cfs; fCfgs = cfs;
setStringListMode(mode);
for (int i=0; i<fCfgs.length; i++) for (int i=0; i<fCfgs.length; i++)
if (((Configuration)fCfgs[i]).getConfigurationDescription().isActive()) { if (((Configuration)fCfgs[i]).getConfigurationDescription().isActive()) {
curr = i; curr = i;
@ -67,8 +66,8 @@ public class MultiConfiguration extends MultiItemsHolder implements
} }
} }
public MultiConfiguration(ICConfigurationDescription[] cfds, int mode) { public MultiConfiguration(ICConfigurationDescription[] cfds) {
this(cfds2cfs(cfds),mode); this(cfds2cfs(cfds));
} }
public static IConfiguration[] cfds2cfs(ICConfigurationDescription[] cfgds) { public static IConfiguration[] cfds2cfs(ICConfigurationDescription[] cfgds) {

View file

@ -1,5 +1,5 @@
/******************************************************************************* /*******************************************************************************
* Copyright (c) 2007 Intel Corporation and others. * Copyright (c) 2007, 2008 Intel Corporation and others.
* All rights reserved. This program and the accompanying materials * All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0 * are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at * which accompanies this distribution, and is available at
@ -37,7 +37,6 @@ public class PropertyMultiCfgTab extends AbstractCPropertyTab {
private Button enable_multi; private Button enable_multi;
private Group dGrp; private Group dGrp;
private Group wGrp; private Group wGrp;
private Button d_0;
private Button d_1; private Button d_1;
private Button d_2; private Button d_2;
@ -78,8 +77,6 @@ public class PropertyMultiCfgTab extends AbstractCPropertyTab {
UIMessages.getString("PropertyMultiCfgTab.4") //$NON-NLS-1$ UIMessages.getString("PropertyMultiCfgTab.4") //$NON-NLS-1$
); );
l.setForeground(BLUE); l.setForeground(BLUE);
d_0 = new Button(dGrp, SWT.RADIO);
d_0.setText(UIMessages.getString("PropertyMultiCfgTab.5")); //$NON-NLS-1$
d_1 = new Button(dGrp, SWT.RADIO); d_1 = new Button(dGrp, SWT.RADIO);
d_1.setText(UIMessages.getString("PropertyMultiCfgTab.6")); //$NON-NLS-1$ d_1.setText(UIMessages.getString("PropertyMultiCfgTab.6")); //$NON-NLS-1$
d_2 = new Button(dGrp, SWT.RADIO); d_2 = new Button(dGrp, SWT.RADIO);
@ -106,7 +103,6 @@ public class PropertyMultiCfgTab extends AbstractCPropertyTab {
enable_multi.setSelection(CDTPrefUtil.getBool(CDTPrefUtil.KEY_MULTI)); enable_multi.setSelection(CDTPrefUtil.getBool(CDTPrefUtil.KEY_MULTI));
switch (CDTPrefUtil.getInt(CDTPrefUtil.KEY_DMODE)) { switch (CDTPrefUtil.getInt(CDTPrefUtil.KEY_DMODE)) {
case CDTPrefUtil.DMODE_EMPTY: d_0.setSelection(true); break;
case CDTPrefUtil.DMODE_CONJUNCTION: d_1.setSelection(true); break; case CDTPrefUtil.DMODE_CONJUNCTION: d_1.setSelection(true); break;
case CDTPrefUtil.DMODE_DISJUNCTION: d_2.setSelection(true); break; case CDTPrefUtil.DMODE_DISJUNCTION: d_2.setSelection(true); break;
default: d_1.setSelection(true); break; default: d_1.setSelection(true); break;
@ -124,9 +120,7 @@ public class PropertyMultiCfgTab extends AbstractCPropertyTab {
protected void performOK() { protected void performOK() {
CDTPrefUtil.setBool(CDTPrefUtil.KEY_MULTI, enable_multi.getSelection()); CDTPrefUtil.setBool(CDTPrefUtil.KEY_MULTI, enable_multi.getSelection());
int x = 0; int x = 0;
if (d_0.getSelection()) if (d_1.getSelection())
x = CDTPrefUtil.DMODE_EMPTY;
else if (d_1.getSelection())
x = CDTPrefUtil.DMODE_CONJUNCTION; x = CDTPrefUtil.DMODE_CONJUNCTION;
else if (d_2.getSelection()) else if (d_2.getSelection())
x = CDTPrefUtil.DMODE_DISJUNCTION; x = CDTPrefUtil.DMODE_DISJUNCTION;
@ -141,7 +135,6 @@ public class PropertyMultiCfgTab extends AbstractCPropertyTab {
protected void performDefaults() { protected void performDefaults() {
enable_multi.setSelection(false); enable_multi.setSelection(false);
d_0.setSelection(false);
d_1.setSelection(true); d_1.setSelection(true);
d_2.setSelection(false); d_2.setSelection(false);
w_0.setSelection(true); w_0.setSelection(true);
@ -150,7 +143,6 @@ public class PropertyMultiCfgTab extends AbstractCPropertyTab {
private void setStates() { private void setStates() {
boolean b = enable_multi.getSelection(); boolean b = enable_multi.getSelection();
d_0.setEnabled(b);
d_1.setEnabled(b); d_1.setEnabled(b);
d_2.setEnabled(b); d_2.setEnabled(b);
w_0.setEnabled(b); w_0.setEnabled(b);

View file

@ -49,7 +49,7 @@ public abstract class AbstractCBuildPropertyTab extends AbstractCPropertyTab {
public static IConfiguration getCfg(ICConfigurationDescription cfgd) { public static IConfiguration getCfg(ICConfigurationDescription cfgd) {
if (cfgd instanceof ICMultiConfigDescription) { if (cfgd instanceof ICMultiConfigDescription) {
ICConfigurationDescription[] cfds = (ICConfigurationDescription[])((ICMultiConfigDescription)cfgd).getItems(); ICConfigurationDescription[] cfds = (ICConfigurationDescription[])((ICMultiConfigDescription)cfgd).getItems();
return new MultiConfiguration(cfds, 9); return new MultiConfiguration(cfds);
} else } else
return ManagedBuildManager.getConfigurationForDescription(cfgd); return ManagedBuildManager.getConfigurationForDescription(cfgd);
} }

View file

@ -1,5 +1,5 @@
/******************************************************************************* /*******************************************************************************
* Copyright (c) 2005 - 2008 Intel Corporation and others. * Copyright (c) 2005, 2008 Intel Corporation and others.
* All rights reserved. This program and the accompanying materials * All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0 * are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at * which accompanies this distribution, and is available at
@ -33,6 +33,7 @@ import org.eclipse.cdt.internal.core.cdtvariables.StorableCdtVariables;
import org.eclipse.cdt.internal.core.cdtvariables.UserDefinedVariableSupplier; import org.eclipse.cdt.internal.core.cdtvariables.UserDefinedVariableSupplier;
import org.eclipse.cdt.ui.newui.AbstractCPropertyTab; import org.eclipse.cdt.ui.newui.AbstractCPropertyTab;
import org.eclipse.cdt.ui.newui.AbstractPage; import org.eclipse.cdt.ui.newui.AbstractPage;
import org.eclipse.cdt.ui.newui.CDTPrefUtil;
import org.eclipse.cdt.ui.newui.PrefPage_Abstract; import org.eclipse.cdt.ui.newui.PrefPage_Abstract;
import org.eclipse.cdt.ui.newui.UIMessages; import org.eclipse.cdt.ui.newui.UIMessages;
import org.eclipse.cdt.utils.cdtvariables.CdtVariableResolver; import org.eclipse.cdt.utils.cdtvariables.CdtVariableResolver;
@ -63,6 +64,8 @@ import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.swt.SWT; import org.eclipse.swt.SWT;
import org.eclipse.swt.events.KeyEvent; import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.KeyListener; import org.eclipse.swt.events.KeyListener;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Color;
@ -131,6 +134,7 @@ public class CPropertyVarsTab extends AbstractCPropertyTab {
private TableViewer tv; private TableViewer tv;
private Label fStatusLabel; private Label fStatusLabel;
private Label lb1, lb2;
private static final String[] fEditableTableColumnProps = new String[] { private static final String[] fEditableTableColumnProps = new String[] {
"editable name", //$NON-NLS-1$ "editable name", //$NON-NLS-1$
@ -246,80 +250,101 @@ public class CPropertyVarsTab extends AbstractCPropertyTab {
*/ */
public void buttonPressed(int index){ public void buttonPressed(int index){
switch(index){ switch(index){
case 0:{ case 0:
NewVarDialog dlg = new NewVarDialog(usercomp.getShell(), null, cfgd, getVariables()); handleAddButton();
if(dlg.open() == Dialog.OK){ break;
ICdtVariable macro = dlg.getDefinedMacro(); case 1:
if(canCreate(macro)) { handleEditButton();
break;
case 2:
handleDelButton();
break;
}
}
private void replaceMacros() {
if (!page.isMultiCfg() ||
cfgd == null ||
CDTPrefUtil.getInt(CDTPrefUtil.KEY_WMODE) != CDTPrefUtil.WMODE_REPLACE)
return;
ICdtVariable[] vars = getVariables();
for (int i=0; i<vars.length; i++)
if (!isUserVar(vars[i]))
vars[i] = null;
for (ICConfigurationDescription c : getCfs()) {
fUserSup.deleteAll(CONTEXT, c);
for (ICdtVariable macro : vars)
if (macro != null)
fUserSup.createMacro(macro, CONTEXT, c);
}
}
private ICConfigurationDescription[] getCfs() {
if (cfgd instanceof ICMultiItemsHolder)
return (ICConfigurationDescription[])
((ICMultiItemsHolder)cfgd).getItems();
else
return new ICConfigurationDescription[] {cfgd};
}
private void addOrEdit(ICdtVariable macro, boolean forAll) {
if( ! canCreate(macro))
return;
if (cfgd != null) {
if (forAll) {
for (ICConfigurationDescription c : page.getCfgsEditable())
fUserSup.createMacro(macro, CONTEXT, c);
} else {
if (page.isMultiCfg() && cfgd instanceof ICMultiItemsHolder) {
for (ICConfigurationDescription c : getCfs())
fUserSup.createMacro(macro, CONTEXT, c);
replaceMacros();
} else
fUserSup.createMacro(macro, CONTEXT, cfgd);
}
}
else if (vars != null)
vars.createMacro(macro);
updateData();
}
private void handleAddButton() {
NewVarDialog dlg = new NewVarDialog(usercomp.getShell(), null, cfgd, getVariables());
if(dlg.open() == Dialog.OK)
addOrEdit(dlg.getDefinedMacro(), dlg.isForAllCfgs);
}
private void handleEditButton() {
ICdtVariable _vars[] = getSelectedUserMacros();
if(_vars != null && _vars.length == 1){
NewVarDialog dlg = new NewVarDialog(usercomp.getShell() ,_vars[0], cfgd, getVariables());
if(dlg.open() == Dialog.OK)
addOrEdit(dlg.getDefinedMacro(), false);
}
}
private void handleDelButton() {
ICdtVariable macros[] = getSelectedUserMacros();
if(macros != null && macros.length > 0){
if(MessageDialog.openQuestion(usercomp.getShell(),
UIMessages.getString(DELETE_CONFIRM_TITLE),
UIMessages.getString(DELETE_CONFIRM_MESSAGE))){
for(int i = 0; i < macros.length; i++){
if (cfgd != null) { if (cfgd != null) {
if (dlg.isForAllCfgs) { if (page.isMultiCfg() && cfgd instanceof ICMultiItemsHolder) {
ICConfigurationDescription[] cfgs = page.getCfgsEditable(); ICConfigurationDescription[] cfs = (ICConfigurationDescription[])((ICMultiItemsHolder)cfgd).getItems();
for (int k=0; k<cfgs.length; k++) for (int k=0; k<cfs.length; k++)
fUserSup.createMacro(macro, CONTEXT, cfgs[k]); fUserSup.deleteMacro(macros[i].getName(), CONTEXT, cfs[k]);
} else { replaceMacros();
if (page.isMultiCfg() && cfgd instanceof ICMultiItemsHolder) {
ICConfigurationDescription[] cfs = (ICConfigurationDescription[])((ICMultiItemsHolder)cfgd).getItems();
for (int k=0; k<cfs.length; k++)
fUserSup.createMacro(macro, CONTEXT, cfs[k]);
} else
fUserSup.createMacro(macro, CONTEXT, cfgd);
} }
else
fUserSup.deleteMacro(macros[i].getName(), CONTEXT, cfgd);
} }
else if (vars != null) else if (vars != null)
vars.createMacro(macro); vars.deleteMacro(macros[i].getName());
updateData();
} }
updateData();
} }
} }
break;
case 1:{
ICdtVariable _vars[] = getSelectedUserMacros();
if(_vars != null && _vars.length == 1){
NewVarDialog dlg = new NewVarDialog(usercomp.getShell() ,_vars[0], cfgd, getVariables());
if(dlg.open() == Dialog.OK){
ICdtVariable macro = dlg.getDefinedMacro();
if(canCreate(macro)) {
if (cfgd != null) {
if (page.isMultiCfg() && cfgd instanceof ICMultiItemsHolder) {
ICConfigurationDescription[] cfs = (ICConfigurationDescription[])((ICMultiItemsHolder)cfgd).getItems();
for (int k=0; k<cfs.length; k++)
fUserSup.createMacro(macro, CONTEXT, cfs[k]);
} else
fUserSup.createMacro(macro, CONTEXT, cfgd);
}
else if (vars != null)
vars.createMacro(macro);
updateData();
}
}
}
}
break;
case 2:{
ICdtVariable macros[] = getSelectedUserMacros();
if(macros != null && macros.length > 0){
if(MessageDialog.openQuestion(usercomp.getShell(),
UIMessages.getString(DELETE_CONFIRM_TITLE),
UIMessages.getString(DELETE_CONFIRM_MESSAGE))){
for(int i = 0; i < macros.length; i++){
if (cfgd != null) {
if (page.isMultiCfg() && cfgd instanceof ICMultiItemsHolder) {
ICConfigurationDescription[] cfs = (ICConfigurationDescription[])((ICMultiItemsHolder)cfgd).getItems();
for (int k=0; k<cfs.length; k++)
fUserSup.deleteMacro(macros[i].getName(), CONTEXT, cfs[k]);
}
else
fUserSup.deleteMacro(macros[i].getName(), CONTEXT, cfgd);
}
else if (vars != null)
vars.deleteMacro(macros[i].getName());
}
updateData();
}
}
}
break;
}
} }
/* /*
@ -359,7 +384,7 @@ public class CPropertyVarsTab extends AbstractCPropertyTab {
public void createControls(Composite parent) { public void createControls(Composite parent) {
super.createControls(parent); super.createControls(parent);
initButtons(new String[] {ADD_STR, EDIT_STR, DEL_STR}); initButtons(new String[] {ADD_STR, EDIT_STR, DEL_STR});
usercomp.setLayout(new GridLayout(1, false)); usercomp.setLayout(new GridLayout(2, true));
createTableControl(); createTableControl();
// Create a "show parent levels" button // Create a "show parent levels" button
@ -374,13 +399,31 @@ public class CPropertyVarsTab extends AbstractCPropertyTab {
updateData(getResDesc()); updateData(getResDesc());
} }
}); });
// if (page.isForPrefs()) b.setVisible(false);
lb1 = new Label(usercomp, SWT.BORDER | SWT.CENTER);
lb1.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
lb1.setToolTipText(UIMessages.getString("EnvironmentTab.15")); //$NON-NLS-1$
lb1.addMouseListener(new MouseAdapter() {
public void mouseDoubleClick(MouseEvent e) {
CDTPrefUtil.spinDMode();
updateData();
}});
fStatusLabel = new Label(usercomp, SWT.LEFT); fStatusLabel = new Label(usercomp, SWT.LEFT);
fStatusLabel.setFont(usercomp.getFont()); fStatusLabel.setFont(usercomp.getFont());
fStatusLabel.setText(EMPTY_STR); fStatusLabel.setText(EMPTY_STR);
fStatusLabel.setLayoutData(new GridData(GridData.BEGINNING)); fStatusLabel.setLayoutData(new GridData(GridData.BEGINNING));
fStatusLabel.setForeground(JFaceResources.getColorRegistry().get(JFacePreferences.ERROR_COLOR)); fStatusLabel.setForeground(JFaceResources.getColorRegistry().get(JFacePreferences.ERROR_COLOR));
lb2 = new Label(usercomp, SWT.BORDER | SWT.CENTER);
lb2.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
lb2.setToolTipText(UIMessages.getString("EnvironmentTab.23")); //$NON-NLS-1$
lb2.addMouseListener(new MouseAdapter() {
public void mouseDoubleClick(MouseEvent e) {
CDTPrefUtil.spinWMode();
updateLbs(null, lb2);
}});
} }
private void createTableControl(){ private void createTableControl(){
@ -399,8 +442,7 @@ public class CPropertyVarsTab extends AbstractCPropertyTab {
table.setLayout(tableLayout); table.setLayout(tableLayout);
table.setHeaderVisible(true); table.setHeaderVisible(true);
table.setLinesVisible(true); table.setLinesVisible(true);
GridData gd = new GridData(GridData.FILL_BOTH);
tableViewer.getControl().setLayoutData(gd);
tableViewer.setContentProvider(new MacroContentProvider()); tableViewer.setContentProvider(new MacroContentProvider());
tableViewer.setLabelProvider(new MacroLabelProvider()); tableViewer.setLabelProvider(new MacroLabelProvider());
tableViewer.setSorter(new ViewerSorter()); tableViewer.setSorter(new ViewerSorter());
@ -426,9 +468,12 @@ public class CPropertyVarsTab extends AbstractCPropertyTab {
public void keyReleased(KeyEvent e){} public void keyReleased(KeyEvent e){}
}); });
table.setLayoutData(new GridData(GridData.FILL_BOTH)); GridData gd = new GridData(GridData.FILL_BOTH);
gd.horizontalSpan = 2;
table.setLayoutData(gd);
} }
/* /*
* answers whether the macro of a given name can be sreated * answers whether the macro of a given name can be sreated
*/ */
@ -479,7 +524,7 @@ public class CPropertyVarsTab extends AbstractCPropertyTab {
ICdtVariable[][] vs = new ICdtVariable[cfs.length][]; ICdtVariable[][] vs = new ICdtVariable[cfs.length][];
for (int i=0; i<cfs.length; i++) for (int i=0; i<cfs.length; i++)
vs[i] = vmgr.getVariables(cfs[i]); vs[i] = vmgr.getVariables(cfs[i]);
Object[] obs = mih.getListForDisplay(vs, comparator); Object[] obs = CDTPrefUtil.getListForDisplay(vs, comparator);
ICdtVariable[] v = new ICdtVariable[obs.length]; ICdtVariable[] v = new ICdtVariable[obs.length];
System.arraycopy(obs, 0, v, 0, obs.length); System.arraycopy(obs, 0, v, 0, obs.length);
return v; return v;
@ -494,6 +539,9 @@ public class CPropertyVarsTab extends AbstractCPropertyTab {
// get variables // get variables
ICdtVariable[] _vars = getVariables(); ICdtVariable[] _vars = getVariables();
if (_vars == null) return; if (_vars == null) return;
updateLbs(lb1, lb2);
if (cfgd == null) { if (cfgd == null) {
if (fShowSysMacros) { if (fShowSysMacros) {
List<ICdtVariable> lst = new ArrayList<ICdtVariable>(_vars.length); List<ICdtVariable> lst = new ArrayList<ICdtVariable>(_vars.length);
@ -586,7 +634,7 @@ public class CPropertyVarsTab extends AbstractCPropertyTab {
return value; return value;
} }
public void performApply(ICResourceDescription src, ICResourceDescription dst) { protected void performApply(ICResourceDescription src, ICResourceDescription dst) {
if (cfgd != null) {// only for project, not for prefs if (cfgd != null) {// only for project, not for prefs
if (page.isMultiCfg()) { if (page.isMultiCfg()) {
if (src instanceof ICMultiItemsHolder && if (src instanceof ICMultiItemsHolder &&

View file

@ -8,13 +8,11 @@
* Contributors: * Contributors:
* Intel Corporation - Initial API and implementation * Intel Corporation - Initial API and implementation
*******************************************************************************/ *******************************************************************************/
package org.eclipse.cdt.internal.core.settings.model; package org.eclipse.cdt.core.model;
import java.util.Arrays; import java.util.Arrays;
import java.util.Comparator;
import java.util.List; import java.util.List;
import org.eclipse.cdt.core.model.util.CDTListComparator;
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription; import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
import org.eclipse.cdt.core.settings.model.ICLanguageSetting; import org.eclipse.cdt.core.settings.model.ICLanguageSetting;
import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry; import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry;
@ -26,8 +24,6 @@ import org.eclipse.cdt.core.settings.model.MultiItemsHolder;
* Normally, they should have the same name. * Normally, they should have the same name.
*/ */
public class MultiLanguageSetting extends MultiItemsHolder implements ICLanguageSetting { public class MultiLanguageSetting extends MultiItemsHolder implements ICLanguageSetting {
private static final Comparator<Object> comp = CDTListComparator.getInstance();
ICLanguageSetting[] items = null; ICLanguageSetting[] items = null;
ICConfigurationDescription cfgd = null; ICConfigurationDescription cfgd = null;
@ -40,34 +36,18 @@ public class MultiLanguageSetting extends MultiItemsHolder implements ICLanguage
* @see org.eclipse.cdt.core.settings.model.ICLanguageSetting#getLanguageId() * @see org.eclipse.cdt.core.settings.model.ICLanguageSetting#getLanguageId()
*/ */
public String getLanguageId() { public String getLanguageId() {
System.out.println("Bad multi access: MultiLanguageSetting.getLanguageId()");
return null; // IDs are different. return null; // IDs are different.
} }
private ICLanguageSettingEntry[] conv2LSE(Object[] ob) {
ICLanguageSettingEntry[] se = new ICLanguageSettingEntry[ob.length];
System.arraycopy(ob, 0, se, 0, ob.length);
return se;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.settings.model.ICLanguageSetting#getResolvedSettingEntries(int)
*/
public ICLanguageSettingEntry[] getResolvedSettingEntries(int kind) {
ICLanguageSettingEntry[][] le = new ICLanguageSettingEntry[items.length][];
for (int i=0; i<items.length; i++)
le[i] = items[i].getResolvedSettingEntries(kind);
return conv2LSE(getListForDisplay(le, comp));
}
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.settings.model.ICLanguageSetting#getSettingEntries(int) * @see org.eclipse.cdt.core.settings.model.ICLanguageSetting#getSettingEntries(int)
*/ */
public ICLanguageSettingEntry[] getSettingEntries(int kind) { public ICLanguageSettingEntry[][] getSettingEntriesM(int kind) {
ICLanguageSettingEntry[][] le = new ICLanguageSettingEntry[items.length][]; ICLanguageSettingEntry[][] le = new ICLanguageSettingEntry[items.length][];
for (int i=0; i<items.length; i++) for (int i=0; i<items.length; i++)
le[i] = items[i].getSettingEntries(kind); le[i] = items[i].getSettingEntries(kind);
return conv2LSE(getListForDisplay(le, comp)); return le;
// return conv2LSE(getListForDisplay(le, comp));
} }
/* (non-Javadoc) /* (non-Javadoc)
@ -80,21 +60,21 @@ public class MultiLanguageSetting extends MultiItemsHolder implements ICLanguage
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.settings.model.ICLanguageSetting#getSourceContentTypeIds() * @see org.eclipse.cdt.core.settings.model.ICLanguageSetting#getSourceContentTypeIds()
*/ */
public String[] getSourceContentTypeIds() { public String[][] getSourceContentTypeIdsM() {
String[][] ss = new String[items.length][]; String[][] ss = new String[items.length][];
for (int i=0; i<items.length; i++) for (int i=0; i<items.length; i++)
ss[i] = items[i].getSourceContentTypeIds(); ss[i] = items[i].getSourceContentTypeIds();
return this.getStrListForDisplay(ss); return ss;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.settings.model.ICLanguageSetting#getSourceExtensions() * @see org.eclipse.cdt.core.settings.model.ICLanguageSetting#getSourceExtensions()
*/ */
public String[] getSourceExtensions() { public String[][] getSourceExtensionsM() {
String[][] ss = new String[items.length][]; String[][] ss = new String[items.length][];
for (int i=0; i<items.length; i++) for (int i=0; i<items.length; i++)
ss[i] = items[i].getSourceExtensions(); ss[i] = items[i].getSourceExtensions();
return this.getStrListForDisplay(ss); return ss;
} }
/* (non-Javadoc) /* (non-Javadoc)
@ -110,9 +90,7 @@ public class MultiLanguageSetting extends MultiItemsHolder implements ICLanguage
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.settings.model.ICLanguageSetting#setLanguageId(java.lang.String) * @see org.eclipse.cdt.core.settings.model.ICLanguageSetting#setLanguageId(java.lang.String)
*/ */
public void setLanguageId(String id) { // Do nothing public void setLanguageId(String id) {} // Do nothing
System.out.println("Bad multi access: MultiLanguageSetting.setLanguageId()");
}
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.settings.model.ICLanguageSetting#setSettingEntries(int, org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry[]) * @see org.eclipse.cdt.core.settings.model.ICLanguageSetting#setSettingEntries(int, org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry[])
@ -222,4 +200,21 @@ public class MultiLanguageSetting extends MultiItemsHolder implements ICLanguage
return items; return items;
} }
public ICLanguageSettingEntry[] getResolvedSettingEntries(int kind) {
return null;
}
public ICLanguageSettingEntry[] getSettingEntries(int kind) {
ICLanguageSettingEntry[][] ses = getSettingEntriesM(kind);
return ses[0];
}
public String[] getSourceContentTypeIds() {
return null;
}
public String[] getSourceExtensions() {
return null;
}
} }

View file

@ -1,5 +1,5 @@
/******************************************************************************* /*******************************************************************************
* Copyright (c) 2007 Intel Corporation and others. * Copyright (c) 2007, 2008 Intel Corporation and others.
* All rights reserved. This program and the accompanying materials * All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0 * are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at * which accompanies this distribution, and is available at
@ -219,7 +219,7 @@ public interface ICConfigurationDescription extends ICSettingContainer, ICSettin
* *
* @return * @return
*/ */
Map getReferenceInfo(); Map<String, String> getReferenceInfo();
/** /**
* sets the reference information for this configuration, i.e. the information on the projects/configurations * sets the reference information for this configuration, i.e. the information on the projects/configurations
@ -231,7 +231,7 @@ public interface ICConfigurationDescription extends ICSettingContainer, ICSettin
* @throws WriteAccessException when the configuration description is read-only * @throws WriteAccessException when the configuration description is read-only
* the description is read only if it was queried/returned by the {@link CoreModel#getProjectDescription(org.eclipse.core.resources.IProject, false)} call * the description is read only if it was queried/returned by the {@link CoreModel#getProjectDescription(org.eclipse.core.resources.IProject, false)} call
*/ */
void setReferenceInfo(Map refs) throws WriteAccessException; void setReferenceInfo(Map<String, String> refs) throws WriteAccessException;
/** /**
* returns an array of settings exported by this configuration * returns an array of settings exported by this configuration

View file

@ -1,5 +1,5 @@
/******************************************************************************* /*******************************************************************************
* Copyright (c) 2007 Intel Corporation and others. * Copyright (c) 2007, 2008 Intel Corporation and others.
* All rights reserved. This program and the accompanying materials * All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0 * are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at * which accompanies this distribution, and is available at
@ -11,6 +11,6 @@
package org.eclipse.cdt.core.settings.model; package org.eclipse.cdt.core.settings.model;
public interface ICMultiConfigDescription extends ICConfigurationDescription, ICMultiItemsHolder { public interface ICMultiConfigDescription extends ICConfigurationDescription, ICMultiItemsHolder {
String[] getErrorParserIDs(); String[][] getErrorParserIDs();
void setErrorParserIDs(String[] s); void setErrorParserIDs(String[] s);
} }

View file

@ -0,0 +1,17 @@
/*******************************************************************************
* Copyright (c) 2007, 2008 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.core.settings.model;
import java.util.Comparator;
public interface ICMultiFolderDescription extends ICFolderDescription {
public ICLanguageSetting[][] getLanguageSettingsM(Comparator<Object> comp);
}

View file

@ -1,5 +1,5 @@
/******************************************************************************* /*******************************************************************************
* Copyright (c) 2007 Intel Corporation and others. * Copyright (c) 2007, 2008 Intel Corporation and others.
* All rights reserved. This program and the accompanying materials * All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0 * are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at * which accompanies this distribution, and is available at
@ -10,7 +10,6 @@
*******************************************************************************/ *******************************************************************************/
package org.eclipse.cdt.core.settings.model; package org.eclipse.cdt.core.settings.model;
import java.util.Comparator;
/** /**
* Implementors of this interface are intended * Implementors of this interface are intended
@ -25,74 +24,11 @@ import java.util.Comparator;
* *
*/ */
public interface ICMultiItemsHolder { public interface ICMultiItemsHolder {
/*
* Constants for String list display mode
*/
// display conjunction of lists entries (common ones)
public static final int DMODE_CONJUNCTION = 1;
// display empty list if item's lists are different
public static final int DMODE_EMPTY = 2;
// display all items from all lists (except doubles)
public static final int DMODE_ALL = 4;
// display modes mask
public static final int DMODES = DMODE_CONJUNCTION | DMODE_EMPTY | DMODE_ALL;
/*
* Constants for string list apply mode
*/
// write to all items the list presented now.
public static final int WMODE_CURRENT = 8;
// apply to all items all insertions/deletions made
public static final int WMODE_DIFF = 16;
// write modes mask
public static final int WMODES = WMODE_CURRENT | WMODE_DIFF;
// default setting
public static final int MODE_DEFAULT = DMODE_CONJUNCTION | WMODE_CURRENT;
/*
* General purpose objects
*/
public static final String EMPTY_STR = ""; public static final String EMPTY_STR = "";
public static final Object[] EMPTY_ARRAY = new Object[0];
/** /**
* Returns array of items which it holds * Returns array of items which it holds
* @return * @return
*/ */
Object[] getItems(); Object[] getItems();
/**
* @see DMODE_CONJUNCTION
* @see DMODE_EMPTY
* @see DMODE_ALL
* @see WMODE_DIFF
* @see WMODE_CURRENT
* @return current string list mode (OR'ed display and write modes)
*/
int getStringListMode();
/**
* @see DMODE_CONJUNCTION
* @see DMODE_EMPTY
* @see DMODE_ALL
* @see WMODE_DIFF
* @see WMODE_CURRENT
*
* @param mode: OR'ed display and write modes
*/
void setStringListMode(int mode);
/*
* A set of methods which form an array of objects
* on a basis of 2-dim array and DISPLAY MODE
*/
String[] getStrListForDisplay(String[][] input);
String[] getStrListForDisplay(String[][] input, int mode);
// Object[] getListForDisplay(Object[][] input);
// Object[] getListForDisplay(Object[][] input, int mode);
Object[] getListForDisplay(Object[][] input, Comparator cmp);
// Object[] getListForDisplay(Object[][] input, int mode, Comparator cmp);
} }

View file

@ -1,5 +1,5 @@
/******************************************************************************* /*******************************************************************************
* Copyright (c) 2007 Intel Corporation and others. * Copyright (c) 2007, 2008 Intel Corporation and others.
* All rights reserved. This program and the accompanying materials * All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0 * are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at * which accompanies this distribution, and is available at
@ -10,12 +10,6 @@
*******************************************************************************/ *******************************************************************************/
package org.eclipse.cdt.core.settings.model; package org.eclipse.cdt.core.settings.model;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashSet;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.internal.core.settings.model.MultiConfigDescription; import org.eclipse.cdt.internal.core.settings.model.MultiConfigDescription;
/** /**
@ -23,126 +17,14 @@ import org.eclipse.cdt.internal.core.settings.model.MultiConfigDescription;
* *
*/ */
public abstract class MultiItemsHolder implements ICMultiItemsHolder { public abstract class MultiItemsHolder implements ICMultiItemsHolder {
protected int fListMode = MODE_DEFAULT;
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.settings.model.ICMultiItemsHolder#getItems() * @see org.eclipse.cdt.core.settings.model.ICMultiItemsHolder#getItems()
*/ */
public abstract Object[] getItems(); public abstract Object[] getItems();
/* (non-Javadoc)
* @see org.eclipse.cdt.core.settings.model.ICMultiItemsHolder#getStringListMode()
*/
public int getStringListMode() {
return fListMode;
}
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.settings.model.ICMultiItemsHolder#setStringListMode(int) * @see org.eclipse.cdt.core.settings.model.ICMultiItemsHolder#setStringListMode(int)
*/ */
public void setStringListMode(int mode) {
int a = mode & DMODES;
int b = mode & WMODES;
if (a == DMODES || b == WMODES) { // conflicting settings;
CCorePlugin.log("Wrong string list mode: " + mode);
return;
}
else if (a == 0) // display mode not set
mode |= (fListMode & DMODES); // use existing
else if (b == 0) // write mode not set
mode |= (fListMode & WMODES); // use existing
fListMode = mode & (DMODES | WMODES);
}
public final String[] getStrListForDisplay(String[][] input) {
return getStrListForDisplay(input, getStringListMode());
}
public final String[] getStrListForDisplay(String[][] input, int mode) {
Object[] ob = getListForDisplay(input, getStringListMode(), null);
String[] ss = new String[ob.length];
System.arraycopy(ob, 0, ss, 0, ob.length);
return ss;
}
public final Object[] getListForDisplay(Object[][] input, Comparator cmp) {
return getListForDisplay(input, getStringListMode(), cmp);
}
/**
* Utility method forms string list
* according to current list display mode
*
* @param input - array of string arrays
* @return
*/
private final Object[] getListForDisplay(Object[][] input, int mode, Comparator cmp) {
if (input == null || input.length == 0)
return EMPTY_ARRAY;
if (input.length == 1) {
return (input[0] == null) ?
EMPTY_ARRAY :
input[0];
}
Object[] s1 = input[0];
if (s1 == null ||
s1.length == 0)
return EMPTY_ARRAY;
if ((mode & DMODES) == DMODE_EMPTY) {
Arrays.sort(s1, cmp);
for (int i=1; i<input.length; i++) {
Object[] s2 = input[i];
if (s2 == null ||
s2.length == 0 ||
s1.length != s2.length)
return EMPTY_ARRAY;
Arrays.sort(s2, cmp);
if (! Arrays.equals(s1, s2))
return EMPTY_ARRAY;
}
return s1; // returns sorted strings !
}
else if ((getStringListMode() & DMODES) == DMODE_CONJUNCTION)
{
ArrayList lst = new ArrayList();
for (int i=0; i<s1.length; i++) {
if (s1[i] == null)
continue;
boolean found = true;
for (int k = 1; k<input.length; k++) {
Object[] s2 = input[k];
if (s2 == null || s2.length == 0)
return EMPTY_ARRAY;
if (i == 0)
Arrays.sort(s2, cmp);
if (Arrays.binarySearch(s2, s1[i], cmp) < 0) {
found = false;
break;
}
}
if (found) {
lst.add(s1[i]);
}
}
return lst.toArray();
}
else // DMODE_ALL
{
HashSet lst = new HashSet(); // set, to avoid doubles
for (int i=0; i<input.length; i++) {
if (input[i] == null ||
input[i].length == 0)
continue;
for (int j=0; j<input[i].length; j++)
lst.add(input[i][j]);
}
s1 = lst.toArray();
Arrays.sort(s1, cmp);
return s1;
}
}
/** /**
* This method is put here to prevent UI from * This method is put here to prevent UI from
* accessing constructors in "internal" dirs. * accessing constructors in "internal" dirs.
@ -162,12 +44,12 @@ public abstract class MultiItemsHolder implements ICMultiItemsHolder {
* *
* @return multiple cfg.description or single cfg.desc. * @return multiple cfg.description or single cfg.desc.
*/ */
public static ICConfigurationDescription createCDescription(ICConfigurationDescription[] rds, int mode) { public static ICConfigurationDescription createCDescription(ICConfigurationDescription[] rds) {
if (rds == null || rds.length == 0) if (rds == null || rds.length == 0)
return null; return null;
else if (rds.length == 1) else if (rds.length == 1)
return rds[0]; return rds[0];
else else
return new MultiConfigDescription(rds, mode); return new MultiConfigDescription(rds);
} }
} }

View file

@ -1,5 +1,5 @@
/******************************************************************************* /*******************************************************************************
* Copyright (c) 2007 Intel Corporation and others. * Copyright (c) 2007, 2008 Intel Corporation and others.
* All rights reserved. This program and the accompanying materials * All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0 * are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at * which accompanies this distribution, and is available at
@ -251,7 +251,7 @@ public class CConfigurationDescription extends CDataProxyContainer implements IC
public CDataObject[] getChildren() { public CDataObject[] getChildren() {
CConfigurationData data = getConfigurationData(false); CConfigurationData data = getConfigurationData(false);
List list = new ArrayList(); List<CDataObject> list = new ArrayList<CDataObject>();
CResourceData rcDatas[] = data.getResourceDatas(); CResourceData rcDatas[] = data.getResourceDatas();
for(int i = 0; i < rcDatas.length; i++){ for(int i = 0; i < rcDatas.length; i++){
list.add(rcDatas[i]); list.add(rcDatas[i]);
@ -261,7 +261,7 @@ public class CConfigurationDescription extends CDataProxyContainer implements IC
CBuildData buildData = data.getBuildData(); CBuildData buildData = data.getBuildData();
list.add(buildData); list.add(buildData);
// TODO add other data types // TODO add other data types
return (CDataObject[])list.toArray(new CDataObject[list.size()]); return list.toArray(new CDataObject[list.size()]);
} }
public boolean isStatic() { public boolean isStatic() {
@ -526,16 +526,16 @@ public class CConfigurationDescription extends CDataProxyContainer implements IC
// return des; // return des;
// } // }
public Map getReferenceInfo() { public Map<String, String> getReferenceInfo() {
try { try {
CConfigurationSpecSettings specs = getSpecSettings(); CConfigurationSpecSettings specs = getSpecSettings();
return specs.getReferenceInfo(); return specs.getReferenceInfo();
} catch (CoreException e) { } catch (CoreException e) {
} }
return new HashMap(0); return new HashMap<String, String>(0);
} }
public void setReferenceInfo(Map refs) { public void setReferenceInfo(Map<String, String> refs) {
try { try {
CConfigurationSpecSettings specs = getSpecSettings(); CConfigurationSpecSettings specs = getSpecSettings();
specs.setReferenceInfo(refs); specs.setReferenceInfo(refs);

View file

@ -1,5 +1,5 @@
/******************************************************************************* /*******************************************************************************
* Copyright (c) 2007 Intel Corporation and others. * Copyright (c) 2007, 2008 Intel Corporation and others.
* All rights reserved. This program and the accompanying materials * All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0 * are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at * which accompanies this distribution, and is available at
@ -67,7 +67,7 @@ public class CConfigurationSpecSettings implements ICSettingsStorage{
private StorableCdtVariables fMacros; private StorableCdtVariables fMacros;
private StorableEnvironment fEnvironment; private StorableEnvironment fEnvironment;
// private HashMap fRefInfoMap; // private HashMap fRefInfoMap;
private Map fRefMapCache; private Map<String, String> fRefMapCache;
private CExternalSettingsHolder fExtSettingsProvider = new CExternalSettingsHolder(); private CExternalSettingsHolder fExtSettingsProvider = new CExternalSettingsHolder();
private boolean fIsModified; private boolean fIsModified;
private HashMap fSessionPropertiesMap; private HashMap fSessionPropertiesMap;
@ -387,12 +387,12 @@ public class CConfigurationSpecSettings implements ICSettingsStorage{
fEnvironment = environment; fEnvironment = environment;
} }
public Map getReferenceInfo(){ public Map<String, String> getReferenceInfo(){
if(!fCfg.isReadOnly()) if(!fCfg.isReadOnly())
return CfgExportSettingContainerFactory.getReferenceMap(fCfg); return CfgExportSettingContainerFactory.getReferenceMap(fCfg);
if(fRefMapCache == null) if(fRefMapCache == null)
fRefMapCache = CfgExportSettingContainerFactory.getReferenceMap(fCfg); fRefMapCache = CfgExportSettingContainerFactory.getReferenceMap(fCfg);
return new HashMap(fRefMapCache); return new HashMap<String, String>(fRefMapCache);
// if(fRefInfoMap == null || fRefInfoMap.size() == 0) // if(fRefInfoMap == null || fRefInfoMap.size() == 0)
// return new HashMap(0); // return new HashMap(0);
// //
@ -420,7 +420,7 @@ public class CConfigurationSpecSettings implements ICSettingsStorage{
// fIsModified = true; // fIsModified = true;
// } // }
public void setReferenceInfo(Map ref){ public void setReferenceInfo(Map<String, String> ref){
fRefMapCache = null; fRefMapCache = null;
CfgExportSettingContainerFactory.setReferenceMap(fCfg, ref); CfgExportSettingContainerFactory.setReferenceMap(fCfg, ref);
// if(isReadOnly()) // if(isReadOnly())

View file

@ -1,5 +1,5 @@
/******************************************************************************* /*******************************************************************************
* Copyright (c) 2007 Intel Corporation and others. * Copyright (c) 2007, 2008 Intel Corporation and others.
* All rights reserved. This program and the accompanying materials * All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0 * are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at * which accompanies this distribution, and is available at
@ -114,9 +114,9 @@ public class CfgExportSettingContainerFactory extends
return new CContainerRef(FACTORY_ID, createId(projName, cfgId)); return new CContainerRef(FACTORY_ID, createId(projName, cfgId));
} }
public static Map getReferenceMap(ICConfigurationDescription cfg){ public static Map<String, String> getReferenceMap(ICConfigurationDescription cfg){
CContainerRef[] refs = CExternalSettingsManager.getInstance().getReferences(cfg, FACTORY_ID); CContainerRef[] refs = CExternalSettingsManager.getInstance().getReferences(cfg, FACTORY_ID);
Map map = new HashMap(); Map<String, String> map = new HashMap<String, String>();
for(int i = 0; i < refs.length; i++){ for(int i = 0; i < refs.length; i++){
try { try {
String[] r = parseId(refs[i].getContainerId()); String[] r = parseId(refs[i].getContainerId());
@ -129,24 +129,24 @@ public class CfgExportSettingContainerFactory extends
return map; return map;
} }
public static void setReferenceMap(ICConfigurationDescription cfg, Map map){ public static void setReferenceMap(ICConfigurationDescription cfg, Map<String, String> map){
Map cur = getReferenceMap(cfg); Map<String, String> cur = getReferenceMap(cfg);
Map newCopy = new HashMap(map); Map<String, String> newCopy = new HashMap<String, String>(map);
for(Iterator iter = cur.entrySet().iterator(); iter.hasNext();){ for(Iterator<Map.Entry<String, String>> iter = cur.entrySet().iterator(); iter.hasNext();){
Map.Entry entry = (Map.Entry)iter.next(); Map.Entry<String, String> entry = (Map.Entry<String, String>)iter.next();
Object projName = entry.getKey(); Object projName = entry.getKey();
if(newCopy.containsKey(projName) && entry.getValue().equals(newCopy.get(projName))){ if(newCopy.containsKey(projName) && entry.getValue().equals(newCopy.get(projName))){
iter.remove(); iter.remove();
newCopy.remove(projName); newCopy.remove(projName);
} }
} }
for(Iterator iter = cur.entrySet().iterator(); iter.hasNext();){ for(Iterator<Map.Entry<String, String>> iter = cur.entrySet().iterator(); iter.hasNext();){
Map.Entry entry = (Map.Entry)iter.next(); Map.Entry<String, String> entry = (Map.Entry<String, String>)iter.next();
removeReference(cfg, (String)entry.getKey(), (String)entry.getValue()); removeReference(cfg, (String)entry.getKey(), (String)entry.getValue());
} }
for(Iterator iter = newCopy.entrySet().iterator(); iter.hasNext();){ for(Iterator<Map.Entry<String, String>> iter = newCopy.entrySet().iterator(); iter.hasNext();){
Map.Entry entry = (Map.Entry)iter.next(); Map.Entry<String, String> entry = (Map.Entry<String, String>)iter.next();
createReference(cfg, (String)entry.getKey(), (String)entry.getValue()); createReference(cfg, (String)entry.getKey(), (String)entry.getValue());
} }
} }
@ -215,7 +215,7 @@ public class CfgExportSettingContainerFactory extends
return new String[0]; return new String[0];
int deltaKind = delta.getDeltaKind(); int deltaKind = delta.getDeltaKind();
List cfgIds = new ArrayList(); List<String> cfgIds = new ArrayList<String>();
switch(deltaKind){ switch(deltaKind){
case ICDescriptionDelta.ADDED: case ICDescriptionDelta.ADDED:
case ICDescriptionDelta.REMOVED: case ICDescriptionDelta.REMOVED:
@ -247,9 +247,9 @@ public class CfgExportSettingContainerFactory extends
return ids; return ids;
} }
public Collection collectCfgIds(ICDescriptionDelta[] deltas, Collection c){ public Collection<String> collectCfgIds(ICDescriptionDelta[] deltas, Collection<String> c){
if(c == null) if(c == null)
c = new ArrayList(); c = new ArrayList<String>();
for(int i = 0; i < deltas.length; i++){ for(int i = 0; i < deltas.length; i++){
ICDescriptionDelta delta = deltas[i]; ICDescriptionDelta delta = deltas[i];
int deltaKind = delta.getDeltaKind(); int deltaKind = delta.getDeltaKind();

View file

@ -26,7 +26,6 @@ import org.eclipse.cdt.core.settings.model.ICFileDescription;
import org.eclipse.cdt.core.settings.model.ICFolderDescription; import org.eclipse.cdt.core.settings.model.ICFolderDescription;
import org.eclipse.cdt.core.settings.model.ICLanguageSetting; import org.eclipse.cdt.core.settings.model.ICLanguageSetting;
import org.eclipse.cdt.core.settings.model.ICMultiConfigDescription; import org.eclipse.cdt.core.settings.model.ICMultiConfigDescription;
import org.eclipse.cdt.core.settings.model.ICMultiItemsHolder;
import org.eclipse.cdt.core.settings.model.ICProjectDescription; import org.eclipse.cdt.core.settings.model.ICProjectDescription;
import org.eclipse.cdt.core.settings.model.ICResourceDescription; import org.eclipse.cdt.core.settings.model.ICResourceDescription;
import org.eclipse.cdt.core.settings.model.ICSettingContainer; import org.eclipse.cdt.core.settings.model.ICSettingContainer;
@ -50,9 +49,8 @@ public class MultiConfigDescription extends MultiItemsHolder implements
ICConfigurationDescription[] fCfgs = null; ICConfigurationDescription[] fCfgs = null;
public MultiConfigDescription(ICConfigurationDescription[] des, int mode) { public MultiConfigDescription(ICConfigurationDescription[] des) {
fCfgs = des; fCfgs = des;
setStringListMode(mode);
} }
/* (non-Javadoc) /* (non-Javadoc)
@ -116,11 +114,11 @@ public class MultiConfigDescription extends MultiItemsHolder implements
return null; return null;
} }
public String[] getErrorParserIDs() { public String[][] getErrorParserIDs() {
String[][] out = new String[fCfgs.length][]; String[][] out = new String[fCfgs.length][];
for (int i=0; i<fCfgs.length; i++) for (int i=0; i<fCfgs.length; i++)
out[i] = fCfgs[i].getBuildSetting().getErrorParserIDs(); out[i] = fCfgs[i].getBuildSetting().getErrorParserIDs();
return getStrListForDisplay(out, ICMultiItemsHolder.DMODE_CONJUNCTION); return out;
} }
public void setErrorParserIDs(String[] ids) { public void setErrorParserIDs(String[] ids) {
@ -174,7 +172,6 @@ public class MultiConfigDescription extends MultiItemsHolder implements
* @see org.eclipse.cdt.core.settings.model.ICConfigurationDescription#getExternalSettings() * @see org.eclipse.cdt.core.settings.model.ICConfigurationDescription#getExternalSettings()
*/ */
public ICExternalSetting[] getExternalSettings() { public ICExternalSetting[] getExternalSettings() {
System.out.println("Bad multi access: MultiConfigDescription.getExtSettings()");
return null; return null;
} }
@ -231,9 +228,9 @@ public class MultiConfigDescription extends MultiItemsHolder implements
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.settings.model.ICConfigurationDescription#getReferenceInfo() * @see org.eclipse.cdt.core.settings.model.ICConfigurationDescription#getReferenceInfo()
*/ */
public Map getReferenceInfo() { public Map<String, String> getReferenceInfo() {
System.out.println("Bad multi access: MultiConfigDescription.getReferenceInfo()"); System.out.println("Bad multi access: MultiConfigDescription.getReferenceInfo()");
return Collections.EMPTY_MAP; return Collections.emptyMap();
} }
/* (non-Javadoc) /* (non-Javadoc)
@ -268,12 +265,10 @@ public class MultiConfigDescription extends MultiItemsHolder implements
return (ICResourceDescription)lst.get(0); return (ICResourceDescription)lst.get(0);
if (isForFolder) if (isForFolder)
return new MultiFolderDescription( return new MultiFolderDescription(
(ICFolderDescription[])lst.toArray(new ICFolderDescription[lst.size()]), (ICFolderDescription[])lst.toArray(new ICFolderDescription[lst.size()]));
getStringListMode());
else else
return new MultiFileDescription( return new MultiFileDescription(
(ICFileDescription[])lst.toArray(new ICFileDescription[lst.size()]), (ICFileDescription[])lst.toArray(new ICFileDescription[lst.size()]));
getStringListMode());
} }
/* (non-Javadoc) /* (non-Javadoc)
@ -293,7 +288,7 @@ public class MultiConfigDescription extends MultiItemsHolder implements
ICFolderDescription[] rds = new ICFolderDescription[fCfgs.length]; ICFolderDescription[] rds = new ICFolderDescription[fCfgs.length];
for (int i=0; i<fCfgs.length; i++) for (int i=0; i<fCfgs.length; i++)
rds[i] = fCfgs[i].getRootFolderDescription(); rds[i] = fCfgs[i].getRootFolderDescription();
return new MultiFolderDescription(rds, getStringListMode()); return new MultiFolderDescription(rds);
} }
/* (non-Javadoc) /* (non-Javadoc)
@ -431,7 +426,7 @@ public class MultiConfigDescription extends MultiItemsHolder implements
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.settings.model.ICConfigurationDescription#setReferenceInfo(java.util.Map) * @see org.eclipse.cdt.core.settings.model.ICConfigurationDescription#setReferenceInfo(java.util.Map)
*/ */
public void setReferenceInfo(Map refs) throws WriteAccessException { public void setReferenceInfo(Map<String, String> refs) throws WriteAccessException {
for (int i=0; i<fCfgs.length; i++) for (int i=0; i<fCfgs.length; i++)
fCfgs[i].setReferenceInfo(refs); fCfgs[i].setReferenceInfo(refs);
} }

View file

@ -21,8 +21,8 @@ import org.eclipse.cdt.core.settings.model.ICLanguageSetting;
public class MultiFileDescription extends MultiResourceDescription implements public class MultiFileDescription extends MultiResourceDescription implements
ICFileDescription { ICFileDescription {
public MultiFileDescription(ICFileDescription[] res, int mode) { public MultiFileDescription(ICFileDescription[] res) {
super(res, mode); super(res);
} }
/* (non-Javadoc) /* (non-Javadoc)

View file

@ -10,13 +10,12 @@
*******************************************************************************/ *******************************************************************************/
package org.eclipse.cdt.internal.core.settings.model; package org.eclipse.cdt.internal.core.settings.model;
import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Comparator; import java.util.Comparator;
import org.eclipse.cdt.core.model.util.CDTListComparator;
import org.eclipse.cdt.core.settings.model.ICFolderDescription; import org.eclipse.cdt.core.settings.model.ICFolderDescription;
import org.eclipse.cdt.core.settings.model.ICLanguageSetting; import org.eclipse.cdt.core.settings.model.ICLanguageSetting;
import org.eclipse.cdt.core.settings.model.ICMultiFolderDescription;
import org.eclipse.cdt.core.settings.model.ICResourceDescription; import org.eclipse.cdt.core.settings.model.ICResourceDescription;
import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IPath;
@ -26,13 +25,10 @@ import org.eclipse.core.runtime.IPath;
* *
*/ */
public class MultiFolderDescription extends MultiResourceDescription implements public class MultiFolderDescription extends MultiResourceDescription implements
ICFolderDescription { ICMultiFolderDescription {
private static final Comparator<Object> comp = CDTListComparator.getInstance(); public MultiFolderDescription(ICFolderDescription[] res) {
private ICLanguageSetting[] lsets = null; super(res);
public MultiFolderDescription(ICFolderDescription[] res, int mode) {
super(res, mode);
} }
/* (non-Javadoc) /* (non-Javadoc)
@ -70,19 +66,10 @@ public class MultiFolderDescription extends MultiResourceDescription implements
return ls0; return ls0;
} }
private ICLanguageSetting[] conv2LS(Object[] ob) {
ICLanguageSetting[] se = new ICLanguageSetting[ob.length];
System.arraycopy(ob, 0, se, 0, ob.length);
return se;
}
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.settings.model.ICFolderDescription#getLanguageSettings() * @see org.eclipse.cdt.core.settings.model.ICFolderDescription#getLanguageSettings()
*/ */
public ICLanguageSetting[] getLanguageSettings() { public ICLanguageSetting[][] getLanguageSettingsM(Comparator<Object> comp) {
if (lsets != null)
return lsets;
ICLanguageSetting[][] ls = new ICLanguageSetting[fRess.length][]; ICLanguageSetting[][] ls = new ICLanguageSetting[fRess.length][];
for (int i=0; i<fRess.length; i++) { for (int i=0; i<fRess.length; i++) {
if (fRess[i] instanceof ICFolderDescription) { if (fRess[i] instanceof ICFolderDescription) {
@ -90,21 +77,7 @@ public class MultiFolderDescription extends MultiResourceDescription implements
Arrays.sort(ls[i], comp); Arrays.sort(ls[i], comp);
} }
} }
ICLanguageSetting[] fs = conv2LS(getListForDisplay(ls, comp)); return ls;
lsets = new ICLanguageSetting[fs.length];
for (int i=0; i<fs.length; i++) {
ArrayList<ICLanguageSetting> list = new ArrayList<ICLanguageSetting>(fRess.length);
for (int j=0; j<ls.length; j++) {
int x = Arrays.binarySearch(ls[j], fs[i], comp);
if (x >= 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) /* (non-Javadoc)
@ -137,9 +110,13 @@ public class MultiFolderDescription extends MultiResourceDescription implements
*/ */
public boolean isRoot() { public boolean isRoot() {
for (int i=0; i<fRess.length; i++) for (int i=0; i<fRess.length; i++)
if (! ((ICFolderDescription)fRess[0]).isRoot()) if (! ((ICFolderDescription)fRess[i]).isRoot())
return false; return false;
return true; return true;
} }
public ICLanguageSetting[] getLanguageSettings() {
return ((ICFolderDescription)fRess[0]).getLanguageSettings();
}
} }

View file

@ -31,9 +31,8 @@ public abstract class MultiResourceDescription extends MultiItemsHolder implemen
ICResourceDescription[] fRess = null; ICResourceDescription[] fRess = null;
ICConfigurationDescription fCfg = null; ICConfigurationDescription fCfg = null;
public MultiResourceDescription(ICResourceDescription[] res, int mode) { public MultiResourceDescription(ICResourceDescription[] res) {
fRess = res; fRess = res;
setStringListMode(mode);
} }
/* (non-Javadoc) /* (non-Javadoc)
@ -115,7 +114,7 @@ public abstract class MultiResourceDescription extends MultiItemsHolder implemen
ICConfigurationDescription[] cfgs = new ICConfigurationDescription[fRess.length]; ICConfigurationDescription[] cfgs = new ICConfigurationDescription[fRess.length];
for (int i=0; i<fRess.length; i++) for (int i=0; i<fRess.length; i++)
cfgs[i] = fRess[i].getConfiguration(); cfgs[i] = fRess[i].getConfiguration();
fCfg = new MultiConfigDescription(cfgs, getStringListMode()); fCfg = new MultiConfigDescription(cfgs);
} }
return fCfg; return fCfg;
} }

View file

@ -1,5 +1,5 @@
/******************************************************************************* /*******************************************************************************
* Copyright (c) 2007 Intel Corporation and others. * Copyright (c) 2007, 2008 Intel Corporation and others.
* All rights reserved. This program and the accompanying materials * All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0 * are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at * which accompanies this distribution, and is available at
@ -27,6 +27,12 @@ public interface IContributedEnvironment {
String delimiter, String delimiter,
ICConfigurationDescription des); ICConfigurationDescription des);
IEnvironmentVariable addVariable(IEnvironmentVariable var,
ICConfigurationDescription des);
void addVariables(IEnvironmentVariable[] vars,
ICConfigurationDescription des);
IEnvironmentVariable removeVariable(String name, ICConfigurationDescription des); IEnvironmentVariable removeVariable(String name, ICConfigurationDescription des);
void restoreDefaults(ICConfigurationDescription des); void restoreDefaults(ICConfigurationDescription des);

View file

@ -1,5 +1,5 @@
/******************************************************************************* /*******************************************************************************
* Copyright (c) 2007 Intel Corporation and others. * Copyright (c) 2007, 2008 Intel Corporation and others.
* All rights reserved. This program and the accompanying materials * All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0 * are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at * which accompanies this distribution, and is available at
@ -27,11 +27,6 @@ public class ContributedEnvironment implements IContributedEnvironment{
private IEnvironmentContextInfo fBaseInfo; private IEnvironmentContextInfo fBaseInfo;
private ICoreEnvironmentVariableSupplier fSuppliers[]; private ICoreEnvironmentVariableSupplier fSuppliers[];
/* public ContributedEnvContextInfo(Object context,
ICoreEnvironmentVariableSupplier[] suppliers) {
super(context, suppliers);
}
*/
public ContributedEnvContextInfo(IEnvironmentContextInfo info) { public ContributedEnvContextInfo(IEnvironmentContextInfo info) {
super(info.getContext()); super(info.getContext());
fBaseInfo = info; fBaseInfo = info;
@ -77,7 +72,7 @@ public class ContributedEnvironment implements IContributedEnvironment{
EnvVarCollector cr = EnvironmentVariableManager.getVariables(getContextInfo(des), true); EnvVarCollector cr = EnvironmentVariableManager.getVariables(getContextInfo(des), true);
if(cr != null){ if(cr != null){
EnvVarDescriptor collected[] = cr.toArray(true); EnvVarDescriptor collected[] = cr.toArray(true);
List vars = new ArrayList(collected.length); List<IEnvironmentVariable> vars = new ArrayList<IEnvironmentVariable>(collected.length);
IEnvironmentVariable var; IEnvironmentVariable var;
IEnvironmentContextInfo info = new DefaultEnvironmentContextInfo(des);//getContextInfo(des); IEnvironmentContextInfo info = new DefaultEnvironmentContextInfo(des);//getContextInfo(des);
for(int i = 0; i < collected.length; i++){ for(int i = 0; i < collected.length; i++){
@ -86,7 +81,7 @@ public class ContributedEnvironment implements IContributedEnvironment{
if(var != null) if(var != null)
vars.add(var); vars.add(var);
} }
return (EnvVarDescriptor[])vars.toArray(new EnvVarDescriptor[vars.size()]); return vars.toArray(new EnvVarDescriptor[vars.size()]);
} }
return new EnvVarDescriptor[0]; return new EnvVarDescriptor[0];
} }
@ -118,6 +113,21 @@ public class ContributedEnvironment implements IContributedEnvironment{
EnvironmentVariableManager.fUserSupplier); EnvironmentVariableManager.fUserSupplier);
} }
public void addVariables(IEnvironmentVariable[] vars,
ICConfigurationDescription des) {
for (IEnvironmentVariable v : vars)
addVariable(v, des);
}
public IEnvironmentVariable addVariable(IEnvironmentVariable var,
ICConfigurationDescription des) {
return addVariable(var.getName(),
var.getValue(),
var.getOperation(),
var.getDelimiter(),
des);
}
public IEnvironmentVariable removeVariable(String name, ICConfigurationDescription des){ public IEnvironmentVariable removeVariable(String name, ICConfigurationDescription des){
return EnvironmentVariableManager.fUserSupplier.deleteVariable(name, des); return EnvironmentVariableManager.fUserSupplier.deleteVariable(name, des);
} }

View file

@ -632,4 +632,28 @@ public abstract class AbstractCPropertyTab implements ICPropertyTab {
protected void setBackgroundText(String s) { protected void setBackgroundText(String s) {
background.setText(s == null ? BACKGROUND_TEXT_DEFAULT : s); background.setText(s == null ? BACKGROUND_TEXT_DEFAULT : s);
} }
protected void updateLbs(Label lb1, Label lb2) {
if (page.isMultiCfg()) {
if (lb1 != null) {
lb1.setText(CDTPrefUtil.getDMode());
lb1.setVisible(true);
}
if (lb2 != null) {
lb2.setText(CDTPrefUtil.getWMode());
lb2.setVisible(true);
}
} else {
if (lb1 != null)
lb1.setVisible(false);
if (lb2 != null)
lb2.setVisible(false);
}
}
protected boolean isWModifyMode() {
int wmode = CDTPrefUtil.getInt(CDTPrefUtil.KEY_WMODE);
return (wmode == CDTPrefUtil.WMODE_MODIFY);
}
} }

View file

@ -13,6 +13,7 @@ package org.eclipse.cdt.ui.newui;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Comparator;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
@ -27,6 +28,8 @@ import org.eclipse.swt.SWT;
import org.eclipse.swt.accessibility.AccessibleAdapter; import org.eclipse.swt.accessibility.AccessibleAdapter;
import org.eclipse.swt.accessibility.AccessibleEvent; import org.eclipse.swt.accessibility.AccessibleEvent;
import org.eclipse.swt.custom.SashForm; import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.PaintEvent; import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener; import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionAdapter;
@ -39,6 +42,7 @@ import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.Tree;
@ -47,6 +51,7 @@ import org.eclipse.swt.widgets.TreeItem;
import org.eclipse.cdt.core.model.ILanguageDescriptor; import org.eclipse.cdt.core.model.ILanguageDescriptor;
import org.eclipse.cdt.core.model.LanguageManager; import org.eclipse.cdt.core.model.LanguageManager;
import org.eclipse.cdt.core.model.MultiLanguageSetting;
import org.eclipse.cdt.core.model.util.CDTListComparator; import org.eclipse.cdt.core.model.util.CDTListComparator;
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription; import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
import org.eclipse.cdt.core.settings.model.ICExternalSetting; import org.eclipse.cdt.core.settings.model.ICExternalSetting;
@ -54,6 +59,7 @@ import org.eclipse.cdt.core.settings.model.ICFileDescription;
import org.eclipse.cdt.core.settings.model.ICFolderDescription; import org.eclipse.cdt.core.settings.model.ICFolderDescription;
import org.eclipse.cdt.core.settings.model.ICLanguageSetting; import org.eclipse.cdt.core.settings.model.ICLanguageSetting;
import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry; import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry;
import org.eclipse.cdt.core.settings.model.ICMultiFolderDescription;
import org.eclipse.cdt.core.settings.model.ICMultiResourceDescription; import org.eclipse.cdt.core.settings.model.ICMultiResourceDescription;
import org.eclipse.cdt.core.settings.model.ICResourceDescription; import org.eclipse.cdt.core.settings.model.ICResourceDescription;
import org.eclipse.cdt.core.settings.model.ICSettingBase; import org.eclipse.cdt.core.settings.model.ICSettingBase;
@ -69,6 +75,7 @@ public abstract class AbstractLangsListTab extends AbstractCPropertyTab {
protected Button showBIButton; protected Button showBIButton;
protected boolean toAllCfgs = false; protected boolean toAllCfgs = false;
protected boolean toAllLang = false; protected boolean toAllLang = false;
protected Label lb1, lb2;
protected ICLanguageSetting lang; protected ICLanguageSetting lang;
protected LinkedList<ICLanguageSettingEntry> incs; protected LinkedList<ICLanguageSettingEntry> incs;
@ -81,6 +88,8 @@ public abstract class AbstractLangsListTab extends AbstractCPropertyTab {
protected final static String[] BUTTSYM = {ADD_STR, EDIT_STR, DEL_STR, protected final static String[] BUTTSYM = {ADD_STR, EDIT_STR, DEL_STR,
UIMessages.getString("AbstractLangsListTab.2")}; //$NON-NLS-1$ UIMessages.getString("AbstractLangsListTab.2")}; //$NON-NLS-1$
private static final Comparator<Object> comp = CDTListComparator.getInstance();
private final static Image IMG_FS = CPluginImages.get(CPluginImages.IMG_FILESYSTEM); private final static Image IMG_FS = CPluginImages.get(CPluginImages.IMG_FILESYSTEM);
private final static Image IMG_WS = CPluginImages.get(CPluginImages.IMG_WORKSPACE); private final static Image IMG_WS = CPluginImages.get(CPluginImages.IMG_WORKSPACE);
private final static Image IMG_MK = CPluginImages.get(CPluginImages.IMG_OBJS_MACRO); private final static Image IMG_MK = CPluginImages.get(CPluginImages.IMG_OBJS_MACRO);
@ -88,12 +97,14 @@ public abstract class AbstractLangsListTab extends AbstractCPropertyTab {
public void createControls(Composite parent) { public void createControls(Composite parent) {
super.createControls(parent); super.createControls(parent);
usercomp.setLayout(new GridLayout(1, false)); usercomp.setLayout(new GridLayout(2, true));
// Create the sash form // Create the sash form
sashForm = new SashForm(usercomp, SWT.NONE); sashForm = new SashForm(usercomp, SWT.NONE);
sashForm.setOrientation(SWT.HORIZONTAL); sashForm.setOrientation(SWT.HORIZONTAL);
sashForm.setLayoutData(new GridData(GridData.FILL_BOTH)); GridData gd = new GridData(GridData.FILL_BOTH);
gd.horizontalSpan = 2;
sashForm.setLayoutData(gd);
GridLayout layout = new GridLayout(); GridLayout layout = new GridLayout();
layout.numColumns = 2; layout.numColumns = 2;
@ -102,7 +113,7 @@ public abstract class AbstractLangsListTab extends AbstractCPropertyTab {
addTree(sashForm).setLayoutData(new GridData(GridData.FILL_VERTICAL)); addTree(sashForm).setLayoutData(new GridData(GridData.FILL_VERTICAL));
table = new Table(sashForm, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL | SWT.FULL_SELECTION); table = new Table(sashForm, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL | SWT.FULL_SELECTION);
GridData gd = new GridData(GridData.FILL_BOTH); gd = new GridData(GridData.FILL_BOTH);
gd.widthHint = 255; gd.widthHint = 255;
table.setLayoutData(gd); table.setLayoutData(gd);
table.setHeaderVisible(true); table.setHeaderVisible(true);
@ -153,12 +164,32 @@ public abstract class AbstractLangsListTab extends AbstractCPropertyTab {
} }
}); });
setupLabel(usercomp, EMPTY_STR, 1, 0); setupLabel(usercomp, EMPTY_STR, 1, 0);
lb1 = new Label(usercomp, SWT.BORDER | SWT.CENTER);
lb1.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
lb1.setToolTipText(UIMessages.getString("EnvironmentTab.15")); //$NON-NLS-1$
lb1.addMouseListener(new MouseAdapter() {
public void mouseDoubleClick(MouseEvent e) {
CDTPrefUtil.spinDMode();
update();
}});
showBIButton = setupCheck(usercomp, UIMessages.getString("AbstractLangsListTab.0"), 1, GridData.FILL_HORIZONTAL); //$NON-NLS-1$ showBIButton = setupCheck(usercomp, UIMessages.getString("AbstractLangsListTab.0"), 1, GridData.FILL_HORIZONTAL); //$NON-NLS-1$
showBIButton.addSelectionListener(new SelectionAdapter() { showBIButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) { public void widgetSelected(SelectionEvent e) {
update(); update();
} }
}); });
lb2 = new Label(usercomp, SWT.BORDER | SWT.CENTER);
lb2.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
lb2.setToolTipText(UIMessages.getString("EnvironmentTab.23")); //$NON-NLS-1$
lb2.addMouseListener(new MouseAdapter() {
public void mouseDoubleClick(MouseEvent e) {
CDTPrefUtil.spinWMode();
updateLbs(null, lb2);
}});
additionalTableSet(); additionalTableSet();
initButtons((getKind() == ICSettingEntry.MACRO) ? BUTTSYM : BUTTONS); initButtons((getKind() == ICSettingEntry.MACRO) ? BUTTSYM : BUTTONS);
updateData(getResDesc()); updateData(getResDesc());
@ -195,10 +226,10 @@ public abstract class AbstractLangsListTab extends AbstractCPropertyTab {
buttonSetEnabled(0, canAdd); // add buttonSetEnabled(0, canAdd); // add
buttonSetEnabled(1, canEdit); // edit buttonSetEnabled(1, canEdit); // edit
buttonSetEnabled(2, canDelete); // delete buttonSetEnabled(2, canDelete); // delete
buttonSetEnabled(3, canExport); // export buttonSetEnabled(3, canExport && !page.isMultiCfg()); // export
// there is a separator instead of button #4 // there is a separator instead of button #4
buttonSetEnabled(5, canMoveUp); // up buttonSetEnabled(5, canMoveUp && !page.isMultiCfg()); // up
buttonSetEnabled(6, canMoveDown); // down buttonSetEnabled(6, canMoveDown && !page.isMultiCfg()); // down
} }
private Tree addTree(Composite comp) { private Tree addTree(Composite comp) {
@ -260,28 +291,34 @@ public abstract class AbstractLangsListTab extends AbstractCPropertyTab {
if (x == -1) x = 0; if (x == -1) x = 0;
else x += shift; // used only for UP/DOWN else x += shift; // used only for UP/DOWN
incs = new LinkedList<ICLanguageSettingEntry>(); incs = getIncs();
List<ICLanguageSettingEntry> lst = getSettingEntriesList(getKind());
if (lst != null) {
for (ICLanguageSettingEntry ent : lst) {
if (!ent.isBuiltIn())
incs.add(ent);
}
if (showBIButton.getSelection()) {
ArrayList<ICLanguageSettingEntry> lstS = new ArrayList<ICLanguageSettingEntry>();
for (ICLanguageSettingEntry ent : lst)
if (ent.isBuiltIn())
lstS.add(ent);
incs.addAll(lstS);
}
}
tv.setInput(incs.toArray(new Object[incs.size()])); tv.setInput(incs.toArray(new Object[incs.size()]));
if (table.getItemCount() > x) table.select(x); if (table.getItemCount() > x) table.select(x);
else if (table.getItemCount() > 0) table.select(0); else if (table.getItemCount() > 0) table.select(0);
} }
updateLbs(lb1, lb2);
updateButtons(); updateButtons();
} }
protected LinkedList<ICLanguageSettingEntry> getIncs() {
LinkedList<ICLanguageSettingEntry> l = new LinkedList<ICLanguageSettingEntry>();
List<ICLanguageSettingEntry> lst = getSettingEntriesList(getKind());
if (lst != null) {
for (ICLanguageSettingEntry ent : lst) {
if (!ent.isBuiltIn())
l.add(ent);
}
if (showBIButton.getSelection()) {
for (ICLanguageSettingEntry ent : lst)
if (ent.isBuiltIn())
l.add(ent);
}
}
return l;
}
/** /**
* Called when configuration changed * Called when configuration changed
* Refreshes languages list and calls table refresh. * Refreshes languages list and calls table refresh.
@ -336,11 +373,82 @@ public abstract class AbstractLangsListTab extends AbstractCPropertyTab {
} }
} }
} }
private void performAdd(ICLanguageSettingEntry ent) {
if (ent != null) {
if ((toAllCfgs || toAllLang) && ! (getResDesc() instanceof ICMultiResourceDescription)) {
addToAll(ent);
} else {
if (isWModifyMode() && (lang instanceof MultiLanguageSetting)) {
performMulti(ent, false);
} else {
incs.add(ent);
setSettingEntries(getKind(), incs, toAllLang);
}
}
update();
}
}
private void performMulti(ICLanguageSettingEntry ent, boolean delete) {
MultiLanguageSetting ms = (MultiLanguageSetting)lang;
ICLanguageSetting[] ls = (ICLanguageSetting[])ms.getItems();
ICLanguageSettingEntry[][] es = ms.getSettingEntriesM(getKind());
for (int i=0; i<ls.length; i++) {
List<ICLanguageSettingEntry> entries =
new ArrayList<ICLanguageSettingEntry>(Arrays.asList(es[i]));
for (ICLanguageSettingEntry e : entries)
if (e.getName().equals(ent.getName())) {
entries.remove(e);
break;
}
if (!delete)
entries.add(ent);
ls[i].setSettingEntries(getKind(), entries);
}
}
private void performEdit(int n) {
if (n == -1) return;
ICLanguageSettingEntry old = (ICLanguageSettingEntry)(table.getItem(n).getData());
if (old.isReadOnly()) return;
ICLanguageSettingEntry ent = doEdit(old);
if (ent != null) {
if (isWModifyMode() && (lang instanceof MultiLanguageSetting)) {
performMulti(ent, false);
} else {
int toModify = incs.indexOf(old);
incs.remove(toModify);
incs.add(toModify, ent);
setSettingEntries(getKind(), incs, false);
}
update();
}
}
private void performDelete(int n) {
if (n == -1) return;
int[] ids = table.getSelectionIndices();
if (isWModifyMode() && (lang instanceof MultiLanguageSetting)) {
for (int x=ids.length-1; x>=0; x--) {
ICLanguageSettingEntry old = (ICLanguageSettingEntry)(table.getItem(ids[x]).getData());
performMulti(old, true);
}
} else {
for (int x=ids.length-1; x>=0; x--) {
ICLanguageSettingEntry old = (ICLanguageSettingEntry)(table.getItem(ids[x]).getData());
if (old.isReadOnly()) continue;
incs.remove(old);
}
setSettingEntries(getKind(), incs, false);
}
update();
}
/** /**
* Unified buttons handler * Unified buttons handler
*/ */
public void buttonPressed(int i) { public void buttonPressed(int i) {
ICLanguageSettingEntry ent;
ICLanguageSettingEntry old; ICLanguageSettingEntry old;
int n = table.getSelectionIndex(); int n = table.getSelectionIndex();
int ids[] = table.getSelectionIndices(); int ids[] = table.getSelectionIndices();
@ -349,39 +457,13 @@ public abstract class AbstractLangsListTab extends AbstractCPropertyTab {
case 0: // add case 0: // add
toAllCfgs = false; toAllCfgs = false;
toAllLang = false; toAllLang = false;
ent = doAdd(); performAdd(doAdd());
if (ent != null) {
if ((toAllCfgs || toAllLang) && ! (getResDesc() instanceof ICMultiResourceDescription)) {
addToAll(ent);
} else {
incs.add(ent);
setSettingEntries(getKind(), incs, toAllLang);
}
update();
}
break; break;
case 1: // edit case 1: // edit
if (n == -1) return; performEdit(n);
old = (ICLanguageSettingEntry)(table.getItem(n).getData());
if (old.isReadOnly()) return;
ent = doEdit(old);
if (ent != null) {
int toModify = incs.indexOf(old);
incs.remove(toModify);
incs.add(toModify, ent);
setSettingEntries(getKind(), incs, false);
update();
}
break; break;
case 2: // delete case 2: // delete
if (n == -1) return; performDelete(n);
for (int x=ids.length-1; x>=0; x--) {
old = (ICLanguageSettingEntry)(table.getItem(ids[x]).getData());
if (old.isReadOnly()) continue;
incs.remove(old);
}
setSettingEntries(getKind(), incs, false);
update();
break; break;
case 3: // toggle export case 3: // toggle export
if (n == -1) return; if (n == -1) return;
@ -472,8 +554,13 @@ public abstract class AbstractLangsListTab extends AbstractCPropertyTab {
ICLanguageSetting [] sr = getLangSetting(src); ICLanguageSetting [] sr = getLangSetting(src);
ICLanguageSetting [] ds = getLangSetting(dst); ICLanguageSetting [] ds = getLangSetting(dst);
if (sr == null || ds == null || sr.length != ds.length) return; if (sr == null || ds == null || sr.length != ds.length) return;
for (int i=0; i<sr.length; i++) { if (page.isMultiCfg()) {
ds[i].setSettingEntries(getKind(), sr[i].getSettingEntries(getKind())); // TODO: Apply for multi !
} else {
for (int i=0; i<sr.length; i++) {
ds[i].setSettingEntries(getKind(), sr[i].getSettingEntries(getKind()));
}
} }
} }
protected void performDefaults() { protected void performDefaults() {
@ -543,7 +630,10 @@ public abstract class AbstractLangsListTab extends AbstractCPropertyTab {
case ICSettingBase.SETTING_CONFIGURATION: case ICSettingBase.SETTING_CONFIGURATION:
case ICSettingBase.SETTING_FOLDER: case ICSettingBase.SETTING_FOLDER:
ICFolderDescription foDes = (ICFolderDescription)rcDes; ICFolderDescription foDes = (ICFolderDescription)rcDes;
return foDes.getLanguageSettings(); if (foDes instanceof ICMultiFolderDescription) {
return getLS((ICMultiFolderDescription)foDes);
} else
return foDes.getLanguageSettings();
case ICSettingBase.SETTING_FILE: case ICSettingBase.SETTING_FILE:
ICFileDescription fiDes = (ICFileDescription)rcDes; ICFileDescription fiDes = (ICFileDescription)rcDes;
ICLanguageSetting ls = fiDes.getLanguageSetting(); ICLanguageSetting ls = fiDes.getLanguageSetting();
@ -552,6 +642,28 @@ public abstract class AbstractLangsListTab extends AbstractCPropertyTab {
return null; return null;
} }
private ICLanguageSetting[] getLS(ICMultiFolderDescription foDes) {
ICLanguageSetting[] lsets;
ICLanguageSetting[][] ls = foDes.getLanguageSettingsM(comp);
ICLanguageSetting[] fs = conv2LS(CDTPrefUtil.getListForDisplay(ls, comp));
lsets = new ICLanguageSetting[fs.length];
for (int i=0; i<fs.length; i++) {
ArrayList<ICLanguageSetting> list = new ArrayList<ICLanguageSetting>(ls.length);
for (int j=0; j<ls.length; j++) {
int x = Arrays.binarySearch(ls[j], fs[i], comp);
if (x >= 0)
list.add(ls[j][x]);
}
if (list.size() == 1)
lsets[i] = list.get(0);
else if (list.size() > 1)
lsets[i] = new MultiLanguageSetting(list, foDes.getConfiguration());
}
return lsets;
}
public boolean canBeVisible() { public boolean canBeVisible() {
if (getResDesc() == null) return true; if (getResDesc() == null) return true;
ICLanguageSetting [] ls = getLangSetting(getResDesc()); ICLanguageSetting [] ls = getLangSetting(getResDesc());
@ -570,6 +682,20 @@ public abstract class AbstractLangsListTab extends AbstractCPropertyTab {
lang.setSettingEntries(kind, incs); lang.setSettingEntries(kind, incs);
} }
private List<ICLanguageSettingEntry> getSettingEntriesList(int kind) { private List<ICLanguageSettingEntry> getSettingEntriesList(int kind) {
return lang.getSettingEntriesList(kind); if (page.isMultiCfg() && lang instanceof MultiLanguageSetting) {
ICLanguageSettingEntry[][] lses = ((MultiLanguageSetting)lang).getSettingEntriesM(kind);
Object[] res = CDTPrefUtil.getListForDisplay(lses, comp);
ICLanguageSettingEntry[] out = new ICLanguageSettingEntry[res.length];
System.arraycopy(res, 0, out, 0, res.length);
return Arrays.asList(out);
} else
return lang.getSettingEntriesList(kind);
} }
private ICLanguageSetting[] conv2LS(Object[] ob) {
ICLanguageSetting[] se = new ICLanguageSetting[ob.length];
System.arraycopy(ob, 0, se, 0, ob.length);
return se;
}
} }

View file

@ -401,9 +401,7 @@ implements
cfgIndex = selectionIndex; cfgIndex = selectionIndex;
} }
} }
// TODO: avoid repeated update like for single cfg cfgChanged(MultiItemsHolder.createCDescription(multiCfgs));
cfgChanged(MultiItemsHolder.createCDescription(multiCfgs,
ICMultiItemsHolder.MODE_DEFAULT));
return; return;
} else { } else {
String id1 = getResDesc() == null ? null : getResDesc().getId(); String id1 = getResDesc() == null ? null : getResDesc().getId();
@ -1013,7 +1011,9 @@ implements
return true; // Projects and folders are always applicable return true; // Projects and folders are always applicable
} }
// update views (in particular, display resource configurations) /**
* update views (in particular, display resource configurations)
*/
public static void updateViews(IResource res) { public static void updateViews(IResource res) {
if (res == null) return; if (res == null) return;
IWorkbenchPartReference refs[] = CUIPlugin.getActiveWorkbenchWindow().getActivePage().getViewReferences(); IWorkbenchPartReference refs[] = CUIPlugin.getActiveWorkbenchWindow().getActivePage().getViewReferences();
@ -1024,6 +1024,9 @@ implements
} }
} }
/**
* Adjusts form size according to contents dimensions
*/
public void resize() { public void resize() {
Shell sh = parentComposite.getShell(); Shell sh = parentComposite.getShell();
Point p0 = sh.getLocation(); Point p0 = sh.getLocation();
@ -1034,9 +1037,18 @@ implements
sh.setSize(p1); sh.setSize(p1);
} }
/**
* Returns Apply button widget
* Allows public access to it.
*/
public Button getAButton() { public Button getAButton() {
return getApplyButton(); return getApplyButton();
} }
/**
* Returns Default button widget.
* Allows public access to it.
*/
public Button getDButton() { public Button getDButton() {
return getDefaultsButton(); return getDefaultsButton();
} }

View file

@ -1,5 +1,5 @@
/******************************************************************************* /*******************************************************************************
* Copyright (c) 2007 Intel Corporation and others. * Copyright (c) 2007, 2008 Intel Corporation and others.
* All rights reserved. This program and the accompanying materials * All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0 * are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at * which accompanies this distribution, and is available at
@ -10,13 +10,17 @@
*******************************************************************************/ *******************************************************************************/
package org.eclipse.cdt.ui.newui; package org.eclipse.cdt.ui.newui;
import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Comparator;
import java.util.Iterator; import java.util.Iterator;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.TreeSet;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.cdt.ui.CUIPlugin; import org.eclipse.cdt.ui.CUIPlugin;
import org.eclipse.jface.preference.IPreferenceStore;
public class CDTPrefUtil { public class CDTPrefUtil {
// boolean keys (KEY_NO-s are to be inverted !) // boolean keys (KEY_NO-s are to be inverted !)
@ -43,19 +47,20 @@ public class CDTPrefUtil {
public static final int DISC_NAMING_DEFAULT = DISC_NAMING_UNIQUE_OR_BOTH; 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 String KEY_DMODE = "properties.multi.displ.mode"; //$NON-NLS-1$
public static final int DMODE_EMPTY = 1; public static final int DMODE_CONJUNCTION = 1;
public static final int DMODE_CONJUNCTION = 2; public static final int DMODE_DISJUNCTION = 2;
public static final int DMODE_DISJUNCTION = 4;
public static final String KEY_WMODE = "properties.multi.write.mode"; //$NON-NLS-1$ 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_MODIFY = 4;
public static final int WMODE_REPLACE = 16; public static final int WMODE_REPLACE = 8;
public static final String NULL = "NULL"; //$NON-NLS-1$ public static final String NULL = "NULL"; //$NON-NLS-1$
private static final IPreferenceStore pref = CUIPlugin.getDefault().getPreferenceStore(); private static final IPreferenceStore pref = CUIPlugin.getDefault().getPreferenceStore();
private static final String DELIMITER = " "; //$NON-NLS-1$ private static final String DELIMITER = " "; //$NON-NLS-1$
private static LinkedList<String> preferredTCs = null; private static LinkedList<String> preferredTCs = null;
public static final Object[] EMPTY_ARRAY = new Object[0];
// low-level methods // low-level methods
public static boolean getBool(String key) { return pref.getBoolean(key); } public static boolean getBool(String key) { return pref.getBoolean(key); }
public static void setBool(String key, boolean val) { pref.setValue(key, val); } public static void setBool(String key, boolean val) { pref.setValue(key, val); }
@ -96,4 +101,134 @@ public class CDTPrefUtil {
} }
setStr(KEY_PREFTC, b.toString().trim()); setStr(KEY_PREFTC, b.toString().trim());
} }
public static String getDMode() {
String s = null;
switch(CDTPrefUtil.getInt(CDTPrefUtil.KEY_DMODE)) {
case CDTPrefUtil.DMODE_CONJUNCTION:
s = UIMessages.getString("EnvironmentTab.17"); //$NON-NLS-1$
break;
case CDTPrefUtil.DMODE_DISJUNCTION:
s = UIMessages.getString("EnvironmentTab.18"); //$NON-NLS-1$
break;
}
return UIMessages.getString("EnvironmentTab.19") + s; //$NON-NLS-1$
}
public static String getWMode() {
String s = null;
switch(CDTPrefUtil.getInt(CDTPrefUtil.KEY_WMODE)) {
case CDTPrefUtil.WMODE_MODIFY:
s = UIMessages.getString("EnvironmentTab.20"); //$NON-NLS-1$
break;
case CDTPrefUtil.WMODE_REPLACE:
s = UIMessages.getString("EnvironmentTab.21"); //$NON-NLS-1$
break;
}
return UIMessages.getString("EnvironmentTab.22") + s; //$NON-NLS-1$
}
public static void spinDMode() {
setInt(KEY_DMODE,
((getInt(KEY_DMODE) == DMODE_CONJUNCTION) ?
DMODE_DISJUNCTION :
DMODE_CONJUNCTION));
}
public static void spinWMode() {
setInt(KEY_WMODE,
((getInt(KEY_WMODE) == WMODE_MODIFY) ?
WMODE_REPLACE :
WMODE_MODIFY));
}
public static final String[] getStrListForDisplay(String[][] input) {
return getStrListForDisplay(input, getInt(KEY_DMODE));
}
private static final String[] getStrListForDisplay(String[][] input, int mode) {
Object[] ob = getListForDisplay(input, getInt(KEY_DMODE), null);
String[] ss = new String[ob.length];
System.arraycopy(ob, 0, ss, 0, ob.length);
return ss;
}
public static final Object[] getListForDisplay(Object[][] input, Comparator<Object> cmp) {
return getListForDisplay(input, getInt(KEY_DMODE), cmp);
}
/**
* Utility method forms string list
* according to current list display mode
*
* @param input - array of string arrays
* @return
*/
private static final Object[] getListForDisplay(Object[][] input, int mode, Comparator<Object> cmp) {
if (input == null || input.length == 0)
return EMPTY_ARRAY;
if (input.length == 1) {
return (input[0] == null) ?
EMPTY_ARRAY :
input[0];
}
Object[] s1 = input[0];
if (s1 == null ||
s1.length == 0)
return EMPTY_ARRAY;
/*
if (mode == DMODE_EMPTY) {
Arrays.sort(s1, cmp);
for (int i=1; i<input.length; i++) {
Object[] s2 = input[i];
if (s2 == null ||
s2.length == 0 ||
s1.length != s2.length)
return EMPTY_ARRAY;
Arrays.sort(s2, cmp);
if (! Arrays.equals(s1, s2))
return EMPTY_ARRAY;
}
return s1; // returns sorted strings !
}
*/
if (getInt(KEY_DMODE) == DMODE_CONJUNCTION)
{
ArrayList<Object> lst = new ArrayList<Object>();
for (int i=0; i<s1.length; i++) {
if (s1[i] == null)
continue;
boolean found = true;
for (int k = 1; k<input.length; k++) {
Object[] s2 = input[k];
if (s2 == null || s2.length == 0)
return EMPTY_ARRAY;
if (i == 0)
Arrays.sort(s2, cmp);
if (Arrays.binarySearch(s2, s1[i], cmp) < 0) {
found = false;
break;
}
}
if (found) {
lst.add(s1[i]);
}
}
return lst.toArray();
}
else // DMODE_ALL
{
TreeSet<Object> lst = new TreeSet<Object>(cmp); // set, to avoid doubles
for (int i=0; i<input.length; i++) {
if (input[i] == null ||
input[i].length == 0)
continue;
for (int j=0; j<input[i].length; j++)
lst.add(input[i][j]);
}
s1 = lst.toArray();
Arrays.sort(s1, cmp);
return s1;
}
}
} }

View file

@ -28,6 +28,8 @@ import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.window.Window; import org.eclipse.jface.window.Window;
import org.eclipse.osgi.util.TextProcessor; import org.eclipse.osgi.util.TextProcessor;
import org.eclipse.swt.SWT; import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.events.SelectionListener;
@ -71,6 +73,7 @@ public class EnvironmentTab extends AbstractCPropertyTab {
private TableViewer tv; private TableViewer tv;
private ArrayList<TabData> data = new ArrayList<TabData>(); private ArrayList<TabData> data = new ArrayList<TabData>();
private Button b1, b2; private Button b1, b2;
private Label lb1, lb2;
private ICConfigurationDescription cfgd = null; private ICConfigurationDescription cfgd = null;
private StorableEnvironment vars = null; private StorableEnvironment vars = null;
@ -143,7 +146,7 @@ public class EnvironmentTab extends AbstractCPropertyTab {
public void createControls(Composite parent) { public void createControls(Composite parent) {
super.createControls(parent); super.createControls(parent);
usercomp.setLayout(new GridLayout(1, false)); usercomp.setLayout(new GridLayout(2, true));
Label l1 = new Label(usercomp, SWT.LEFT); Label l1 = new Label(usercomp, SWT.LEFT);
l1.setText(UIMessages.getString("EnvironmentTab.0")); //$NON-NLS-1$ l1.setText(UIMessages.getString("EnvironmentTab.0")); //$NON-NLS-1$
l1.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); l1.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
@ -182,7 +185,9 @@ public class EnvironmentTab extends AbstractCPropertyTab {
tc.setText(UIMessages.getString("EnvironmentTab.2")); //$NON-NLS-1$ tc.setText(UIMessages.getString("EnvironmentTab.2")); //$NON-NLS-1$
tc.setWidth(200); tc.setWidth(200);
table.setLayoutData(new GridData(GridData.FILL_BOTH)); GridData gd = new GridData(GridData.FILL_BOTH);
gd.horizontalSpan = 2;
table.setLayoutData(gd);
b1 = new Button(usercomp, SWT.RADIO); b1 = new Button(usercomp, SWT.RADIO);
b1.setText(UIMessages.getString("EnvironmentTab.3")); //$NON-NLS-1$ b1.setText(UIMessages.getString("EnvironmentTab.3")); //$NON-NLS-1$
@ -196,6 +201,15 @@ public class EnvironmentTab extends AbstractCPropertyTab {
updateData(); updateData();
}}); }});
lb1 = new Label(usercomp, SWT.BORDER | SWT.CENTER);
lb1.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
lb1.setToolTipText(UIMessages.getString("EnvironmentTab.15")); //$NON-NLS-1$
lb1.addMouseListener(new MouseAdapter() {
public void mouseDoubleClick(MouseEvent e) {
CDTPrefUtil.spinDMode();
updateData();
}});
b2 = new Button(usercomp, SWT.RADIO); b2 = new Button(usercomp, SWT.RADIO);
b2.setText(UIMessages.getString("EnvironmentTab.4")); //$NON-NLS-1$ b2.setText(UIMessages.getString("EnvironmentTab.4")); //$NON-NLS-1$
b2.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); b2.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
@ -208,100 +222,35 @@ public class EnvironmentTab extends AbstractCPropertyTab {
updateData(); updateData();
}}); }});
lb2 = new Label(usercomp, SWT.BORDER | SWT.CENTER);
lb2.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
lb2.setToolTipText(UIMessages.getString("EnvironmentTab.23")); //$NON-NLS-1$
lb2.addMouseListener(new MouseAdapter() {
public void mouseDoubleClick(MouseEvent e) {
CDTPrefUtil.spinWMode();
updateLbs(null, lb2);
}});
initButtons(new String[] {UIMessages.getString("EnvironmentTab.5"),UIMessages.getString("EnvironmentTab.6"),UIMessages.getString("EnvironmentTab.7"),UIMessages.getString("EnvironmentTab.8"),UIMessages.getString("EnvironmentTab.9")}); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ initButtons(new String[] {UIMessages.getString("EnvironmentTab.5"),UIMessages.getString("EnvironmentTab.6"),UIMessages.getString("EnvironmentTab.7"),UIMessages.getString("EnvironmentTab.8"),UIMessages.getString("EnvironmentTab.9")}); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
} }
public void buttonPressed(int i) { public void buttonPressed(int i) {
IEnvironmentVariable var = null;
EnvDialog dlg;
int n = table.getSelectionIndex();
int[] idx;
switch (i) { switch (i) {
case 0: case 0:
dlg = new EnvDialog(usercomp.getShell(), handleEnvAddButtonSelected();
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;
if (dlg.toAll)
cfgs = page.getCfgsEditable();
else
cfgs = new ICConfigurationDescription[] {cfgd};
if (cfgd == null)
vars.createVariable(dlg.t1.trim(), dlg.t2.trim(),
IEnvironmentVariable.ENVVAR_APPEND, SEMI);
else
for (int x=0; x<cfgs.length; x++) {
ce.addVariable(dlg.t1.trim(), dlg.t2.trim(),
IEnvironmentVariable.ENVVAR_APPEND,
SEMI, cfgs[x]);
}
updateData();
}
}
break; break;
case 1: // select case 1: // select
handleEnvSelectButtonSelected(); handleEnvSelectButtonSelected();
updateData();
break; break;
case 2: // edit case 2: // edit
if (n == -1) return; handleEnvEditButtonSelected(table.getSelectionIndex());
var = ((TabData)tv.getElementAt(n)).var;
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(),
IEnvironmentVariable.ENVVAR_REPLACE,
var.getDelimiter(), cfgd);
else
vars.createVariable(dlg.t1.trim(), dlg.t2.trim(),
IEnvironmentVariable.ENVVAR_REPLACE, var.getDelimiter());
updateData();
}
break; break;
case 3: // remove case 3: // remove
if (n == -1) return; handleEnvDelButtonSelected(table.getSelectionIndex());
idx = table.getSelectionIndices();
for (int j=0; j<idx.length; j++) {
var = ((TabData)tv.getElementAt(idx[j])).var;
if (cfgd == null)
vars.deleteVariable(var.getName());
else
ce.removeVariable(var.getName(), cfgd);
}
updateData();
break; break;
case 4: // Undefine case 4: // Undefine
if (n == -1) return; handleEnvUndefButtonSelected(table.getSelectionIndex());
idx = table.getSelectionIndices();
for (int j=0; j<idx.length; j++) {
var = ((TabData)tv.getElementAt(idx[j])).var;
if (cfgd == null)
vars.createVariable(
var.getName(),
null,
IEnvironmentVariable.ENVVAR_REMOVE,
var.getDelimiter());
else
ce.addVariable(
var.getName(),
null,
IEnvironmentVariable.ENVVAR_REMOVE,
var.getDelimiter(), cfgd);
}
updateData();
break; break;
} }
updateButtons();
} }
public void updateButtons() { public void updateButtons() {
@ -334,6 +283,7 @@ public class EnvironmentTab extends AbstractCPropertyTab {
b2.setSelection(!vars.appendContributedEnvironment()); b2.setSelection(!vars.appendContributedEnvironment());
_vars = vars.getVariables() ; _vars = vars.getVariables() ;
} }
data.clear(); data.clear();
if (_vars != null) { if (_vars != null) {
for (int i=0; i<_vars.length; i++) { for (int i=0; i<_vars.length; i++) {
@ -341,6 +291,8 @@ public class EnvironmentTab extends AbstractCPropertyTab {
} }
} }
tv.setInput(data); tv.setInput(data);
updateLbs(lb1, lb2);
updateButtons(); updateButtons();
} }
@ -383,6 +335,91 @@ public class EnvironmentTab extends AbstractCPropertyTab {
} }
} }
private void handleEnvEditButtonSelected(int n) {
if (n == -1)
return;
IEnvironmentVariable var = ((TabData)tv.getElementAt(n)).var;
EnvDialog 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( var.getName(), dlg.t2.trim(),
IEnvironmentVariable.ENVVAR_REPLACE,
var.getDelimiter(), cfgd);
else
vars.createVariable(dlg.t1.trim(), dlg.t2.trim(),
IEnvironmentVariable.ENVVAR_REPLACE, var.getDelimiter());
updateData();
}
}
private void handleEnvUndefButtonSelected(int n) {
if (n == -1)
return;
for (int i : table.getSelectionIndices()) {
IEnvironmentVariable var = ((TabData)tv.getElementAt(i)).var;
if (cfgd == null)
vars.createVariable(
var.getName(),
null,
IEnvironmentVariable.ENVVAR_REMOVE,
var.getDelimiter());
else
ce.addVariable(
var.getName(),
null,
IEnvironmentVariable.ENVVAR_REMOVE,
var.getDelimiter(), cfgd);
}
updateData();
}
private void handleEnvDelButtonSelected(int n) {
if (n == -1)
return;
for (int i : table.getSelectionIndices()) {
IEnvironmentVariable var = ((TabData)tv.getElementAt(i)).var;
if (cfgd == null)
vars.deleteVariable(var.getName());
else
ce.removeVariable(var.getName(), cfgd);
}
updateData();
}
private void handleEnvAddButtonSelected() {
IEnvironmentVariable var = null;
EnvDialog 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;
if (dlg.toAll)
cfgs = page.getCfgsEditable();
else
cfgs = new ICConfigurationDescription[] {cfgd};
if (cfgd == null)
vars.createVariable(dlg.t1.trim(), dlg.t2.trim(),
IEnvironmentVariable.ENVVAR_APPEND, SEMI);
else
for (int x=0; x<cfgs.length; x++) {
ce.addVariable(dlg.t1.trim(), dlg.t2.trim(),
IEnvironmentVariable.ENVVAR_APPEND,
SEMI, cfgs[x]);
}
updateData();
}
}
}
private void handleEnvSelectButtonSelected() { private void handleEnvSelectButtonSelected() {
// get Environment Variables from the OS // get Environment Variables from the OS
Map v = EnvironmentReader.getEnvVars(); Map v = EnvironmentReader.getEnvVars();
@ -416,6 +453,7 @@ public class EnvironmentTab extends AbstractCPropertyTab {
SEMI, cfgs[y]); SEMI, cfgs[y]);
} }
} }
updateData();
} }
} }

View file

@ -142,9 +142,14 @@ public class ErrorParsTab extends AbstractCPropertyTab {
public void updateData(ICResourceDescription _cfgd) { public void updateData(ICResourceDescription _cfgd) {
cfgd = _cfgd.getConfiguration(); cfgd = _cfgd.getConfiguration();
if (mapParsers == null) return; if (mapParsers == null) return;
String[] ss = (page.isMultiCfg()) ?
((ICMultiConfigDescription)cfgd).getErrorParserIDs() : String[] ss = null;
cfgd.getBuildSetting().getErrorParserIDs(); if (page.isMultiCfg()) {
String[][] ids = ((ICMultiConfigDescription)cfgd).getErrorParserIDs();
ss = CDTPrefUtil.getStrListForDisplay(ids);
} else {
ss = cfgd.getBuildSetting().getErrorParserIDs();
}
ArrayList<TableData> data = new ArrayList<TableData>(mapParsers.size()); ArrayList<TableData> data = new ArrayList<TableData>(mapParsers.size());
ArrayList<TableData> checked = new ArrayList<TableData>(ss.length); ArrayList<TableData> checked = new ArrayList<TableData>(ss.length);
@ -182,9 +187,13 @@ public class ErrorParsTab extends AbstractCPropertyTab {
protected void performApply(ICResourceDescription src, ICResourceDescription dst) { protected void performApply(ICResourceDescription src, ICResourceDescription dst) {
ICConfigurationDescription sd = src.getConfiguration(); ICConfigurationDescription sd = src.getConfiguration();
ICConfigurationDescription dd = dst.getConfiguration(); ICConfigurationDescription dd = dst.getConfiguration();
String[] s = (sd instanceof ICMultiConfigDescription) ? String[] s = null;
((ICMultiConfigDescription)sd).getErrorParserIDs() : if (sd instanceof ICMultiConfigDescription) {
sd.getBuildSetting().getErrorParserIDs(); String[][] ss = ((ICMultiConfigDescription)sd).getErrorParserIDs();
s = CDTPrefUtil.getStrListForDisplay(ss);
} else {
s = sd.getBuildSetting().getErrorParserIDs();
}
if (dd instanceof ICMultiConfigDescription) if (dd instanceof ICMultiConfigDescription)
((ICMultiConfigDescription)sd).setErrorParserIDs(s); ((ICMultiConfigDescription)sd).setErrorParserIDs(s);
else else

View file

@ -1,6 +1,14 @@
/** /*******************************************************************************
* Copyright (c) 2007, 2008 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
* IBM Corporation
*******************************************************************************/
package org.eclipse.cdt.ui.newui; package org.eclipse.cdt.ui.newui;
import java.util.Comparator; import java.util.Comparator;
@ -10,7 +18,6 @@ import org.eclipse.cdt.core.envvar.IContributedEnvironment;
import org.eclipse.cdt.core.envvar.IEnvironmentVariable; import org.eclipse.cdt.core.envvar.IEnvironmentVariable;
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription; import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
import org.eclipse.cdt.core.settings.model.ICMultiConfigDescription; import org.eclipse.cdt.core.settings.model.ICMultiConfigDescription;
import org.eclipse.cdt.core.settings.model.ICMultiItemsHolder;
import org.eclipse.cdt.core.settings.model.MultiItemsHolder; import org.eclipse.cdt.core.settings.model.MultiItemsHolder;
/** /**
@ -21,10 +28,9 @@ public class MultiCfgContributedEnvironment implements IContributedEnvironment {
private static final IContributedEnvironment ice = CCorePlugin.getDefault().getBuildEnvironmentManager().getContributedEnvironment(); private static final IContributedEnvironment ice = CCorePlugin.getDefault().getBuildEnvironmentManager().getContributedEnvironment();
private boolean isMulti = false; private boolean isMulti = false;
private ICConfigurationDescription[] mono = new ICConfigurationDescription[1]; private ICConfigurationDescription[] mono = new ICConfigurationDescription[1];
private ICConfigurationDescription[] cfs;
private static final EnvCmp comparator = new EnvCmp(); private static final EnvCmp comparator = new EnvCmp();
private static class EnvCmp implements Comparator { private static class EnvCmp implements Comparator<Object> {
public int compare(Object a0, Object a1) { public int compare(Object a0, Object a1) {
if (a0 == null || a1 == null) if (a0 == null || a1 == null)
@ -51,17 +57,31 @@ public class MultiCfgContributedEnvironment implements IContributedEnvironment {
public IEnvironmentVariable addVariable(String name, String value, public IEnvironmentVariable addVariable(String name, String value,
int op, String delimiter, ICConfigurationDescription des) { int op, String delimiter, ICConfigurationDescription des) {
cfs = getCfs(des);
IEnvironmentVariable v = null; IEnvironmentVariable v = null;
for (int i=0; i<cfs.length; i++) for (ICConfigurationDescription c : getCfs(des))
v = ice.addVariable(name, value, op, delimiter, cfs[i]); v = ice.addVariable(name, value, op, delimiter, c);
doReplace(des);
return v; return v;
} }
private void doReplace(ICConfigurationDescription des) {
if (isMulti && ! isModifyMode()) {
IEnvironmentVariable[] vars = getVariables(des);
for (int i=0; i<vars.length; i++)
if (! ice.isUserVariable(des, vars[i]))
vars[i] = null;
for (ICConfigurationDescription c : getCfs(des)) {
ice.restoreDefaults(c);
for (IEnvironmentVariable v : vars)
if (v != null)
ice.addVariable(v, c);
}
}
}
public boolean appendEnvironment(ICConfigurationDescription des) { public boolean appendEnvironment(ICConfigurationDescription des) {
cfs = getCfs(des); for (ICConfigurationDescription c : getCfs(des))
for (int i=0; i<cfs.length; i++) if (! ice.appendEnvironment(c))
if (! ice.appendEnvironment(cfs[i]))
return false; return false;
return true; return true;
} }
@ -71,8 +91,8 @@ public class MultiCfgContributedEnvironment implements IContributedEnvironment {
if (!isMulti) if (!isMulti)
return ice.getVariable(name, des); return ice.getVariable(name, des);
// should we show ANY vars, even if they exist not in all cfgs ? // should we show ANY vars, even if they exist not in all cfgs ?
boolean any = (getDispMode(des) == ICMultiItemsHolder.DMODE_ALL); boolean any = (getDispMode(des) == CDTPrefUtil.DMODE_DISJUNCTION);
cfs = getCfs(des); ICConfigurationDescription[] cfs = getCfs(des);
IEnvironmentVariable v = ice.getVariable(name, cfs[0]); IEnvironmentVariable v = ice.getVariable(name, cfs[0]);
// if ((any && v != null) || (! any && v == null)) // if ((any && v != null) || (! any && v == null))
if (any ^ (v == null)) if (any ^ (v == null))
@ -92,12 +112,13 @@ public class MultiCfgContributedEnvironment implements IContributedEnvironment {
ICConfigurationDescription des) { ICConfigurationDescription des) {
if (!isMulti) if (!isMulti)
return ice.getVariables(des); return ice.getVariables(des);
cfs = getCfs(des); ICConfigurationDescription[] cfs = getCfs(des);
IEnvironmentVariable[][] evs = new IEnvironmentVariable[cfs.length][]; IEnvironmentVariable[][] evs = new IEnvironmentVariable[cfs.length][];
for (int i=0; i<cfs.length; i++) int i = 0;
evs[i] = ice.getVariables(cfs[i]); for (ICConfigurationDescription c : cfs)
evs[i++] = ice.getVariables(c);
Object[] obs = ((ICMultiItemsHolder)des).getListForDisplay(evs, comparator); Object[] obs = CDTPrefUtil.getListForDisplay(evs, comparator);
IEnvironmentVariable[] ev = new IEnvironmentVariable[obs.length]; IEnvironmentVariable[] ev = new IEnvironmentVariable[obs.length];
System.arraycopy(obs, 0, ev, 0, obs.length); System.arraycopy(obs, 0, ev, 0, obs.length);
return ev; return ev;
@ -106,9 +127,8 @@ public class MultiCfgContributedEnvironment implements IContributedEnvironment {
public boolean isUserVariable(ICConfigurationDescription des, public boolean isUserVariable(ICConfigurationDescription des,
IEnvironmentVariable var) { IEnvironmentVariable var) {
cfs = getCfs(des); for (ICConfigurationDescription c : getCfs(des))
for (int i=0; i<cfs.length; i++) if (! ice.isUserVariable(c, var))
if (! ice.isUserVariable(cfs[i], var))
return false; return false;
return true; // only if for each cfg return true; // only if for each cfg
} }
@ -116,22 +136,20 @@ public class MultiCfgContributedEnvironment implements IContributedEnvironment {
public IEnvironmentVariable removeVariable(String name, public IEnvironmentVariable removeVariable(String name,
ICConfigurationDescription des) { ICConfigurationDescription des) {
IEnvironmentVariable res = null; IEnvironmentVariable res = null;
cfs = getCfs(des); for (ICConfigurationDescription c : getCfs(des))
for (int i=0; i<cfs.length; i++) res = ice.removeVariable(name, c);
res = ice.removeVariable(name, cfs[i]); doReplace(des);
return res; return res;
} }
public void restoreDefaults(ICConfigurationDescription des) { public void restoreDefaults(ICConfigurationDescription des) {
cfs = getCfs(des); for (ICConfigurationDescription c : getCfs(des))
for (int i=0; i<cfs.length; i++) ice.restoreDefaults(c);
ice.restoreDefaults(cfs[i]);
} }
public void setAppendEnvironment(boolean append,ICConfigurationDescription des) { public void setAppendEnvironment(boolean append,ICConfigurationDescription des) {
cfs = getCfs(des); for (ICConfigurationDescription c : getCfs(des))
for (int i=0; i<cfs.length; i++) ice.setAppendEnvironment(append, c);
ice.setAppendEnvironment(append, cfs[i]);
} }
private ICConfigurationDescription[] getCfs(ICConfigurationDescription des) { private ICConfigurationDescription[] getCfs(ICConfigurationDescription des) {
@ -145,8 +163,29 @@ public class MultiCfgContributedEnvironment implements IContributedEnvironment {
private int getDispMode(ICConfigurationDescription des) { private int getDispMode(ICConfigurationDescription des) {
if (isMulti && des instanceof MultiItemsHolder) if (isMulti && des instanceof MultiItemsHolder)
return ((MultiItemsHolder)des).getStringListMode() & ICMultiItemsHolder.DMODES; return CDTPrefUtil.getInt(CDTPrefUtil.KEY_DMODE);
return 0; return 0;
} }
private boolean isModifyMode() {
int wmode = CDTPrefUtil.getInt(CDTPrefUtil.KEY_WMODE);
return (wmode == CDTPrefUtil.WMODE_MODIFY);
}
public IEnvironmentVariable addVariable(IEnvironmentVariable var,
ICConfigurationDescription des) {
IEnvironmentVariable v = null;
for (ICConfigurationDescription c : getCfs(des))
v = ice.addVariable(var, c);
doReplace(des);
return v;
}
public void addVariables(IEnvironmentVariable[] vars,
ICConfigurationDescription des) {
for (ICConfigurationDescription c : getCfs(des))
ice.addVariables(vars, c);
doReplace(des);
}
} }

View file

@ -344,7 +344,6 @@ PropertyMultiCfgTab.10=Add/remove/change affected elements, do not touch others
PropertyMultiCfgTab.11=Replace existing string lists with string list shown to user PropertyMultiCfgTab.11=Replace existing string lists with string list shown to user
PropertyMultiCfgTab.3=String list Display mode PropertyMultiCfgTab.3=String list Display mode
PropertyMultiCfgTab.4=Define how string lists from different configurations\nshould be combined for display, when lists are not equal PropertyMultiCfgTab.4=Define how string lists from different configurations\nshould be combined for display, when lists are not equal
PropertyMultiCfgTab.5=Show empty list
PropertyMultiCfgTab.6=Show common elements (conjunction) PropertyMultiCfgTab.6=Show common elements (conjunction)
PropertyMultiCfgTab.7=Show all elements except doubles (disjunction) PropertyMultiCfgTab.7=Show all elements except doubles (disjunction)
PropertyMultiCfgTab.8=String list Write mode PropertyMultiCfgTab.8=String list Write mode
@ -447,6 +446,10 @@ EnvDialog.3=Add to all configurations
EnvironmentTab.0=Environment variables to set EnvironmentTab.0=Environment variables to set
EnvironmentTab.1=Variable EnvironmentTab.1=Variable
EnvironmentTab.2=Value EnvironmentTab.2=Value
EnvironmentTab.20=MODIFY
EnvironmentTab.21=REPLACE
EnvironmentTab.22=WRITE mode:
EnvironmentTab.23=Current String List WRITE mode. Double-click to change
EnvironmentTab.3=Append variables to native environment EnvironmentTab.3=Append variables to native environment
EnvironmentTab.4=Replace native environment with specified one EnvironmentTab.4=Replace native environment with specified one
EnvironmentTab.5=New... EnvironmentTab.5=New...
@ -459,6 +462,10 @@ EnvironmentTab.11=Edit variable
EnvironmentTab.12=Variables list EnvironmentTab.12=Variables list
EnvironmentTab.13=Add to all configurations EnvironmentTab.13=Add to all configurations
EnvironmentTab.14=Select variables EnvironmentTab.14=Select variables
EnvironmentTab.15=Current String List DISPLAY mode. Double-click to change
EnvironmentTab.17=CONJUNCTION
EnvironmentTab.18=DISJUNCTION
EnvironmentTab.19=DISPLAY mode:
IncludeTab.0=Include directories IncludeTab.0=Include directories
IncludeTab.1=Add directory path IncludeTab.1=Add directory path
IncludeTab.2=Change directory path IncludeTab.2=Change directory path

View file

@ -1,5 +1,5 @@
/******************************************************************************* /*******************************************************************************
* Copyright (c) 2007 Intel Corporation and others. * Copyright (c) 2007, 2008 Intel Corporation and others.
* All rights reserved. This program and the accompanying materials * All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0 * are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at * which accompanies this distribution, and is available at
@ -202,7 +202,7 @@ public class RefsTab extends AbstractCPropertyTab {
} }
protected void performDefaults() { protected void performDefaults() {
getResDesc().getConfiguration().setReferenceInfo(new HashMap()); getResDesc().getConfiguration().setReferenceInfo(new HashMap<String, String>());
initData(); initData();
} }
protected void updateButtons() {} // Do nothing. No buttons to update. protected void updateButtons() {} // Do nothing. No buttons to update.

View file

@ -14,7 +14,6 @@ package org.eclipse.cdt.ui.newui;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.Iterator; import java.util.Iterator;
import java.util.LinkedList;
import org.eclipse.swt.SWT; import org.eclipse.swt.SWT;
import org.eclipse.swt.accessibility.AccessibleAdapter; import org.eclipse.swt.accessibility.AccessibleAdapter;
@ -74,8 +73,9 @@ public class SymbolTab extends AbstractLangsListTab {
int x = table.getSelectionIndex(); int x = table.getSelectionIndex();
if (x == -1) x = 0; if (x == -1) x = 0;
// incs = new LinkedList<ICLanguageSettingEntry>(lang.getSettingEntriesList(getKind()));
incs = getIncs();
ArrayList<ICLanguageSettingEntry> lst = new ArrayList<ICLanguageSettingEntry>(); ArrayList<ICLanguageSettingEntry> lst = new ArrayList<ICLanguageSettingEntry>();
incs = new LinkedList<ICLanguageSettingEntry>(lang.getSettingEntriesList(getKind()));
if (incs != null) { if (incs != null) {
Iterator it = incs.iterator(); Iterator it = incs.iterator();
while (it.hasNext()) { while (it.hasNext()) {
@ -88,6 +88,7 @@ public class SymbolTab extends AbstractLangsListTab {
if (table.getItemCount() > x) table.select(x); if (table.getItemCount() > x) table.select(x);
else if (table.getItemCount() > 0) table.select(0); else if (table.getItemCount() > 0) table.select(0);
} }
updateLbs(lb1, lb2);
updateButtons(); updateButtons();
} }