/******************************************************************************* | |
* Copyright (c) 2017 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 | |
*******************************************************************************/ | |
package org.eclipse.cdt.make.internal.ui; | |
import java.util.Map; | |
import org.eclipse.cdt.core.build.ICBuildConfiguration; | |
import org.eclipse.cdt.core.build.StandardBuildConfiguration; | |
import org.eclipse.cdt.launch.ui.corebuild.CommonBuildTab; | |
import org.eclipse.cdt.make.core.MakefileBuildConfigurationProvider; | |
import org.eclipse.core.runtime.CoreException; | |
import org.eclipse.core.runtime.IPath; | |
import org.eclipse.core.runtime.Path; | |
import org.eclipse.debug.core.ILaunchConfiguration; | |
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; | |
import org.eclipse.swt.SWT; | |
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.Group; | |
import org.eclipse.swt.widgets.Label; | |
import org.eclipse.swt.widgets.Text; | |
public class MakeBuildSettingsTab extends CommonBuildTab { | |
private Button projectButton; | |
private Button configButton; | |
private Text buildCmdText; | |
private Text cleanCmdText; | |
private boolean defaultProject; | |
@Override | |
protected String getBuildConfigProviderId() { | |
return MakefileBuildConfigurationProvider.ID; | |
} | |
@Override | |
public void createControl(Composite parent) { | |
Composite comp = new Composite(parent, SWT.NONE); | |
comp.setLayout(new GridLayout()); | |
setControl(comp); | |
// Toolchain selector | |
Control tcControl = createToolchainSelector(comp); | |
tcControl.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); | |
// Build Output Group | |
Group outputGroup = new Group(comp, SWT.NONE); | |
outputGroup.setText(Messages.MakeBuildSettingsTab_BuildOutputLocation); | |
outputGroup.setLayout(new GridLayout()); | |
outputGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); | |
projectButton = new Button(outputGroup, SWT.RADIO); | |
projectButton.setText(Messages.MakeBuildSettingsTab_BuildInProjectDir); | |
projectButton.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); | |
configButton = new Button(outputGroup, SWT.RADIO); | |
configButton.setText(Messages.MakeBuildSettingsTab_BuildInConfigDir); | |
configButton.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); | |
Group cmdGroup = new Group(comp, SWT.NONE); | |
cmdGroup.setText(Messages.MakeBuildSettingsTab_BuildCommands); | |
cmdGroup.setLayout(new GridLayout(2, false)); | |
cmdGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); | |
Label label = new Label(cmdGroup, SWT.NONE); | |
label.setText(Messages.MakeBuildSettingsTab_Build); | |
buildCmdText = new Text(cmdGroup, SWT.BORDER); | |
buildCmdText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); | |
label = new Label(cmdGroup, SWT.NONE); | |
label.setText(Messages.MakeBuildSettingsTab_Clean); | |
cleanCmdText = new Text(cmdGroup, SWT.BORDER); | |
cleanCmdText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); | |
} | |
@Override | |
public String getName() { | |
return Messages.MakeBuildSettingsTab_Makefile; | |
} | |
@Override | |
protected void restoreProperties(Map<String, String> properties) { | |
// TODO Auto-generated method stub | |
super.restoreProperties(properties); | |
String container = properties.get(StandardBuildConfiguration.BUILD_CONTAINER); | |
if (container != null && !container.trim().isEmpty()) { | |
IPath containerLoc = new Path(container); | |
if (containerLoc.segmentCount() == 1) { | |
// TODO what if it's not the project? | |
projectButton.setSelection(true); | |
defaultProject = true; | |
} else { | |
configButton.setSelection(true); | |
defaultProject = false; | |
} | |
} | |
String buildCommand = properties.get(StandardBuildConfiguration.BUILD_COMMAND); | |
if (buildCommand != null && !buildCommand.trim().isEmpty()) { | |
buildCmdText.setText(buildCommand); | |
} | |
String cleanCommand = properties.get(StandardBuildConfiguration.CLEAN_COMMAND); | |
if (cleanCommand != null && !cleanCommand.trim().isEmpty()) { | |
cleanCmdText.setText(cleanCommand); | |
} | |
} | |
@Override | |
protected void saveProperties(Map<String, String> properties) { | |
super.saveProperties(properties); | |
try { | |
ICBuildConfiguration buildConfig = getBuildConfiguration(); | |
if (buildConfig instanceof StandardBuildConfiguration) { | |
StandardBuildConfiguration stdConfig = (StandardBuildConfiguration) buildConfig; | |
if (defaultProject && !projectButton.getSelection()) { | |
properties.put(StandardBuildConfiguration.BUILD_CONTAINER, | |
stdConfig.getDefaultBuildContainer().getFullPath().toString()); | |
} else if (!defaultProject && projectButton.getSelection()) { | |
properties.put(StandardBuildConfiguration.BUILD_CONTAINER, | |
stdConfig.getProject().getFullPath().toString()); | |
} | |
String buildCommand = buildCmdText.getText().trim(); | |
if (!buildCommand.isEmpty()) { | |
properties.put(StandardBuildConfiguration.BUILD_COMMAND, buildCommand); | |
} | |
String cleanCommand = cleanCmdText.getText().trim(); | |
if (!cleanCommand.isEmpty()) { | |
properties.put(StandardBuildConfiguration.CLEAN_COMMAND, cleanCommand); | |
} | |
} | |
} catch (CoreException e) { | |
MakeUIPlugin.log(e.getStatus()); | |
} | |
} | |
@Override | |
public void initializeFrom(ILaunchConfiguration configuration) { | |
super.initializeFrom(configuration); | |
ICBuildConfiguration buildConfig = getBuildConfiguration(); | |
String container = buildConfig.getProperty(StandardBuildConfiguration.BUILD_CONTAINER); | |
if (container != null && !container.trim().isEmpty()) { | |
IPath containerLoc = new Path(container); | |
if (containerLoc.segmentCount() == 1) { | |
// TODO what if it's not the project? | |
projectButton.setSelection(true); | |
defaultProject = true; | |
} else { | |
configButton.setSelection(true); | |
defaultProject = false; | |
} | |
} | |
String buildCommand = buildConfig.getProperty(StandardBuildConfiguration.BUILD_COMMAND); | |
if (buildCommand != null && !buildCommand.trim().isEmpty()) { | |
buildCmdText.setText(buildCommand); | |
} | |
String cleanCommand = buildConfig.getProperty(StandardBuildConfiguration.CLEAN_COMMAND); | |
if (cleanCommand != null && !cleanCommand.trim().isEmpty()) { | |
cleanCmdText.setText(cleanCommand); | |
} | |
} | |
@Override | |
public void performApply(ILaunchConfigurationWorkingCopy configuration) { | |
super.performApply(configuration); | |
try { | |
ICBuildConfiguration buildConfig = getBuildConfiguration(); | |
if (buildConfig instanceof StandardBuildConfiguration) { | |
StandardBuildConfiguration stdConfig = (StandardBuildConfiguration) buildConfig; | |
if (defaultProject && !projectButton.getSelection()) { | |
stdConfig.setBuildContainer(stdConfig.getDefaultBuildContainer()); | |
} else if (!defaultProject && projectButton.getSelection()) { | |
stdConfig.setBuildContainer(stdConfig.getProject()); | |
} | |
String buildCommand = buildCmdText.getText().trim(); | |
if (!buildCommand.isEmpty()) { | |
stdConfig.setBuildCommand(buildCommand.split(" ")); //$NON-NLS-1$ | |
} else { | |
stdConfig.setBuildCommand(null); | |
} | |
String cleanCommand = cleanCmdText.getText().trim(); | |
if (!cleanCommand.isEmpty()) { | |
stdConfig.setCleanCommand(cleanCommand.split(" ")); //$NON-NLS-1$ | |
} else { | |
stdConfig.setCleanCommand(null); | |
} | |
} | |
} catch (CoreException e) { | |
MakeUIPlugin.log(e.getStatus()); | |
} | |
} | |
} |