1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-06-08 10:16:03 +02:00

Related to Multi-config implementation.

This commit is contained in:
Oleg Krasilnikov 2008-02-13 16:00:03 +00:00
parent 495735b5e3
commit 49b6254c36
2 changed files with 166 additions and 52 deletions

View file

@ -10,6 +10,10 @@
*******************************************************************************/ *******************************************************************************/
package org.eclipse.cdt.managedbuilder.ui.properties; package org.eclipse.cdt.managedbuilder.ui.properties;
import java.util.Set;
import java.util.TreeSet;
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
import org.eclipse.cdt.core.settings.model.ICMultiItemsHolder; import org.eclipse.cdt.core.settings.model.ICMultiItemsHolder;
import org.eclipse.cdt.core.settings.model.ICResourceDescription; import org.eclipse.cdt.core.settings.model.ICResourceDescription;
import org.eclipse.cdt.managedbuilder.buildproperties.IBuildProperty; import org.eclipse.cdt.managedbuilder.buildproperties.IBuildProperty;
@ -32,14 +36,14 @@ import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
public class ArtifactTab extends AbstractCBuildPropertyTab { public class ArtifactTab extends AbstractCBuildPropertyTab {
public static final String PROPERTY = ManagedBuildManager.BUILD_ARTEFACT_TYPE_PROPERTY_ID; public static final String PROPERTY = ManagedBuildManager.BUILD_ARTEFACT_TYPE_PROPERTY_ID;
private Label l4; private Label l4;
private Text t2, t3, t4; private Combo t2, t3, t4;
private Combo c1; private Combo c1;
private int savedPos = -1; // current project type private int savedPos = -1; // current project type
private IConfiguration fCfg; private IConfiguration fCfg;
@ -48,10 +52,16 @@ public class ArtifactTab extends AbstractCBuildPropertyTab {
private ITool tTool; private ITool tTool;
private boolean canModify = true; private boolean canModify = true;
private enum FIELD {NAME, EXT, PREF}
private Set<String> set2 = new TreeSet<String>();
private Set<String> set3 = new TreeSet<String>();
private Set<String> set4 = new TreeSet<String>();
public void createControls(Composite parent) { public void createControls(Composite parent) {
super.createControls(parent); super.createControls(parent);
usercomp.setLayout(new GridLayout(2, false)); usercomp.setLayout(new GridLayout(2, false));
Label l1 = new Label(usercomp, SWT.NONE); Label l1 = new Label(usercomp, SWT.NONE);
l1.setLayoutData(new GridData(GridData.BEGINNING)); l1.setLayoutData(new GridData(GridData.BEGINNING));
l1.setText(Messages.getString("ArtifactTab.0")); //$NON-NLS-1$ l1.setText(Messages.getString("ArtifactTab.0")); //$NON-NLS-1$
@ -61,22 +71,22 @@ public class ArtifactTab extends AbstractCBuildPropertyTab {
public void widgetSelected(SelectionEvent e) { public void widgetSelected(SelectionEvent e) {
typeChanged(); typeChanged();
}}); }});
c1.setOrientation(SWT.LEFT_TO_RIGHT);
Label l2 = new Label(usercomp, SWT.NONE); Label l2 = new Label(usercomp, SWT.NONE);
l2.setLayoutData(new GridData(GridData.BEGINNING)); l2.setLayoutData(new GridData(GridData.BEGINNING));
l2.setText(Messages.getString("ArtifactTab.1")); //$NON-NLS-1$ l2.setText(Messages.getString("ArtifactTab.1")); //$NON-NLS-1$
t2 = new Text(usercomp, SWT.BORDER); t2 = setCombo(FIELD.NAME, set2);
t2.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
t2.addModifyListener(new ModifyListener() { t2.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) { public void modifyText(ModifyEvent e) {
if (canModify) if (canModify)
fCfg.setArtifactName(t2.getText()); fCfg.setArtifactName(t2.getText());
}} ); }} );
Label l3 = new Label(usercomp, SWT.NONE); Label l3 = new Label(usercomp, SWT.NONE);
l3.setLayoutData(new GridData(GridData.BEGINNING)); l3.setLayoutData(new GridData(GridData.BEGINNING));
l3.setText(Messages.getString("ArtifactTab.2")); //$NON-NLS-1$ l3.setText(Messages.getString("ArtifactTab.2")); //$NON-NLS-1$
t3 = new Text(usercomp, SWT.BORDER); t3 = setCombo(FIELD.EXT, set3);
t3.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
t3.addModifyListener(new ModifyListener() { t3.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) { public void modifyText(ModifyEvent e) {
if (canModify) if (canModify)
@ -86,8 +96,7 @@ public class ArtifactTab extends AbstractCBuildPropertyTab {
l4 = new Label(usercomp, SWT.NONE); l4 = new Label(usercomp, SWT.NONE);
l4.setLayoutData(new GridData(GridData.BEGINNING)); l4.setLayoutData(new GridData(GridData.BEGINNING));
l4.setText(Messages.getString("ArtifactTab.3")); //$NON-NLS-1$ l4.setText(Messages.getString("ArtifactTab.3")); //$NON-NLS-1$
t4 = new Text(usercomp, SWT.BORDER); t4 = setCombo(FIELD.PREF, set4);
t4.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
t4.addModifyListener(new ModifyListener() { t4.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) { public void modifyText(ModifyEvent e) {
if (canModify) { if (canModify) {
@ -97,6 +106,7 @@ public class ArtifactTab extends AbstractCBuildPropertyTab {
((IMultiConfiguration)fCfg).setOutputPrefixForPrimaryOutput(t4.getText()); ((IMultiConfiguration)fCfg).setOutputPrefixForPrimaryOutput(t4.getText());
} }
}} ); }} );
updateData(getResDesc()); updateData(getResDesc());
} }
@ -148,6 +158,10 @@ public class ArtifactTab extends AbstractCBuildPropertyTab {
} }
} }
updateCombo(t2);
updateCombo(t3);
updateCombo(t4);
String s = fCfg.getArtifactName(); String s = fCfg.getArtifactName();
if (! page.isMultiCfg() && (s == null || s.trim().length() == 0)) { if (! page.isMultiCfg() && (s == null || s.trim().length() == 0)) {
s = getResDesc().getConfiguration().getProjectDescription().getName(); s = getResDesc().getConfiguration().getProjectDescription().getName();
@ -185,7 +199,7 @@ public class ArtifactTab extends AbstractCBuildPropertyTab {
canModify = true; canModify = true;
} }
public void performApply(ICResourceDescription src, ICResourceDescription dst) { protected void performApply(ICResourceDescription src, ICResourceDescription dst) {
IConfiguration cfg1 = getCfg(src.getConfiguration()); IConfiguration cfg1 = getCfg(src.getConfiguration());
IConfiguration cfg2 = getCfg(dst.getConfiguration()); IConfiguration cfg2 = getCfg(dst.getConfiguration());
cfg2.setArtifactName(cfg1.getArtifactName()); cfg2.setArtifactName(cfg1.getArtifactName());
@ -210,7 +224,7 @@ public class ArtifactTab extends AbstractCBuildPropertyTab {
} }
} }
public void performDefaults() { protected void performDefaults() {
fCfg.setArtifactName(fCfg.getManagedProject().getDefaultArtifactName()); fCfg.setArtifactName(fCfg.getManagedProject().getDefaultArtifactName());
fCfg.setArtifactExtension(null); fCfg.setArtifactExtension(null);
if (tTool != null) if (tTool != null)
@ -237,4 +251,42 @@ public class ArtifactTab extends AbstractCBuildPropertyTab {
return false; return false;
} }
protected void updateButtons() {} // Do nothing. No buttons to update. protected void updateButtons() {} // Do nothing. No buttons to update.
private Combo setCombo(FIELD field, Set<String> set) {
Combo combo = new Combo(usercomp, SWT.BORDER);
combo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
combo.setData(ENUM, field);
combo.setData(SSET, set);
updateCombo(combo);
return combo;
}
@SuppressWarnings("unchecked")
private void updateCombo(Combo combo) {
FIELD field = (FIELD)combo.getData(ENUM);
Set<String> set = (Set<String>)combo.getData(SSET);
if (field == null || set == null)
return;
combo.removeAll();
for (ICConfigurationDescription cf : page.getCfgsEditable()) {
IConfiguration c = getCfg(cf);
String s = null;
switch (field) {
case NAME:
s = c.getArtifactName();
break;
case EXT:
s = c.getArtifactExtension();
break;
case PREF:
ITool t = c.calculateTargetTool();
if(t != null)
s = t.getOutputPrefix();
}
if (s != null && s.trim().length() > 0)
set.add(s.trim());
}
if (set.size() > 0)
combo.setItems(set.toArray(new String[set.size()]));
}
} }

View file

@ -12,7 +12,10 @@ package org.eclipse.cdt.managedbuilder.ui.properties;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Set;
import java.util.TreeSet;
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
import org.eclipse.cdt.core.settings.model.ICMultiItemsHolder; import org.eclipse.cdt.core.settings.model.ICMultiItemsHolder;
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;
@ -36,15 +39,14 @@ import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Text;
public class BuildStepsTab extends AbstractCBuildPropertyTab { public class BuildStepsTab extends AbstractCBuildPropertyTab {
private Combo combo; private Combo combo;
private Text preCmd; private Combo preCmd;
private Text preDes; private Combo preDes;
private Text postCmd; private Combo postCmd;
private Text postDes; private Combo postDes;
private ITool tool; private ITool tool;
private IConfiguration config; private IConfiguration config;
private ICResourceDescription cfgdescr; private ICResourceDescription cfgdescr;
@ -69,6 +71,12 @@ public class BuildStepsTab extends AbstractCBuildPropertyTab {
private static final String RCBS_OVERRIDE = LABEL + ".applicability.rule.override"; //$NON-NLS-1$ private static final String RCBS_OVERRIDE = LABEL + ".applicability.rule.override"; //$NON-NLS-1$
private static final String RCBS_DISABLE = LABEL + ".applicability.rule.disable"; //$NON-NLS-1$ private static final String RCBS_DISABLE = LABEL + ".applicability.rule.disable"; //$NON-NLS-1$
private enum FIELD {PRECMD, PREANN, PSTCMD, PSTANN}
private Set<String> set1 = new TreeSet<String>();
private Set<String> set2 = new TreeSet<String>();
private Set<String> set3 = new TreeSet<String>();
private Set<String> set4 = new TreeSet<String>();
private static final String[] rcbsApplicabilityRules = { private static final String[] rcbsApplicabilityRules = {
new String(UIMessages.getString(RCBS_OVERRIDE)), new String(UIMessages.getString(RCBS_OVERRIDE)),
// new String(ManagedBuilderUIMessages.getResourceString(RCBS_BEFORE)), // new String(ManagedBuilderUIMessages.getResourceString(RCBS_BEFORE)),
@ -93,7 +101,7 @@ public class BuildStepsTab extends AbstractCBuildPropertyTab {
private void createForProject() { private void createForProject() {
Group g1 = setupGroup (usercomp, Messages.getString("BuildStepsTab.2"), 1, GridData.FILL_HORIZONTAL); //$NON-NLS-1$ Group g1 = setupGroup (usercomp, Messages.getString("BuildStepsTab.2"), 1, GridData.FILL_HORIZONTAL); //$NON-NLS-1$
setupLabel(g1, label1, 1, GridData.BEGINNING); setupLabel(g1, label1, 1, GridData.BEGINNING);
preCmd = setupText(g1, 1, GridData.FILL_HORIZONTAL); preCmd = setCombo(g1, FIELD.PRECMD, set1);
preCmd.addModifyListener(new ModifyListener() { preCmd.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) { public void modifyText(ModifyEvent e) {
if (canModify && if (canModify &&
@ -102,7 +110,7 @@ public class BuildStepsTab extends AbstractCBuildPropertyTab {
}}); }});
setupLabel(g1, label2, 1, GridData.BEGINNING); setupLabel(g1, label2, 1, GridData.BEGINNING);
preDes = setupText(g1, 1, GridData.FILL_HORIZONTAL); preDes = setCombo(g1, FIELD.PREANN, set2);
preDes.addModifyListener(new ModifyListener() { preDes.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) { public void modifyText(ModifyEvent e) {
if (canModify && if (canModify &&
@ -112,7 +120,7 @@ public class BuildStepsTab extends AbstractCBuildPropertyTab {
Group g2 = setupGroup (usercomp, Messages.getString("BuildStepsTab.3"), 1, GridData.FILL_HORIZONTAL); //$NON-NLS-1$ Group g2 = setupGroup (usercomp, Messages.getString("BuildStepsTab.3"), 1, GridData.FILL_HORIZONTAL); //$NON-NLS-1$
setupLabel(g2, label1, 1, GridData.BEGINNING); setupLabel(g2, label1, 1, GridData.BEGINNING);
postCmd = setupText(g2, 1, GridData.FILL_HORIZONTAL); postCmd = setCombo(g2, FIELD.PSTCMD, set3);
postCmd.addModifyListener(new ModifyListener() { postCmd.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) { public void modifyText(ModifyEvent e) {
if (canModify && if (canModify &&
@ -121,7 +129,7 @@ public class BuildStepsTab extends AbstractCBuildPropertyTab {
}}); }});
setupLabel(g2, label2, 1, GridData.BEGINNING); setupLabel(g2, label2, 1, GridData.BEGINNING);
postDes = setupText(g2, 1, GridData.FILL_HORIZONTAL); postDes = setCombo(g2, FIELD.PSTANN, set4);
postDes.addModifyListener(new ModifyListener() { postDes.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) { public void modifyText(ModifyEvent e) {
if (canModify && if (canModify &&
@ -145,12 +153,9 @@ public class BuildStepsTab extends AbstractCBuildPropertyTab {
}}); }});
setupLabel(g1, Messages.getString("BuildStepsTab.5"), 1, GridData.BEGINNING); //$NON-NLS-1$ setupLabel(g1, Messages.getString("BuildStepsTab.5"), 1, GridData.BEGINNING); //$NON-NLS-1$
preCmd = setupText(g1, 1, GridData.FILL_HORIZONTAL); preCmd = setCombo(g1, FIELD.PRECMD, set1);
preCmd.addModifyListener(new ModifyListener() { preCmd.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) { public void modifyText(ModifyEvent e) {
// if (page.isForProject())
// getCfg().setPrebuildStep(preCmd.getText());
// else
if (canModify && tool != null) { if (canModify && tool != null) {
IInputType[] ein = tool.getInputTypes(); IInputType[] ein = tool.getInputTypes();
if (ein != null && ein.length > 0) { if (ein != null && ein.length > 0) {
@ -163,12 +168,9 @@ public class BuildStepsTab extends AbstractCBuildPropertyTab {
}}); }});
setupLabel(g1, Messages.getString("BuildStepsTab.6"), 1, GridData.BEGINNING); //$NON-NLS-1$ setupLabel(g1, Messages.getString("BuildStepsTab.6"), 1, GridData.BEGINNING); //$NON-NLS-1$
preDes = setupText(g1, 1, GridData.FILL_HORIZONTAL); preDes = setCombo(g1, FIELD.PREANN, set2);
preDes.addModifyListener(new ModifyListener() { preDes.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) { public void modifyText(ModifyEvent e) {
// if (page.isForProject())
// getCfg().setPreannouncebuildStep(preDes.getText());
// else {
if (canModify && tool != null) { if (canModify && tool != null) {
IOutputType[] out = tool.getOutputTypes(); IOutputType[] out = tool.getOutputTypes();
if (valid(out)) if (valid(out))
@ -177,23 +179,17 @@ public class BuildStepsTab extends AbstractCBuildPropertyTab {
}}); }});
setupLabel(g1, label1, 1, GridData.BEGINNING); setupLabel(g1, label1, 1, GridData.BEGINNING);
postCmd = setupText(g1, 1, GridData.FILL_HORIZONTAL); postCmd = setCombo(g1, FIELD.PSTCMD, set3);
postCmd.addModifyListener(new ModifyListener() { postCmd.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) { public void modifyText(ModifyEvent e) {
// if (page.isForProject())
// getCfg().setPostbuildStep(postCmd.getText());
// else
if (canModify && tool != null) if (canModify && tool != null)
tool.setToolCommand(postCmd.getText()); tool.setToolCommand(postCmd.getText());
}}); }});
setupLabel(g1, label2, 1, GridData.BEGINNING); setupLabel(g1, label2, 1, GridData.BEGINNING);
postDes = setupText(g1, 1, GridData.FILL_HORIZONTAL); postDes = setCombo(g1, FIELD.PSTANN, set4);
postDes.addModifyListener(new ModifyListener() { postDes.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) { public void modifyText(ModifyEvent e) {
// if (page.isForProject())
// getCfg().setPostannouncebuildStep(postDes.getText());
// else
if (canModify && tool != null) if (canModify && tool != null)
tool.setAnnouncement(postDes.getText()); tool.setAnnouncement(postDes.getText());
}}); }});
@ -207,7 +203,13 @@ public class BuildStepsTab extends AbstractCBuildPropertyTab {
} }
private void update() { private void update() {
canModify = false; // avoid changing canModify = false; // avoid changing
updateCombo(preCmd);
updateCombo(preDes);
updateCombo(postCmd);
updateCombo(postDes);
if (page.isForProject()) { if (page.isForProject()) {
preCmd.setText(config.getPrebuildStep()); preCmd.setText(config.getPrebuildStep());
preDes.setText(config.getPreannouncebuildStep()); preDes.setText(config.getPreannouncebuildStep());
@ -219,20 +221,8 @@ public class BuildStepsTab extends AbstractCBuildPropertyTab {
tool = getRcbsTool(rcfg); tool = getRcbsTool(rcfg);
if(tool != null){ if(tool != null){
String s = EMPTY_STR; preCmd.setText(getInputTypes(tool));
IInputType[] tmp = tool.getInputTypes(); preDes.setText(getOutputNames(tool));
if (tmp != null && tmp.length > 0) {
IAdditionalInput[] add = tmp[0].getAdditionalInputs();
if (add != null && add.length > 0)
s = createList(add[0].getPaths());
}
preCmd.setText(s);
s = EMPTY_STR;
IOutputType[] tmp2 = tool.getOutputTypes();
if (tmp2 != null && tmp2.length > 0) {
s = createList(tmp2[0].getOutputNames());
}
preDes.setText(s);
postCmd.setText(tool.getToolCommand()); postCmd.setText(tool.getToolCommand());
postDes.setText(tool.getAnnouncement()); postDes.setText(tool.getAnnouncement());
} else { } else {
@ -244,6 +234,26 @@ public class BuildStepsTab extends AbstractCBuildPropertyTab {
} }
canModify = true; canModify = true;
} }
private String getInputTypes(ITool t) {
String s = EMPTY_STR;
IInputType[] tmp = t.getInputTypes();
if (tmp != null && tmp.length > 0) {
IAdditionalInput[] add = tmp[0].getAdditionalInputs();
if (add != null && add.length > 0)
s = createList(add[0].getPaths());
}
return s;
}
private String getOutputNames(ITool t) {
String s = EMPTY_STR;
IOutputType[] tmp2 = t.getOutputTypes();
if (tmp2 != null && tmp2.length > 0)
s = createList(tmp2[0].getOutputNames());
return s;
}
private ITool getRcbsTool(IFileInfo rcConfig){ private ITool getRcbsTool(IFileInfo rcConfig){
ITool rcbsTools[] = getRcbsTools(rcConfig); ITool rcbsTools[] = getRcbsTools(rcConfig);
@ -407,4 +417,56 @@ public class BuildStepsTab extends AbstractCBuildPropertyTab {
update(); update();
} }
protected void updateButtons() {} // Do nothing. No buttons to update. protected void updateButtons() {} // Do nothing. No buttons to update.
private Combo setCombo(Composite c, FIELD field, Set<String> set) {
Combo combo = new Combo(c, SWT.BORDER);
setupControl(combo, 1, GridData.FILL_HORIZONTAL);
combo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
combo.setData(ENUM, field);
combo.setData(SSET, set);
updateCombo(combo);
return combo;
}
@SuppressWarnings("unchecked")
private void updateCombo(Combo combo) {
FIELD field = (FIELD)combo.getData(ENUM);
Set<String> set = (Set<String>)combo.getData(SSET);
if (field == null || set == null)
return;
combo.removeAll();
boolean prj = page.isForProject();
IConfiguration c = null;
ITool t = null;
if (prj || tool != null) {
for (ICConfigurationDescription cf : page.getCfgsEditable()) {
if (prj) {
c = getCfg(cf);
} else {
ICResourceDescription r = cf.getResourceDescription(cfgdescr.getPath(), false);
t = getRcbsTool((IFileInfo)getResCfg(r));
}
String s = null;
switch (field) {
case PRECMD:
s = prj ? c.getPrebuildStep() : getInputTypes(t);
break;
case PREANN:
s = prj ? c.getPreannouncebuildStep() : getOutputNames(t);
break;
case PSTCMD:
s = prj ? c.getPostbuildStep() : t.getToolCommand();
break;
case PSTANN:
s = prj ? c.getPostannouncebuildStep() : t.getAnnouncement();
break;
}
if (s != null && s.trim().length() > 0)
set.add(s.trim());
}
}
if (set.size() > 0)
combo.setItems(set.toArray(new String[set.size()]));
}
} }