/******************************************************************************* * Copyright (c) 2000, 2010 QNX Software Systems 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: * QNX Software Systems - initial API and implementation * Tianchao Li (tianchao.li@gmail.com) - arbitrary build directory (bug #136136) *******************************************************************************/ package org.eclipse.cdt.make.ui.dialogs; import org.eclipse.cdt.make.core.IMakeBuilderInfo; import org.eclipse.cdt.make.core.IMakeCommonBuildInfo; import org.eclipse.cdt.make.core.MakeCorePlugin; import org.eclipse.cdt.make.internal.ui.MakeUIPlugin; import org.eclipse.cdt.make.ui.IMakeHelpContextIds; import org.eclipse.cdt.ui.dialogs.AbstractCOptionPage; import org.eclipse.cdt.ui.dialogs.ICOptionContainer; import org.eclipse.cdt.utils.ui.controls.ControlFactory; import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.resources.IWorkspaceRunnable; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Preferences; import org.eclipse.debug.ui.StringVariableSelectionDialog; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.jface.window.Window; import org.eclipse.swt.SWT; import org.eclipse.swt.accessibility.AccessibleAdapter; import org.eclipse.swt.accessibility.AccessibleEvent; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.DirectoryDialog; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.dialogs.ContainerSelectionDialog; /** * @deprecated as of CDT 4.0. This tab was used to set preferences/properties * for 3.X style projects. * * @noextend This class is not intended to be subclassed by clients. * @noinstantiate This class is not intended to be instantiated by clients. */ @Deprecated public class SettingsBlock extends AbstractCOptionPage { private static final String PREFIX = "SettingsBlock"; //$NON-NLS-1$ private static final String MAKE_LABEL = PREFIX + ".label"; //$NON-NLS-1$ private static final String MAKE_MESSAGE = PREFIX + ".message"; //$NON-NLS-1$ private static final String MAKE_SETTING_GROUP = PREFIX + ".makeSetting.group_label"; //$NON-NLS-1$ private static final String MAKE_SETTING_STOP_ERROR = PREFIX + ".makeSetting.stopOnError"; //$NON-NLS-1$ private static final String MAKE_CMD_GROUP = PREFIX + ".makeCmd.group_label"; //$NON-NLS-1$ private static final String MAKE_CMD_USE_DEFAULT = PREFIX + ".makeCmd.use_default"; //$NON-NLS-1$ private static final String MAKE_CMD_LABEL = PREFIX + ".makeCmd.label"; //$NON-NLS-1$ private static final String MAKE_WORKBENCH_BUILD_GROUP = PREFIX + ".makeWorkbench.group_label"; //$NON-NLS-1$ private static final String MAKE_WORKBENCH_BUILD_TYPE = PREFIX + ".makeWorkbench.type"; //$NON-NLS-1$ private static final String MAKE_WORKBENCH_BUILD_TARGET = PREFIX + ".makeWorkbench.target"; //$NON-NLS-1$ private static final String MAKE_WORKBENCH_BUILD_AUTO = PREFIX + ".makeWorkbench.auto"; //$NON-NLS-1$ private static final String MAKE_WORKBENCH_BUILD_INCR = PREFIX + ".makeWorkbench.incremental"; //$NON-NLS-1$ // private static final String MAKE_WORKBENCH_BUILD_FULL = PREFIX + ".makeWorkbench.full"; //$NON-NLS-1$ private static final String MAKE_WORKBENCH_BUILD_CLEAN = PREFIX + ".makeWorkbench.clean"; //$NON-NLS-1$ private static final String MAKE_BUILD_DIR_GROUP = PREFIX + ".makeLoc.group_label"; //$NON-NLS-1$ private static final String MAKE_BUILD_DIR_LABEL = PREFIX + ".makeDir.label"; //$NON-NLS-1$ private static final String MAKE_BUILD_DIR_BROWSE_FILESYSTEM = PREFIX + ".makeDir.browseFilesystem"; //$NON-NLS-1$ private static final String MAKE_BUILD_DIR_BROWSE_WORKSPACE = PREFIX + ".makeDir.browseWorkspace"; //$NON-NLS-1$ private static final String MAKE_BUILD_AUTO_TARGET = PREFIX + ".makeWorkbench.autoBuildTarget"; //$NON-NLS-1$ private static final String MAKE_BUILD_INCREMENTAL_TARGET = PREFIX + ".makeWorkbench.incrementalBuildTarget"; //$NON-NLS-1$ // private static final String MAKE_BUILD_FULL_TARGET = PREFIX + ".makeWorkbench.fullBuildTarget"; //$NON-NLS-1$ private static final String MAKE_BUILD_CLEAN_TARGET = PREFIX + ".makeWorkbench.cleanTarget"; //$NON-NLS-1$ Button stopOnErrorButton; Button defButton; Text buildCommand; Button argumentVariablesButton; Text buildLocation; Button locationVariablesButton; Text targetIncr; Text targetAuto; Text targetClean; Button incrButton; Button autoButton; Button cleanButton; Button incrVariableButton; Button autoVariableButton; Button cleanVariableButton; IMakeBuilderInfo fBuildInfo; Preferences fPrefs; String fBuilderID; public SettingsBlock(Preferences prefs, String builderID) { super(MakeUIPlugin.getResourceString(MAKE_LABEL)); setDescription(MakeUIPlugin.getResourceString(MAKE_MESSAGE)); fPrefs = prefs; fBuilderID = builderID; } protected void createSettingControls(Composite parent) { Group group = ControlFactory.createGroup(parent, MakeUIPlugin.getResourceString(MAKE_SETTING_GROUP), 1); stopOnErrorButton = new Button(group, SWT.CHECK); stopOnErrorButton.setText(MakeUIPlugin.getResourceString(MAKE_SETTING_STOP_ERROR)); if (fBuildInfo.isStopOnError()) { stopOnErrorButton.setSelection(true); } stopOnErrorButton.setEnabled(fBuildInfo.isDefaultBuildCmd()); } protected void createBuildCmdControls(Composite parent) { Group group = ControlFactory.createGroup(parent, MakeUIPlugin.getResourceString(MAKE_CMD_GROUP), 1); GridLayout layout = new GridLayout(); layout.numColumns = 3; layout.makeColumnsEqualWidth = false; group.setLayout(layout); group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); defButton = ControlFactory.createCheckBox(group, MakeUIPlugin.getResourceString(MAKE_CMD_USE_DEFAULT)); defButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { if (defButton.getSelection() == true) { buildCommand.setEnabled(false); argumentVariablesButton.setEnabled(false); stopOnErrorButton.setEnabled(true); getContainer().updateContainer(); } else { buildCommand.setEnabled(true); argumentVariablesButton.setEnabled(true); stopOnErrorButton.setEnabled(false); getContainer().updateContainer(); } } }); GridData gd = new GridData(GridData.FILL_HORIZONTAL); gd.horizontalSpan = 3; defButton.setLayoutData(gd); Label label = ControlFactory.createLabel(group, MakeUIPlugin.getResourceString(MAKE_CMD_LABEL)); ((GridData) (label.getLayoutData())).horizontalAlignment = GridData.BEGINNING; ((GridData) (label.getLayoutData())).grabExcessHorizontalSpace = false; buildCommand = ControlFactory.createTextField(group, SWT.SINGLE | SWT.BORDER); ((GridData) (buildCommand.getLayoutData())).horizontalAlignment = GridData.FILL; ((GridData) (buildCommand.getLayoutData())).grabExcessHorizontalSpace = true; buildCommand.addListener(SWT.Modify, new Listener() { public void handleEvent(Event e) { getContainer().updateContainer(); } }); if (fBuildInfo.getBuildAttribute(IMakeCommonBuildInfo.BUILD_COMMAND, null) != null) { StringBuffer cmd = new StringBuffer(fBuildInfo.getBuildAttribute(IMakeCommonBuildInfo.BUILD_COMMAND, "")); //$NON-NLS-1$ if (!fBuildInfo.isDefaultBuildCmd()) { String args = fBuildInfo.getBuildAttribute(IMakeCommonBuildInfo.BUILD_ARGUMENTS, ""); //$NON-NLS-1$ if (args != null && !args.equals("")) { //$NON-NLS-1$ cmd.append(" "); //$NON-NLS-1$ cmd.append(args); } } buildCommand.setText(cmd.toString()); } argumentVariablesButton = addVariablesButton(group, buildCommand); if (fBuildInfo.isDefaultBuildCmd()) { buildCommand.setEnabled(false); argumentVariablesButton.setEnabled(false); } defButton.setSelection(fBuildInfo.isDefaultBuildCmd()); } protected void createWorkBenchBuildControls(Composite parent) { SelectionAdapter selectionAdapter = new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { targetAuto.setEnabled(autoButton.getSelection()); autoVariableButton.setEnabled(autoButton.getSelection()); targetIncr.setEnabled(incrButton.getSelection()); incrVariableButton.setEnabled(incrButton.getSelection()); targetClean.setEnabled(cleanButton.getSelection()); cleanVariableButton.setEnabled(cleanButton.getSelection()); getContainer().updateContainer(); } }; Group group = ControlFactory.createGroup(parent, MakeUIPlugin.getResourceString(MAKE_WORKBENCH_BUILD_GROUP), 1); GridLayout layout = new GridLayout(); layout.numColumns = 3; layout.makeColumnsEqualWidth = false; group.setLayout(layout); group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); Label label = new Label(group, SWT.NONE); label.setText(MakeUIPlugin.getResourceString(MAKE_WORKBENCH_BUILD_TYPE)); label = new Label(group, SWT.NONE); label.setText(MakeUIPlugin.getResourceString(MAKE_WORKBENCH_BUILD_TARGET)); GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_FILL); gd.horizontalSpan = 2; label.setLayoutData(gd); autoButton = ControlFactory.createCheckBox(group, MakeUIPlugin.getResourceString(MAKE_WORKBENCH_BUILD_AUTO)); autoButton.addSelectionListener(selectionAdapter); autoButton.setSelection(fBuildInfo.isAutoBuildEnable()); targetAuto = ControlFactory.createTextField(group, SWT.SINGLE | SWT.BORDER); targetAuto.setText(fBuildInfo.getBuildAttribute(IMakeBuilderInfo.BUILD_TARGET_AUTO, "")); //$NON-NLS-1$ ((GridData) (targetAuto.getLayoutData())).horizontalAlignment = GridData.FILL; ((GridData) (targetAuto.getLayoutData())).grabExcessHorizontalSpace = true; addControlAccessibleListener(targetAuto, MakeUIPlugin.getResourceString(MAKE_BUILD_AUTO_TARGET)); autoVariableButton = addVariablesButton(group, targetAuto); String noteTitle = MakeUIPlugin.getResourceString("SettingsBlock.makeWorkbench.note"); //$NON-NLS-1$ String noteMessage = MakeUIPlugin.getResourceString("SettingsBlock.makeWorkbench.autobuildMessage"); //$NON-NLS-1$ Composite noteControl = createNoteComposite(JFaceResources.getDialogFont(), group, noteTitle, noteMessage); gd = new GridData(GridData.HORIZONTAL_ALIGN_FILL); gd.horizontalSpan = 3; noteControl.setLayoutData(gd); incrButton = ControlFactory.createCheckBox(group, MakeUIPlugin.getResourceString(MAKE_WORKBENCH_BUILD_INCR)); incrButton.addSelectionListener(selectionAdapter); incrButton.setSelection(fBuildInfo.isIncrementalBuildEnabled()); targetIncr = ControlFactory.createTextField(group, SWT.SINGLE | SWT.BORDER); targetIncr.setText(fBuildInfo.getBuildAttribute(IMakeBuilderInfo.BUILD_TARGET_INCREMENTAL, "")); //$NON-NLS-1$ ((GridData) (targetIncr.getLayoutData())).horizontalAlignment = GridData.FILL; ((GridData) (targetIncr.getLayoutData())).grabExcessHorizontalSpace = true; addControlAccessibleListener(targetIncr, MakeUIPlugin.getResourceString(MAKE_BUILD_INCREMENTAL_TARGET)); incrVariableButton = addVariablesButton(group, targetIncr); cleanButton = ControlFactory.createCheckBox(group, MakeUIPlugin.getResourceString(MAKE_WORKBENCH_BUILD_CLEAN)); cleanButton.addSelectionListener(selectionAdapter); cleanButton.setSelection(fBuildInfo.isCleanBuildEnabled()); targetClean = ControlFactory.createTextField(group, SWT.SINGLE | SWT.BORDER); targetClean.setText(fBuildInfo.getBuildAttribute(IMakeBuilderInfo.BUILD_TARGET_CLEAN, "")); //$NON-NLS-1$ ((GridData) (targetClean.getLayoutData())).horizontalAlignment = GridData.FILL; ((GridData) (targetClean.getLayoutData())).grabExcessHorizontalSpace = true; addControlAccessibleListener(targetClean, MakeUIPlugin.getResourceString(MAKE_BUILD_CLEAN_TARGET)); cleanVariableButton = addVariablesButton(group, targetClean); selectionAdapter.widgetSelected(null); } private Button addVariablesButton(Composite parent, final Text control) { String variablesTitle = MakeUIPlugin.getResourceString("SettingsBlock.variables"); //$NON-NLS-1$ Button variablesButton = createPushButton(parent, variablesTitle, null); GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_END); variablesButton.setLayoutData(gd); variablesButton.addSelectionListener(new SelectionAdapter() { /* * (non-Javadoc) * * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent) */ @Override public void widgetSelected(SelectionEvent arg0) { handleVariablesButtonSelected(control); } }); return variablesButton; } protected Composite createNoteComposite(Font font, Composite composite, String title, String message) { Composite messageComposite = new Composite(composite, SWT.NONE); GridLayout messageLayout = new GridLayout(); messageLayout.numColumns = 2; messageLayout.marginWidth = 0; messageLayout.marginHeight = 0; messageComposite.setLayout(messageLayout); messageComposite.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL)); messageComposite.setFont(font); final Label noteLabel = new Label(messageComposite, SWT.BOLD); noteLabel.setText(title); noteLabel.setFont(JFaceResources.getBannerFont()); noteLabel.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING)); final IPropertyChangeListener fontListener = new IPropertyChangeListener() { public void propertyChange(PropertyChangeEvent event) { if (JFaceResources.BANNER_FONT.equals(event.getProperty())) { noteLabel.setFont(JFaceResources.getFont(JFaceResources.BANNER_FONT)); } } }; JFaceResources.getFontRegistry().addListener(fontListener); noteLabel.addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent event) { JFaceResources.getFontRegistry().removeListener(fontListener); } }); Label messageLabel = new Label(messageComposite, SWT.WRAP); messageLabel.setText(message); messageLabel.setFont(font); return messageComposite; } public void addControlAccessibleListener(Control control, String controlName) { control.getAccessible().addAccessibleListener(new ControlAccessibleListener(controlName)); } private class ControlAccessibleListener extends AccessibleAdapter { private String controlName; ControlAccessibleListener(String name) { controlName = name; } @Override public void getName(AccessibleEvent e) { e.result = controlName; } } protected void createBuilderWorkingDirControls(Composite parent) { Group group = ControlFactory.createGroup(parent, MakeUIPlugin.getResourceString(MAKE_BUILD_DIR_GROUP), 1); GridLayout layout = new GridLayout(); layout.numColumns = 2; layout.makeColumnsEqualWidth = false; group.setLayout(layout); group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); Label label = ControlFactory.createLabel(group, MakeUIPlugin.getResourceString(MAKE_BUILD_DIR_LABEL)); ((GridData) (label.getLayoutData())).horizontalAlignment = GridData.BEGINNING; ((GridData) (label.getLayoutData())).grabExcessHorizontalSpace = false; buildLocation = ControlFactory.createTextField(group, SWT.SINGLE | SWT.BORDER); ((GridData) (buildLocation.getLayoutData())).horizontalAlignment = GridData.FILL; ((GridData) (buildLocation.getLayoutData())).grabExcessHorizontalSpace = true; buildLocation.addListener(SWT.Modify, new Listener() { public void handleEvent(Event e) { getContainer().updateContainer(); } }); Composite buttons = ControlFactory.createComposite(group, 4); layout = new GridLayout(4, false); layout.marginHeight = layout.marginWidth = 0; buttons.setLayout(layout); GridData gd = new GridData(GridData.FILL_HORIZONTAL); gd.horizontalSpan = 2; buttons.setLayoutData(gd); Label emptyLabel = ControlFactory.createLabel(buttons, ""); //$NON-NLS-1$ emptyLabel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); Button browseWorkspace = new Button(buttons, SWT.NONE); browseWorkspace.setText(MakeUIPlugin.getResourceString(MAKE_BUILD_DIR_BROWSE_WORKSPACE)); browseWorkspace.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { ContainerSelectionDialog dialog = new ContainerSelectionDialog(getShell(), getContainer().getProject(), true, MakeUIPlugin.getResourceString("SettingsBlock.title.selectLocationToBuildFrom")); //$NON-NLS-1$ if (dialog.open() == Window.OK) { Object[] selection = dialog.getResult(); if (selection.length > 0) { buildLocation.setText( ((IPath)selection[0]).toOSString()); } } } }); Button browseFilesystem = new Button(buttons, SWT.NONE); browseFilesystem.setText(MakeUIPlugin.getResourceString(MAKE_BUILD_DIR_BROWSE_FILESYSTEM)); browseFilesystem.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { DirectoryDialog dialog = new DirectoryDialog(getShell(), SWT.NONE); dialog.setText(MakeUIPlugin.getResourceString("SettingsBlock.title.selectLocationToBuildFrom")); //$NON-NLS-1$ dialog.setFilterPath(getContainer().getProject().toString()); String directory = dialog.open(); if (directory != null) { if (directory.trim().length() > 0) { buildLocation.setText(directory); } } } }); buildLocation.setText(fBuildInfo.getBuildAttribute(IMakeCommonBuildInfo.BUILD_LOCATION, "")); //$NON-NLS-1$ locationVariablesButton = addVariablesButton(buttons, buildLocation); } /** * A variable entry button has been pressed for the given text field. Prompt * the user for a variable and enter the result in the given field. */ private void handleVariablesButtonSelected(Text textField) { String variable = getVariable(); if (variable != null) { textField.append(variable); } } /** * Prompts the user to choose and configure a variable and returns the * resulting string, suitable to be used as an attribute. */ private String getVariable() { StringVariableSelectionDialog dialog = new StringVariableSelectionDialog(getShell()); dialog.open(); return dialog.getVariableExpression(); } @Override public void createControl(Composite parent) { Composite composite = ControlFactory.createComposite(parent, 1); setControl(composite); MakeUIPlugin.getDefault().getWorkbench().getHelpSystem().setHelp(getControl(), IMakeHelpContextIds.MAKE_BUILDER_SETTINGS); if (fBuildInfo == null) { ControlFactory.createEmptySpace(composite); ControlFactory.createLabel(composite, MakeUIPlugin.getResourceString("SettingsBlock.label.missingBuilderInformation")); //$NON-NLS-1$ return; } createBuildCmdControls(composite); createSettingControls(composite); createWorkBenchBuildControls(composite); if (getContainer().getProject() != null) { createBuilderWorkingDirControls(composite); } } @Override public boolean isValid() { if (defButton != null && defButton.getSelection() != true) { String cmd = getBuildLine(); if (cmd == null || cmd.length() == 0) { return false; } } return true; } @Override public void performApply(IProgressMonitor monitor) throws CoreException { // Missing builder info if (fBuildInfo == null) { return; } if (monitor == null) { monitor = new NullProgressMonitor(); } IWorkspace workspace = MakeUIPlugin.getWorkspace(); // To avoid multi-build IWorkspaceRunnable operation = new IWorkspaceRunnable() { public void run(IProgressMonitor monitor) throws CoreException { monitor.beginTask(MakeUIPlugin.getResourceString("SettingsBlock.monitor.applyingSettings"), 1); //$NON-NLS-1$ IMakeBuilderInfo info = null; if (getContainer().getProject() != null) { try { info = MakeCorePlugin.createBuildInfo(getContainer().getProject(), fBuilderID); } catch (CoreException e) { // disabled builder... just log it MakeCorePlugin.log(e); return; } } else { info = MakeCorePlugin.createBuildInfo(fPrefs, fBuilderID, false); } info.setStopOnError(isStopOnError()); info.setUseDefaultBuildCmd(useDefaultBuildCmd()); if (!useDefaultBuildCmd()) { String bldLine = getBuildLine(); int start = 0; int end = -1; if (!bldLine.startsWith("\"")) { //$NON-NLS-1$ end = bldLine.indexOf(' '); } else { start = 1; end = bldLine.indexOf('"', 1); } String path; if (end == -1) { path = bldLine; } else { path = bldLine.substring(start, end); } info.setBuildAttribute(IMakeBuilderInfo.BUILD_COMMAND, path); String args = ""; //$NON-NLS-1$ if (end != -1) { args = bldLine.substring(end + 1); } info.setBuildAttribute(IMakeBuilderInfo.BUILD_ARGUMENTS, args); } info.setAutoBuildEnable(autoButton.getSelection()); info.setBuildAttribute(IMakeBuilderInfo.BUILD_TARGET_AUTO, targetAuto.getText().trim()); info.setIncrementalBuildEnable(incrButton.getSelection()); info.setBuildAttribute(IMakeBuilderInfo.BUILD_TARGET_INCREMENTAL, targetIncr.getText().trim()); info.setFullBuildEnable(incrButton.getSelection()); info.setCleanBuildEnable(cleanButton.getSelection()); info.setBuildAttribute(IMakeBuilderInfo.BUILD_TARGET_CLEAN, targetClean.getText().trim()); if (buildLocation != null) { info.setBuildAttribute(IMakeBuilderInfo.BUILD_LOCATION, buildLocation.getText().trim()); } } }; if (getContainer().getProject() != null) { workspace.run(operation, monitor); } else { operation.run(monitor); } } @Override public void performDefaults() { // Missing builder info if (fBuildInfo == null) { return; } IMakeBuilderInfo info; if (getContainer().getProject() != null) { info = MakeCorePlugin.createBuildInfo(fPrefs, fBuilderID, false); } else { info = MakeCorePlugin.createBuildInfo(fPrefs, fBuilderID, true); } if (info.isStopOnError()) stopOnErrorButton.setSelection(true); else stopOnErrorButton.setSelection(false); if (info.getBuildCommand() != null) { StringBuffer cmd = new StringBuffer(info.getBuildCommand().toOSString()); if (!info.isDefaultBuildCmd()) { String args = info.getBuildArguments(); if (args != null && !args.equals("")) { //$NON-NLS-1$ cmd.append(" "); //$NON-NLS-1$ cmd.append(args); } } buildCommand.setText(cmd.toString()); } if (info.isDefaultBuildCmd()) { buildCommand.setEnabled(false); argumentVariablesButton.setEnabled(false); stopOnErrorButton.setEnabled(true); } else { buildCommand.setEnabled(true); argumentVariablesButton.setEnabled(true); stopOnErrorButton.setEnabled(false); } defButton.setSelection(info.isDefaultBuildCmd()); autoButton.setSelection(info.isAutoBuildEnable()); autoVariableButton.setEnabled(info.isAutoBuildEnable()); targetAuto.setEnabled(info.isAutoBuildEnable()); targetAuto.setText(info.getAutoBuildTarget()); incrButton.setSelection(info.isIncrementalBuildEnabled()); incrVariableButton.setEnabled(info.isIncrementalBuildEnabled()); targetIncr.setText(info.getIncrementalBuildTarget()); targetIncr.setEnabled(info.isIncrementalBuildEnabled()); cleanButton.setSelection(info.isCleanBuildEnabled()); cleanVariableButton.setEnabled(info.isCleanBuildEnabled()); targetClean.setText(info.getCleanBuildTarget()); targetClean.setEnabled(info.isCleanBuildEnabled()); } boolean isStopOnError() { return stopOnErrorButton.getSelection(); } boolean useDefaultBuildCmd() { return defButton.getSelection(); } String getBuildLine() { if (buildCommand != null) { String cmd = buildCommand.getText(); if (cmd != null) return cmd.trim(); } return null; } @Override public void setContainer(ICOptionContainer container) { super.setContainer(container); if (getContainer().getProject() != null) { try { fBuildInfo = MakeCorePlugin.createBuildInfo(getContainer().getProject(), fBuilderID); } catch (CoreException e) { } } else { fBuildInfo = MakeCorePlugin.createBuildInfo(fPrefs, fBuilderID, false); } } @Override public String getErrorMessage() { if (!useDefaultBuildCmd()) { String cmd = getBuildLine(); if (cmd == null || cmd.length() == 0) { return MakeUIPlugin.getResourceString("SettingsBlock.message.mustEnterBuildCommand"); //$NON-NLS-1$ } } return null; } }