1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-22 14:12:10 +02:00

Bug 568397: Add separate text boxes for separate build command and args

Change-Id: I078a1db23a69dcbde503b1dd5e496705ecccc956
This commit is contained in:
Jonah Graham 2021-04-05 14:59:31 -04:00
parent e6d5c634b9
commit b6b66b5457
10 changed files with 297 additions and 114 deletions

View file

@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.cdt.managedbuilder.core; singleton:=true
Bundle-Version: 9.2.100.qualifier
Bundle-Version: 9.3.0.qualifier
Bundle-Activator: org.eclipse.cdt.managedbuilder.core.ManagedBuilderCorePlugin
Bundle-Vendor: %providerName
Bundle-Localization: plugin

View file

@ -1085,6 +1085,7 @@ public class Builder extends HoldsOptions implements IBuilder, IMatchKeyProvider
@Override
public String getArguments() {
String args = getArgumentsAttribute();
if (isDefaultBuildArgsOnly()) {
String stopOnErrCmd = getStopOnErrCmd(isStopOnError());
int parallelNum = getParallelizationNum();
String parallelCmd = isParallelBuildOn() ? getParallelizationCmd(parallelNum) : EMPTY_STRING;
@ -1097,6 +1098,7 @@ public class Builder extends HoldsOptions implements IBuilder, IMatchKeyProvider
args = addCmd(args, stopOnErrCmd);
args = addCmd(args, parallelCmd);
}
return args != null ? args.trim() : null;
}
@ -1877,6 +1879,16 @@ public class Builder extends HoldsOptions implements IBuilder, IMatchKeyProvider
&& superClass != null);
}
@Override
public boolean isDefaultBuildCmdOnly() {
return isExtensionBuilder || (command == null && superClass != null);
}
@Override
public boolean isDefaultBuildArgsOnly() {
return isExtensionBuilder || (args == null && superClass != null);
}
@Override
public boolean isStopOnError() {
if (stopOnErr == null) {
@ -1936,6 +1948,28 @@ public class Builder extends HoldsOptions implements IBuilder, IMatchKeyProvider
}
}
@Override
public void setUseDefaultBuildCmdOnly(boolean on) throws CoreException {
if (!isExtensionBuilder && superClass != null) {
if (on) {
command = null;
} else {
command = getCommand();
}
}
}
@Override
public void setUseDefaultBuildArgsOnly(boolean on) throws CoreException {
if (!isExtensionBuilder && superClass != null) {
if (on) {
args = null;
} else {
args = EMPTY_STRING;
}
}
}
public String getAutoBuildTargetAttribute() {
if (autoBuildTarget == null) {
if (superClass != null)

View file

@ -83,12 +83,41 @@ public interface IMakeCommonBuildInfo {
*/
void setParallelBuildOn(boolean on) throws CoreException;
/**
* @deprecated Use the {@link #isDefaultBuildCmdOnly()} and {@link #isDefaultBuildArgsOnly()}
* @return
*/
@Deprecated
boolean isDefaultBuildCmd();
/**
* @since 9.3
*/
boolean isDefaultBuildCmdOnly();
/**
* @since 9.3
*/
boolean isDefaultBuildArgsOnly();
/**
* @deprecated Use the {@link #setUseDefaultBuildCmdOnly(boolean)} and {@link #setUseDefaultBuildArgsOnly(boolean)}
*/
@Deprecated
void setUseDefaultBuildCmd(boolean on) throws CoreException;
IPath getBuildCommand();
/**
* @since 9.3
*/
void setUseDefaultBuildCmdOnly(boolean on) throws CoreException;
/**
* @since 9.3
*/
void setUseDefaultBuildArgsOnly(boolean on) throws CoreException;
/**
* @deprecated - use setBuildString(BUILD_COMMAND...)
*/

View file

@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.cdt.managedbuilder.ui; singleton:=true
Bundle-Version: 9.3.0.qualifier
Bundle-Version: 9.3.100.qualifier
Bundle-Activator: org.eclipse.cdt.managedbuilder.ui.properties.ManagedBuilderUIPlugin
Bundle-Vendor: %providerName
Bundle-Localization: plugin

View file

@ -23,6 +23,9 @@ public class Messages extends NLS {
public static String ArtifactTab_1;
public static String ArtifactTab_2;
public static String ArtifactTab_3;
public static String BuildBehaviourTab_Build_arguments;
public static String BuildBehaviourTab_Use_custom_build_arguments;
public static String BuildBehaviourTab_Use_standard_build_arguments;
public static String BuilderSettingsTab_0;
public static String BuilderSettingsTab_1;
public static String BuilderSettingsTab_10;
@ -47,6 +50,7 @@ public class Messages extends NLS {
public static String BuilderSettingsTab_7;
public static String BuilderSettingsTab_8;
public static String BuilderSettingsTab_9;
public static String BuilderSettingsTab_Configure_Build_Arguments_In_the_Behavior_tab;
public static String BuildOptionSettingsUI_0;
public static String BuildPropertyPage_error_Unknown_tree_element;
public static String BuildStepsTab_0;

View file

@ -14,6 +14,9 @@
# Roberto Oliveira - Removed an unused message
###############################################################################
BuildBehaviourTab_Use_custom_build_arguments=Use custom build arguments
BuildBehaviourTab_Use_standard_build_arguments=Use standard build arguments
BuildBehaviourTab_Build_arguments=Build arguments:\u0020
BuilderSettingsTab_0=Builder
BuilderSettingsTab_1=Builder &type:
BuilderSettingsTab_2=External builder
@ -38,6 +41,7 @@ BuilderSettingsTab_19=Build (Incremental build)
BuilderSettingsTab_20=Clean
BuilderSettingsTab_21=Build location
BuilderSettingsTab_22=Build &directory:
BuilderSettingsTab_Configure_Build_Arguments_In_the_Behavior_tab=Configure build arguments in the Behavior tab.
BuildStepsTab_0=Command:
BuildStepsTab_1=Description:
BuildStepsTab_2=Pre-build steps

View file

@ -58,8 +58,12 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab {
private static final int SPINNER_MAX_VALUE = 10000;
private static final int SPINNER_MIN_VALUE = 2;
private static final int TRI_STATES_SIZE = 4;
private static final int TRI_STATES_SIZE = 7;
// Widgets
private Button r_useStandardBuildArguments;
private Button r_useCustomBuildArguments;
private Text t_buildArguments;
//3
private Button b_stopOnError; // 3
private Button b_parallel; // 3
@ -69,6 +73,8 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab {
private Button b_parallelUnlimited;
private Spinner s_parallelNumber;
private Group grp_buildSettings;
private Label title2;
private Button b_autoBuild; //3
private Text t_autoBuild;
@ -89,37 +95,35 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab {
usercomp.setLayout(new GridLayout(1, false));
// Build setting group
Group g3 = setupGroup(usercomp, Messages.BuilderSettingsTab_9, 2, GridData.FILL_HORIZONTAL);
grp_buildSettings = setupGroup(usercomp, Messages.BuilderSettingsTab_9, 2, GridData.FILL_HORIZONTAL);
GridLayout gl = new GridLayout(2, true);
gl.verticalSpacing = 0;
gl.marginWidth = 0;
g3.setLayout(gl);
grp_buildSettings.setLayout(gl);
Composite c1 = new Composite(g3, SWT.NONE);
r_useStandardBuildArguments = setupRadio(grp_buildSettings,
Messages.BuildBehaviourTab_Use_standard_build_arguments, 3, GridData.BEGINNING);
Composite c1 = new Composite(grp_buildSettings, SWT.NONE);
setupControl(c1, 1, GridData.FILL_BOTH);
GridData gd = (GridData) c1.getLayoutData();
gd.verticalSpan = 2;
gd.verticalIndent = 0;
c1.setLayoutData(gd);
gl = new GridLayout(1, false);
gl.verticalSpacing = 0;
gl.marginWidth = 0;
gl.marginHeight = 0;
c1.setLayout(gl);
b_stopOnError = setupCheck(c1, Messages.BuilderSettingsTab_10, 1, GridData.BEGINNING);
((GridData) (b_stopOnError.getLayoutData())).horizontalIndent = 15;
Composite c2 = new Composite(g3, SWT.NONE);
Composite c2 = new Composite(grp_buildSettings, SWT.NONE);
setupControl(c2, 1, GridData.FILL_BOTH);
gl = new GridLayout(1, false);
gl.verticalSpacing = 0;
gl.marginWidth = 0;
gl.marginHeight = 0;
c2.setLayout(gl);
b_parallel = setupCheck(c2, Messages.BuilderSettingsTab_EnableParallelBuild, 1, GridData.BEGINNING);
Composite c3 = new Composite(g3, SWT.NONE);
Composite c3 = new Composite(grp_buildSettings, SWT.NONE);
setupControl(c3, 1, GridData.FILL_BOTH);
gl = new GridLayout(2, false);
gl.verticalSpacing = 0;
@ -191,6 +195,24 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab {
}
});
r_useCustomBuildArguments = setupRadio(grp_buildSettings, Messages.BuildBehaviourTab_Use_custom_build_arguments,
3, GridData.BEGINNING);
Composite c0 = setupComposite(grp_buildSettings, 3, GridData.FILL_BOTH);
setupControl(c0, 2, GridData.FILL_BOTH);
setupLabel(c0, Messages.BuildBehaviourTab_Build_arguments, 1, GridData.BEGINNING);
t_buildArguments = setupBlock(c0, r_useCustomBuildArguments);
t_buildArguments.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent e) {
if (!canModify)
return;
String buildArgs = t_buildArguments.getText().trim();
if (!buildArgs.equals(bldr.getArguments())) {
setArguments(buildArgs);
}
}
});
// Workbench behaviour group
AccessibleListener makeTargetLabelAccessibleListener = new AccessibleAdapter() {
@Override
@ -240,19 +262,28 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab {
* @return:
* Mode 0:
* 0: bld.isManagedBuildOn()
* 1: bld.isDefaultBuildCmd()
* 1: N/A
* 2: bld.canKeepEnvironmentVariablesInBuildfile()
* 3: bld.keepEnvironmentVariablesInBuildfile()
* 4: bld.isDefaultBuildCmdOnly()
* 5: bld.isDefaultBuildArgsOnly()
* 6: !bld.isDefaultBuildArgsOnly()
* Mode 1:
* 0: isStopOnError
* 1: supportsStopOnError(true)
* 2: bld.supportsStopOnError(false)
* 3: N/A
* 4: N/A
* 5: bld.isDefaultBuildArgsOnly()
* 6: !bld.isDefaultBuildArgsOnly()
* Mode 2:
* 0: b.isAutoBuildEnable()
* 1: b.isIncrementalBuildEnabled()
* 2: b.isCleanBuildEnabled()
* 3: N/A
* 4: N/A
* 5: N/A
* 6: N/A
*/
static int[] calc3states(ICPropertyProvider p, IConfiguration mcfg, int mode) {
if (p.isMultiCfg() && mcfg instanceof ICMultiItemsHolder) {
@ -264,17 +295,18 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab {
int[] res = new int[TRI_STATES_SIZE];
boolean[] b = new boolean[TRI_STATES_SIZE];
b[0] = m0 ? bldr0.isManagedBuildOn() : (m1 ? bldr0.isStopOnError() : bldr0.isAutoBuildEnable());
b[1] = m0 ? bldr0.isDefaultBuildCmd()
: (m1 ? bldr0.supportsStopOnError(true) : bldr0.isIncrementalBuildEnabled());
b[1] = m0 ? true : (m1 ? bldr0.supportsStopOnError(true) : bldr0.isIncrementalBuildEnabled());
b[2] = m0 ? bldr0.canKeepEnvironmentVariablesInBuildfile()
: (m1 ? bldr0.supportsStopOnError(false) : bldr0.isCleanBuildEnabled());
b[3] = m0 ? bldr0.keepEnvironmentVariablesInBuildfile() : false;
b[4] = m0 ? bldr0.isDefaultBuildCmdOnly() : false;
b[5] = (m0 || m1) ? bldr0.isDefaultBuildArgsOnly() : false;
b[6] = (m0 || m1) ? !bldr0.isDefaultBuildArgsOnly() : false;
for (int i = 1; i < cfgs.length; i++) {
IBuilder bldr = cfgs[i].getBuilder();
if (b[0] != (m0 ? bldr.isManagedBuildOn() : (m1 ? bldr.isStopOnError() : bldr.isAutoBuildEnable())))
res[0] = TRI_UNKNOWN;
if (b[1] != (m0 ? bldr.isDefaultBuildCmd()
: (m1 ? bldr.supportsStopOnError(true) : bldr.isIncrementalBuildEnabled())))
if (b[1] != (m0 ? true : (m1 ? bldr.supportsStopOnError(true) : bldr.isIncrementalBuildEnabled())))
res[1] = TRI_UNKNOWN;
if (b[2] != (m0 ? bldr.canKeepEnvironmentVariablesInBuildfile()
: (m1 ? bldr.supportsStopOnError(false) : bldr.isCleanBuildEnabled())))
@ -282,6 +314,15 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab {
if (b[3] != (m0 ? bldr.keepEnvironmentVariablesInBuildfile() : false)) {
res[3] = TRI_UNKNOWN;
}
if (b[4] != (m0 ? bldr.isDefaultBuildCmdOnly() : false)) {
res[4] = TRI_UNKNOWN;
}
if (b[5] != ((m0 || m1) ? bldr.isDefaultBuildArgsOnly() : false)) {
res[5] = TRI_UNKNOWN;
}
if (b[6] != ((m0 || m1) ? !bldr.isDefaultBuildArgsOnly() : false)) {
res[6] = TRI_UNKNOWN;
}
}
for (int i = 0; i < TRI_STATES_SIZE; i++) {
if (res[i] != TRI_UNKNOWN)
@ -301,8 +342,33 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab {
bldr = (Builder) icfg.getEditableBuilder();
canModify = false;
int[] extStates = calc3states(page, icfg, 1);
boolean external = !isInternalBuilderEnabled();
// use standard build args
if (extStates == null) { // no extended states available
setTriSelection(r_useStandardBuildArguments, bldr.isDefaultBuildArgsOnly());
setTriSelection(r_useCustomBuildArguments, !bldr.isDefaultBuildArgsOnly());
} else {
int standardTri = extStates[5];
int customTri = extStates[6];
if (standardTri == TRI_UNKNOWN || customTri == TRI_UNKNOWN) {
setTriSelection(r_useStandardBuildArguments, TRI_UNKNOWN);
setTriSelection(r_useCustomBuildArguments, TRI_UNKNOWN);
} else {
setTriSelection(r_useStandardBuildArguments, standardTri);
setTriSelection(r_useCustomBuildArguments, customTri);
}
}
t_buildArguments.setText(nonNull(icfg.getBuildArguments()));
r_useStandardBuildArguments.setEnabled(external);
r_useCustomBuildArguments.setEnabled(external);
if (external) {
checkPressed(r_useCustomBuildArguments, false); // do not update
}
// Stop on error
boolean defaultBuildArguments = bldr.isDefaultBuildArgsOnly();
if (defaultBuildArguments) {
if (extStates != null) {
setTriSelection(b_stopOnError, extStates[0]);
b_stopOnError.setEnabled(extStates[1] == TRI_YES && extStates[2] == TRI_YES);
@ -310,8 +376,11 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab {
setTriSelection(b_stopOnError, bldr.isStopOnError());
b_stopOnError.setEnabled(bldr.supportsStopOnError(true) && bldr.supportsStopOnError(false));
}
} else {
b_stopOnError.setEnabled(defaultBuildArguments);
}
updateParallelBlock();
updateParallelBlock(defaultBuildArguments);
// Build commands
extStates = calc3states(page, icfg, 2);
@ -337,7 +406,6 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab {
t_cmdClean.setText(bldr.getBuildAttribute(IBuilder.BUILD_TARGET_CLEAN, EMPTY_STR));
}
boolean external = !isInternalBuilderEnabled();
title2.setVisible(external);
t_autoBuild.setVisible(external);
((Control) t_autoBuild.getData()).setVisible(external);
@ -354,7 +422,7 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab {
canModify = true;
}
private void updateParallelBlock() {
private void updateParallelBlock(boolean defaultBuildArguments) {
// note: for multi-config selection bldr is from Active cfg
boolean isParallelSupported = bldr.supportsParallelBuild();
@ -399,11 +467,15 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab {
s_parallelNumber.setVisible(isParallelSupported);
if (isParallelSupported) {
if (defaultBuildArguments) {
b_parallel.setEnabled(true);
s_parallelNumber.setEnabled(true);
setTriSelection(b_parallel, triSelection);
boolean isParallelSelected = b_parallel.getSelection();
b_parallelOptimal
.setText(MessageFormat.format(Messages.BuilderSettingsTab_UseOptimalJobs, optimalParallelNumber));
b_parallelOptimal.setText(
MessageFormat.format(Messages.BuilderSettingsTab_UseOptimalJobs, optimalParallelNumber));
b_parallelOptimal.setEnabled(isParallelSelected);
b_parallelSpecific.setEnabled(isParallelSelected);
b_parallelUnlimited.setEnabled(isParallelSelected);
@ -416,7 +488,8 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab {
b_parallelSpecific.setSelection(!isOptimal && !isUnlimited);
b_parallelUnlimited.setSelection(isUnlimited);
s_parallelNumber.setEnabled(b_parallelSpecific.getEnabled() && b_parallelSpecific.getSelection());
s_parallelNumber.setSelection(s_parallelNumber.isEnabled() ? parallelNumber : optimalParallelNumber);
s_parallelNumber
.setSelection(s_parallelNumber.isEnabled() ? parallelNumber : optimalParallelNumber);
} else {
b_parallelOptimal.setSelection(true);
b_parallelSpecific.setSelection(false);
@ -424,6 +497,13 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab {
s_parallelNumber.setEnabled(false);
s_parallelNumber.setSelection(optimalParallelNumber);
}
} else {
b_parallel.setEnabled(false);
b_parallelOptimal.setEnabled(false);
b_parallelSpecific.setEnabled(false);
b_parallelUnlimited.setEnabled(false);
s_parallelNumber.setEnabled(false);
}
}
}
@ -527,12 +607,16 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab {
static void copyBuilders(IBuilder b1, IBuilder b2) {
try {
b2.setUseDefaultBuildCmd(b1.isDefaultBuildCmd());
if (!b1.isDefaultBuildCmd()) {
b2.setUseDefaultBuildCmdOnly(b1.isDefaultBuildCmdOnly());
b2.setUseDefaultBuildArgsOnly(b1.isDefaultBuildArgsOnly());
if (!b1.isDefaultBuildCmdOnly()) {
b2.setCommand(b1.getCommand());
b2.setArguments(b1.getArguments());
} else {
b2.setCommand(null);
}
if (!b1.isDefaultBuildArgsOnly()) {
b2.setArguments(b1.getArguments());
} else {
b2.setArguments(null);
}
b2.setStopOnError(b1.isStopOnError());
@ -582,6 +666,18 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab {
updateData(getResDesc());
}
private void setArguments(String makeArgs) {
if (icfg instanceof IMultiConfiguration) {
IConfiguration[] cfs = (IConfiguration[]) ((IMultiConfiguration) icfg).getItems();
for (int i = 0; i < cfs.length; i++) {
IBuilder b = cfs[i].getEditableBuilder();
b.setArguments(makeArgs);
}
} else {
icfg.getEditableBuilder().setArguments(makeArgs);
}
}
private void setParallelDef(boolean def) {
if (icfg instanceof Configuration)
((Configuration) icfg).setParallelDef(def);
@ -626,7 +722,11 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab {
IConfiguration[] cfs = (IConfiguration[]) ((IMultiConfiguration) icfg).getItems();
for (int i = 0; i < cfs.length; i++) {
IBuilder bld = cfs[i].getEditableBuilder();
if (b == b_autoBuild) {
if (b == r_useStandardBuildArguments) {
bld.setUseDefaultBuildArgsOnly(val);
} else if (b == r_useCustomBuildArguments) {
bld.setUseDefaultBuildArgsOnly(!val);
} else if (b == b_autoBuild) {
bld.setAutoBuildEnable(val);
} else if (b == b_cmdBuild) {
bld.setIncrementalBuildEnable(val);
@ -639,7 +739,11 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab {
}
}
} else {
if (b == b_autoBuild) {
if (b == r_useStandardBuildArguments) {
bldr.setUseDefaultBuildArgsOnly(val);
} else if (b == r_useCustomBuildArguments) {
bldr.setUseDefaultBuildArgsOnly(!val);
} else if (b == b_autoBuild) {
bldr.setAutoBuildEnable(val);
} else if (b == b_cmdBuild) {
bldr.setIncrementalBuildEnable(val);
@ -655,4 +759,14 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab {
ManagedBuilderUIPlugin.log(e);
}
}
/**
* Return an empty string is parameter is null
*/
private String nonNull(String maybeNullString) {
if (maybeNullString == null) {
return EMPTY_STR;
}
return maybeNullString;
}
}

View file

@ -48,7 +48,7 @@ import org.eclipse.swt.widgets.Widget;
public class BuilderSettingsTab extends AbstractCBuildPropertyTab {
// Widgets
//1
private Button b_useDefault;
private Button b_useDefaultBuildCommand;
private Combo c_builderType;
private Text t_buildCmd;
//2
@ -85,25 +85,25 @@ public class BuilderSettingsTab extends AbstractCBuildPropertyTab {
}
});
b_useDefault = setupCheck(g1, Messages.BuilderSettingsTab_4, 3, GridData.BEGINNING);
b_useDefaultBuildCommand = setupCheck(g1, Messages.BuilderSettingsTab_4, 3, GridData.BEGINNING);
setupLabel(g1, Messages.BuilderSettingsTab_5, 1, GridData.BEGINNING);
t_buildCmd = setupBlock(g1, b_useDefault);
t_buildCmd = setupBlock(g1, b_useDefaultBuildCommand);
t_buildCmd.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent e) {
if (!canModify)
return;
String fullCommand = t_buildCmd.getText().trim();
String buildCommand = parseMakeCommand(fullCommand);
String buildArgs = fullCommand.substring(buildCommand.length()).trim();
if (!buildCommand.equals(bldr.getCommand()) || !buildArgs.equals(bldr.getArguments())) {
String buildCommand = t_buildCmd.getText().trim();
if (!buildCommand.equals(bldr.getCommand())) {
setCommand(buildCommand);
setArguments(buildArgs);
}
}
});
setupLabel(g1, Messages.BuilderSettingsTab_Configure_Build_Arguments_In_the_Behavior_tab, 2,
GridData.BEGINNING);
Group g2 = setupGroup(usercomp, Messages.BuilderSettingsTab_6, 2, GridData.FILL_HORIZONTAL);
((GridLayout) (g2.getLayout())).makeColumnsEqualWidth = true;
@ -151,7 +151,7 @@ public class BuilderSettingsTab extends AbstractCBuildPropertyTab {
b_genMakefileAuto.setEnabled(icfg.supportsBuild(true));
if (extStates == null) { // no extended states available
BuildBehaviourTab.setTriSelection(b_genMakefileAuto, bldr.isManagedBuildOn());
BuildBehaviourTab.setTriSelection(b_useDefault, bldr.isDefaultBuildCmd());
BuildBehaviourTab.setTriSelection(b_useDefaultBuildCommand, bldr.isDefaultBuildCmdOnly());
// b_expandVars.setGrayed(false);
if (!bldr.canKeepEnvironmentVariablesInBuildfile())
b_expandVars.setEnabled(false);
@ -161,7 +161,7 @@ public class BuilderSettingsTab extends AbstractCBuildPropertyTab {
}
} else {
BuildBehaviourTab.setTriSelection(b_genMakefileAuto, extStates[0]);
BuildBehaviourTab.setTriSelection(b_useDefault, extStates[1]);
BuildBehaviourTab.setTriSelection(b_useDefaultBuildCommand, extStates[4]);
if (extStates[2] != BuildBehaviourTab.TRI_YES)
b_expandVars.setEnabled(false);
else {
@ -172,7 +172,7 @@ public class BuilderSettingsTab extends AbstractCBuildPropertyTab {
c_builderType.select(isInternalBuilderEnabled() ? 1 : 0);
c_builderType.setEnabled(canEnableInternalBuilder(true) && canEnableInternalBuilder(false));
t_buildCmd.setText(getMakeCommand());
t_buildCmd.setText(nonNull(icfg.getBuildCommand()));
if (page.isMultiCfg()) {
group_dir.setVisible(false);
@ -187,16 +187,16 @@ public class BuilderSettingsTab extends AbstractCBuildPropertyTab {
}
boolean external = (c_builderType.getSelectionIndex() == 0);
b_useDefault.setEnabled(external);
b_useDefaultBuildCommand.setEnabled(external);
t_buildCmd.setEnabled(external);
((Control) t_buildCmd.getData()).setEnabled(external & !b_useDefault.getSelection());
((Control) t_buildCmd.getData()).setEnabled(external & !b_useDefaultBuildCommand.getSelection());
b_genMakefileAuto.setEnabled(external && icfg.supportsBuild(true));
if (b_expandVars.getEnabled())
b_expandVars.setEnabled(external && b_genMakefileAuto.getSelection());
if (external) { // just set relatet text widget state,
checkPressed(b_useDefault, false); // do not update
checkPressed(b_useDefaultBuildCommand, false); // do not update
}
canModify = true;
}
@ -278,7 +278,7 @@ public class BuilderSettingsTab extends AbstractCBuildPropertyTab {
if (b.getData() instanceof Text) {
Text t = (Text) b.getData();
if (b == b_useDefault) {
if (b == b_useDefaultBuildCommand) {
val = !val;
}
t.setEnabled(val);
@ -292,7 +292,7 @@ public class BuilderSettingsTab extends AbstractCBuildPropertyTab {
if (!needUpdate)
return;
if (b == b_useDefault) {
if (b == b_useDefaultBuildCommand) {
setUseDefaultBuildCmd(!val);
} else if (b == b_genMakefileAuto) {
setManagedBuild(val);
@ -303,17 +303,14 @@ public class BuilderSettingsTab extends AbstractCBuildPropertyTab {
}
/**
* @return make command
* Return an empty string is parameter is null
*/
private String getMakeCommand() {
String makeCommand = icfg.getBuildCommand();
String makeArgs = icfg.getBuildArguments();
if (!makeCommand.isEmpty() && makeArgs != null) {
return makeCommand + " " + makeArgs; //$NON-NLS-1$
}
private String nonNull(String maybeNullString) {
if (maybeNullString == null) {
return EMPTY_STR;
}
return maybeNullString;
}
/**
* Performs common settings for all controls
@ -332,20 +329,6 @@ public class BuilderSettingsTab extends AbstractCBuildPropertyTab {
BuildBehaviourTab.apply(src, dst, page.isMultiCfg());
}
/* (non-Javadoc)
*
* @param string
* @return
*/
private String parseMakeCommand(String rawCommand) {
String[] result = rawCommand.split("\\s"); //$NON-NLS-1$
if (result != null && result.length > 0)
return result[0];
else
return rawCommand;
}
// This page can be displayed for project only
@Override
public boolean canBeVisible() {
@ -400,10 +383,10 @@ public class BuilderSettingsTab extends AbstractCBuildPropertyTab {
for (int i = 0; i < cfs.length; i++) {
IBuilder b = cfs[i].getEditableBuilder();
if (b != null)
b.setUseDefaultBuildCmd(val);
b.setUseDefaultBuildCmdOnly(val);
}
} else {
icfg.getEditableBuilder().setUseDefaultBuildCmd(val);
icfg.getEditableBuilder().setUseDefaultBuildCmdOnly(val);
}
} catch (CoreException e) {
ManagedBuilderUIPlugin.log(e);
@ -435,18 +418,6 @@ public class BuilderSettingsTab extends AbstractCBuildPropertyTab {
}
}
private void setArguments(String makeArgs) {
if (icfg instanceof IMultiConfiguration) {
IConfiguration[] cfs = (IConfiguration[]) ((IMultiConfiguration) icfg).getItems();
for (int i = 0; i < cfs.length; i++) {
IBuilder b = cfs[i].getEditableBuilder();
b.setArguments(makeArgs);
}
} else {
icfg.getEditableBuilder().setArguments(makeArgs);
}
}
private void setBuildPath(String path) {
if (icfg instanceof IMultiConfiguration) {
IConfiguration[] cfs = (IConfiguration[]) ((IMultiConfiguration) icfg).getItems();

View file

@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.cdt.ui; singleton:=true
Bundle-Version: 7.1.100.qualifier
Bundle-Version: 7.2.0.qualifier
Bundle-Activator: org.eclipse.cdt.ui.CUIPlugin
Bundle-Vendor: %providerName
Bundle-Localization: plugin

View file

@ -378,6 +378,16 @@ public abstract class AbstractCPropertyTab implements ICPropertyTab {
return g;
}
/**
* @since 7.2
*/
protected Composite setupComposite(Composite c, int cols, int mode) {
Composite c1 = new Composite(c, SWT.NONE);
c1.setLayout(new GridLayout(cols, false));
setupControl(c1, 1, mode);
return c1;
}
protected Button setupCheck(Composite c, String name, int span, int mode) {
Button b = new Button(c, SWT.CHECK);
b.setText(name);
@ -392,6 +402,23 @@ public abstract class AbstractCPropertyTab implements ICPropertyTab {
return b;
}
/**
* @since 7.2
*/
protected Button setupRadio(Composite c, String name, int span, int mode) {
Button b = new Button(c, SWT.RADIO);
b.setText(name);
setupControl(b, span, mode);
b.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent event) {
((Button) event.widget).setGrayed(false);
checkPressed(event);
}
});
return b;
}
/**
* Selection handler for checkbox created
* by methods "setupCheck()" or "setupTri()"