/*******************************************************************************
* Copyright (c) 2004, 2010 IBM Corporation 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:
* IBM - Initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.make.ui.dialogs;
import java.io.File;
import org.eclipse.cdt.make.core.scannerconfig.IScannerConfigBuilderInfo2;
import org.eclipse.cdt.make.internal.ui.MakeUIPlugin;
import org.eclipse.cdt.utils.ui.controls.ControlFactory;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
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.FileDialog;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
/**
* SCD per project profile property/preference page
*
* @author vhirsl
*
* @noextend This class is not intended to be subclassed by clients.
* @noinstantiate This class is not intended to be instantiated by clients.
*/
public class MBSPerProjectSCDProfilePage extends AbstractDiscoveryPage {
private static final String providerId = "specsFile"; //$NON-NLS-1$
private Button sipEnabledButton;
private Text sipRunCommandText;
private boolean isValid = true;
/* (non-Javadoc)
* @see org.eclipse.cdt.ui.dialogs.AbstractCOptionPage#createControl(org.eclipse.swt.widgets.Composite)
*/
public void createControl(Composite parent) {
Composite page = ControlFactory.createComposite(parent, 1);
// Add the profile UI contribution.
Group profileGroup = ControlFactory.createGroup(page,
MakeUIPlugin.getResourceString("ScannerConfigOptionsDialog.profile.group.label"), 3); //$NON-NLS-1$
GridData gd = (GridData) profileGroup.getLayoutData();
gd.grabExcessHorizontalSpace = true;
gd.horizontalAlignment = GridData.FILL;
((GridLayout) profileGroup.getLayout()).makeColumnsEqualWidth = false;
// si provider enabled checkbox
sipEnabledButton = ControlFactory.createCheckBox(profileGroup, SI_ENABLE);
((GridData)sipEnabledButton.getLayoutData()).horizontalSpan = 3;
((GridData)sipEnabledButton.getLayoutData()).grabExcessHorizontalSpace = true;
sipEnabledButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
}
});
// si command label
Label siCommandLabel = ControlFactory.createLabel(profileGroup, SI_COMMAND);
((GridData) siCommandLabel.getLayoutData()).horizontalSpan = 3;
// text field
sipRunCommandText = ControlFactory.createTextField(profileGroup, SWT.SINGLE | SWT.BORDER);
//((GridData) sipRunCommandText.getLayoutData()).horizontalSpan = 2;
sipRunCommandText.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
handleModifyRunCommandText();
}
});
// si browse button
Button siBrowseButton = ControlFactory.createPushButton(profileGroup, SI_BROWSE);
((GridData) siBrowseButton.getLayoutData()).minimumWidth = 120;
siBrowseButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent event) {
handleSIPBrowseButtonSelected();
}
private void handleSIPBrowseButtonSelected() {
FileDialog dialog = new FileDialog(getShell(), SWT.NONE);
dialog.setText(SI_DIALOG);
String fileName = sipRunCommandText.getText().trim();
int lastSeparatorIndex = fileName.lastIndexOf(File.separator);
if (lastSeparatorIndex != -1) {
dialog.setFilterPath(fileName.substring(0, lastSeparatorIndex));
}
String res = dialog.open();
if (res == null) {
return;
}
sipRunCommandText.setText(res);
}
});
setControl(page);
initializeValues();
}
private void handleModifyRunCommandText() {
String cmd = sipRunCommandText.getText().trim();
isValid = (cmd.length() > 0) ? true : false;
getContainer().updateContainer();
}
private void initializeValues() {
sipEnabledButton.setSelection(getContainer().getBuildInfo().isProviderOutputParserEnabled(providerId));
sipRunCommandText.setText(getContainer().getBuildInfo().getProviderRunCommand(providerId));
}
/* (non-Javadoc)
* @see org.eclipse.cdt.ui.dialogs.ICOptionPage#isValid()
*/
@Override
public boolean isValid() {
return isValid;
}
/* (non-Javadoc)
* @see org.eclipse.jface.dialogs.IDialogPage#getErrorMessage()
*/
@Override
public String getErrorMessage() {
return (isValid) ? null : SI_ERROR;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.make.ui.dialogs.AbstractDiscoveryPage#populateBuildInfo(org.eclipse.cdt.make.core.scannerconfig.IScannerConfigBuilderInfo2)
*/
@Override
protected void populateBuildInfo(IScannerConfigBuilderInfo2 buildInfo) {
if (buildInfo != null) {
buildInfo.setBuildOutputFileActionEnabled(true);
buildInfo.setProviderOutputParserEnabled(providerId, sipEnabledButton.getSelection());
buildInfo.setProviderRunCommand(providerId, sipRunCommandText.getText().trim());
}
}
/* (non-Javadoc)
* @see org.eclipse.cdt.make.ui.dialogs.AbstractDiscoveryPage#restoreFromBuildinfo(org.eclipse.cdt.make.core.scannerconfig.IScannerConfigBuilderInfo2)
*/
@Override
protected void restoreFromBuildinfo(IScannerConfigBuilderInfo2 buildInfo) {
if (buildInfo != null) {
sipEnabledButton.setSelection(buildInfo.isProviderOutputParserEnabled(providerId));
sipRunCommandText.setText(buildInfo.getProviderRunCommand(providerId));
}
}
}