/**
* Copyright (c) 2005-2011 by Appcelerator, Inc. All Rights Reserved.
* Licensed under the terms of the Eclipse Public License (EPL).
* Please see the license.txt included with this distribution for details.
* Any modifications to this file must keep this entire header intact.
*/
package org.python.pydev.debug.ui.blocks;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.debug.ui.AbstractLaunchConfigurationTab;
import org.eclipse.jface.preference.IPreferenceStore;
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.events.SelectionListener;
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.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Text;
import org.python.pydev.core.log.Log;
import org.python.pydev.plugin.preferences.PydevPrefs;
import org.python.pydev.pyunit.preferences.PyUnitPrefsPage2;
public class OverrideUnittestArgumentsBlock extends AbstractLaunchConfigurationTab {
private Button buttonAskOverride;
private Combo comboSelectRunner;
private Text textRunnerParameters;
public void createControl(Composite parent) {
Font font = parent.getFont();
Group group = new Group(parent, SWT.NONE);
setControl(group);
GridLayout topLayout = new GridLayout();
group.setLayout(topLayout);
GridData gd = new GridData(GridData.FILL_BOTH);
group.setLayoutData(gd);
group.setFont(font);
group.setText("PyUnit");
buttonAskOverride = new Button(group, SWT.CHECK);
gd = new GridData(GridData.FILL_HORIZONTAL);
buttonAskOverride.setLayoutData(gd);
buttonAskOverride.setFont(font);
buttonAskOverride.setText("Override PyUnit preferences for this launch?");
buttonAskOverride.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
updateOverrideState();
updateLaunchConfigurationDialog();
}
});
comboSelectRunner = new Combo(group, SWT.SINGLE | SWT.READ_ONLY);
gd = new GridData(GridData.FILL_HORIZONTAL);
comboSelectRunner.setLayoutData(gd);
comboSelectRunner.setFont(font);
for (String[] s : PyUnitPrefsPage2.ENTRY_NAMES_AND_VALUES) {
comboSelectRunner.add(s[0]);
comboSelectRunner.setData(s[0], Integer.parseInt(s[1]));
}
comboSelectRunner.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
updateLaunchConfigurationDialog();
}
public void widgetDefaultSelected(SelectionEvent e) {
updateLaunchConfigurationDialog();
}
});
textRunnerParameters = new Text(group, SWT.MULTI | SWT.BORDER);
gd = new GridData(GridData.FILL_BOTH);
textRunnerParameters.setLayoutData(gd);
textRunnerParameters.setFont(font);
textRunnerParameters.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent evt) {
updateLaunchConfigurationDialog();
}
});
}
public void setDefaults(ILaunchConfigurationWorkingCopy configuration) {
configuration.setAttribute(PyUnitPrefsPage2.LAUNCH_CONFIG_OVERRIDE_PYUNIT_RUN_PARAMS_CHOICE, (String) null);
configuration.setAttribute(PyUnitPrefsPage2.LAUNCH_CONFIG_OVERRIDE_TEST_RUNNER, (String) null);
configuration.setAttribute(PyUnitPrefsPage2.LAUNCH_CONFIG_OVERRIDE_PYUNIT_RUN_PARAMS, (String) null);
}
public void initializeFrom(ILaunchConfiguration configuration) {
//Override selection
IPreferenceStore prefs = PydevPrefs.getPreferenceStore();
try {
buttonAskOverride.setSelection(configuration.getAttribute(
PyUnitPrefsPage2.LAUNCH_CONFIG_OVERRIDE_PYUNIT_RUN_PARAMS_CHOICE, false));
} catch (CoreException e) {
buttonAskOverride.setSelection(false);
Log.log(e);
}
//Test runner
boolean testRunnerSet = false;
try {
int defaultTestRunner = prefs.getInt(PyUnitPrefsPage2.TEST_RUNNER);
int testRunner = configuration.getAttribute(PyUnitPrefsPage2.LAUNCH_CONFIG_OVERRIDE_TEST_RUNNER,
defaultTestRunner);
for (String[] s : PyUnitPrefsPage2.ENTRY_NAMES_AND_VALUES) {
if (Integer.parseInt(s[1]) == testRunner) {
comboSelectRunner.setText(s[0]);
testRunnerSet = true;
break;
}
}
} catch (CoreException e) {
Log.log(e);
}
if (!testRunnerSet) {
comboSelectRunner.setText(PyUnitPrefsPage2.ENTRY_NAMES_AND_VALUES[0][0]);
}
//Parameters
try {
String params = configuration.getAttribute(PyUnitPrefsPage2.LAUNCH_CONFIG_OVERRIDE_PYUNIT_RUN_PARAMS,
prefs.getString(PyUnitPrefsPage2.TEST_RUNNER_DEFAULT_PARAMETERS));
textRunnerParameters.setText(params);
} catch (CoreException e) {
Log.log(e);
}
updateOverrideState();
}
public void performApply(ILaunchConfigurationWorkingCopy configuration) {
configuration.setAttribute(PyUnitPrefsPage2.LAUNCH_CONFIG_OVERRIDE_PYUNIT_RUN_PARAMS_CHOICE,
buttonAskOverride.getSelection());
int data = (Integer) comboSelectRunner.getData(comboSelectRunner.getText());
configuration.setAttribute(PyUnitPrefsPage2.LAUNCH_CONFIG_OVERRIDE_TEST_RUNNER, data);
configuration.setAttribute(PyUnitPrefsPage2.LAUNCH_CONFIG_OVERRIDE_PYUNIT_RUN_PARAMS,
textRunnerParameters.getText());
}
public String getName() {
return "PyUnit";
}
protected void updateOverrideState() {
boolean sel = buttonAskOverride.getSelection();
comboSelectRunner.setEnabled(sel);
textRunnerParameters.setEnabled(sel);
}
}