/******************************************************************************* * Copyright (c) 2015 Bruno Medeiros and other Contributors. * 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: * Bruno Medeiros - initial API and implementation *******************************************************************************/ package melnorme.lang.ide.ui.build; import static melnorme.utilbox.core.Assert.AssertNamespace.assertNotNull; import melnorme.lang.ide.core.operations.build.BuildManager; import melnorme.lang.ide.core.operations.build.BuildManagerMessages; import melnorme.lang.ide.core.operations.build.BuildTargetData; import melnorme.lang.ide.core.operations.build.VariablesResolver; import melnorme.lang.ide.ui.LangUIMessages; import melnorme.lang.ide.ui.utils.ControlUtils; import melnorme.lang.tooling.commands.CommandInvocation; import melnorme.util.swt.components.CompositeWidget; import melnorme.util.swt.components.fields.CheckBoxField; import melnorme.util.swt.components.fields.EnablementButtonTextField; import melnorme.utilbox.concurrency.OperationCancellation; import melnorme.utilbox.core.CommonException; import melnorme.utilbox.core.fntypes.CommonGetter; public class BuildTargetEditor extends CompositeWidget { protected final BuildManager buildManager; protected final CheckBoxField normalEnableField; protected final CheckBoxField autoEnableField; protected final CommonGetter<CommandInvocation> getDefaultBuildCommand; public final CommandInvocationEditor buildCommandField; protected final CommonGetter<String> getDefaultProgramPath; public final EnablementButtonTextField programPathField; protected BuildTargetData btData = new BuildTargetData(); public BuildTargetEditor( BuildManager buildManager, boolean createEnablementFields, CommonGetter<CommandInvocation> getDefaultBuildCommand, CommonGetter<String> getDefaultProgramPath ) { super(false); this.buildManager = assertNotNull(buildManager); this.getDefaultBuildCommand = assertNotNull(getDefaultBuildCommand); this.getDefaultProgramPath = assertNotNull(getDefaultProgramPath); normalEnableField = new CheckBoxField(BuildManagerMessages.LABEL_EnableForNormalBuild); normalEnableField.addListener((newValue) -> btData.normalBuildEnabled = newValue); autoEnableField = new CheckBoxField(BuildManagerMessages.LABEL_EnableForAutoBuild); autoEnableField.addListener((newValue) -> btData.autoBuildEnabled = newValue); if(createEnablementFields) { addChildWidget(normalEnableField, autoEnableField); } buildCommandField = addChildWidget(init_createArgumentsField()); buildCommandField.addEffectiveValueChangeListener(() -> { btData.buildCommand = getEffectiveBuildCommand(); }); programPathField = addChildWidget(init_createProgramPathField()); programPathField.addListener((__) -> btData.executablePath = getEffectiveProgramPathValue()); // buildCommandField.addListener(() -> programPathField.updateDefaultFieldValue()); } protected BuildManager getBuildManager() { return buildManager; } protected CommandInvocationEditor init_createArgumentsField() { VariablesResolver varResolver = buildManager.getToolManager().getVariablesManager(null); return new BuildCommandEditor(getDefaultBuildCommand, varResolver); } protected EnablementButtonTextField init_createProgramPathField() { return new ProgramPathField(); } /* ----------------- input ----------------- */ public CommandInvocation getEffectiveBuildCommand() { return buildCommandField.getEffectiveFieldValue(); } public String getEffectiveProgramPathValue() { return programPathField.getEffectiveFieldValue(); } public void setInput(BuildTargetData buildTargetData) { this.btData = buildTargetData; normalEnableField.setFieldValue(buildTargetData.isNormalBuildEnabled()); autoEnableField.setFieldValue(buildTargetData.isAutoBuildEnabled()); buildCommandField.setEffectiveFieldValue(buildTargetData.getBuildCommand()); programPathField.setEffectiveFieldValue(buildTargetData.getExecutablePath()); } /* ----------------- ----------------- */ public static class BuildCommandEditor extends CommandInvocationEditor { public BuildCommandEditor(CommonGetter<CommandInvocation> getDefaultBuildCommand, VariablesResolver variablesResolver) { super(getDefaultBuildCommand, variablesResolver); this.label = LangUIMessages.Fields_BuildCommand; } } public class ProgramPathField extends EnablementButtonTextField { public ProgramPathField() { super( LangUIMessages.BuildTargetSettings_ProgramPathField_title, EnablementButtonTextField.LABEL_UseDefault, LangUIMessages.Fields_VariablesButtonLabel ); } @Override protected String getDefaultFieldValue() throws CommonException { return getDefaultProgramPath.get(); } @Override protected String getNewValueFromButtonSelection() throws CommonException, OperationCancellation { return getFieldValue() + ControlUtils.openStringVariableSelectionDialog(text.getShell()); } } }