diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildBehaviourTab.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildBehaviourTab.java index 585f931d668..74243e09aa9 100644 --- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildBehaviourTab.java +++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildBehaviourTab.java @@ -11,6 +11,7 @@ *******************************************************************************/ package org.eclipse.cdt.managedbuilder.ui.properties; +import org.eclipse.cdt.core.settings.model.ICMultiItemsHolder; import org.eclipse.cdt.core.settings.model.ICResourceDescription; import org.eclipse.cdt.managedbuilder.core.IBuilder; import org.eclipse.cdt.managedbuilder.core.IConfiguration; @@ -20,6 +21,7 @@ import org.eclipse.cdt.managedbuilder.internal.core.Configuration; import org.eclipse.cdt.newmake.core.IMakeBuilderInfo; import org.eclipse.cdt.ui.CUIPlugin; import org.eclipse.cdt.ui.newui.AbstractCPropertyTab; +import org.eclipse.cdt.ui.newui.ICPropertyProvider; import org.eclipse.cdt.ui.newui.TriButton; import org.eclipse.core.runtime.CoreException; import org.eclipse.swt.SWT; @@ -42,6 +44,8 @@ import org.eclipse.swt.widgets.Text; import org.eclipse.swt.widgets.Widget; public class BuildBehaviourTab extends AbstractCBuildPropertyTab { + + private static int TRI_STATES_SIZE = 4; // Widgets //3 private TriButton b_stopOnError; @@ -170,18 +174,87 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab { t_cmdClean.getAccessible().addAccessibleListener(makeTargetLabelAccessibleListener); } + /** + * + * @return: + * Mode 0: + * 0: bld.isManagedBuildOn() + * 1: bld.isDefaultBuildCmd() + * 2: bld.canKeepEnvironmentVariablesInBuildfile() + * 3: bld.keepEnvironmentVariablesInBuildfile() + * Mode 1: + * 0: isStopOnError + * 1: supportsStopOnError(true) + * 2: bld.supportsStopOnError(false) + * 3: cfg.getInternalBuilderParallel() + */ + static int[] calc3states(ICPropertyProvider p, + TriButton b3, + IConfiguration c, + boolean p0) { + if (p.isMultiCfg() && + b3.in3mode() && + c instanceof ICMultiItemsHolder) + { + IConfiguration[] cfs = (IConfiguration[])((ICMultiItemsHolder)c).getItems(); + IBuilder b = cfs[0].getEditableBuilder(); + int[] res = new int[TRI_STATES_SIZE]; + boolean[] x = new boolean[TRI_STATES_SIZE]; + x[0] = (p0) ? b.isManagedBuildOn() : b.isStopOnError(); + x[1] = (p0) ? b.isDefaultBuildCmd(): b.supportsStopOnError(true); + x[2] = (p0) ? b.canKeepEnvironmentVariablesInBuildfile() : + b.supportsStopOnError(false); + x[3] = (p0) ? b.keepEnvironmentVariablesInBuildfile() : + ((Configuration)cfs[0]).getInternalBuilderParallel(); + for (int i=1; i