package org.python.pydev.debug.ui;
import java.util.List;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.dialogs.SelectionDialog;
import org.python.pydev.debug.core.ConfigureExceptionsFileUtils;
import org.python.pydev.debug.model.PyPropertyTraceManager;
public class PyPropertyTraceDialog extends SelectionDialog {
// checkboxes to enable/disable stepping into properties
private Button disableStepIntoPropertiesCheck;
private Button disableStepIntoGetterCheck;
private Button disableStepIntoSetterCheck;
private Button disableStepIntoDeleterCheck;
// By default user can step into properties
private boolean disableStepIntoProperties = false;
private boolean disableStepIntoGetter = false;
private boolean disableStepIntoSetter = false;
private boolean disableStepIntoDeleter = false;
public PyPropertyTraceDialog(Shell parentShell) {
super(parentShell);
}
/**
* Adds the checkboxes to the dialog
*
* @param composite
*/
private void createStepIntoOptions(Composite composite) {
List<String> pyPropertyTraceStatesList = ConfigureExceptionsFileUtils
.getConfiguredExceptions(PyPropertyTraceManager.PROPERTY_TRACE_STATE);
if (pyPropertyTraceStatesList.size() == 4) {
disableStepIntoProperties = Boolean.parseBoolean(pyPropertyTraceStatesList.get(0));
disableStepIntoGetter = Boolean.parseBoolean(pyPropertyTraceStatesList.get(1));
disableStepIntoSetter = Boolean.parseBoolean(pyPropertyTraceStatesList.get(2));
disableStepIntoDeleter = Boolean.parseBoolean(pyPropertyTraceStatesList.get(3));
}
disableStepIntoPropertiesCheck = new Button(composite, SWT.CHECK);
disableStepIntoPropertiesCheck.setText("Disable step into properties");
disableStepIntoPropertiesCheck.setSelection(disableStepIntoProperties);
createSelectionListener();
GridData gridData = new GridData();
gridData.horizontalIndent = 25;
disableStepIntoGetterCheck = new Button(composite, SWT.CHECK);
disableStepIntoGetterCheck.setText("Disable step into property getters");
disableStepIntoGetterCheck.setSelection(disableStepIntoGetter);
disableStepIntoGetterCheck.setEnabled(disableStepIntoPropertiesCheck.getSelection());
disableStepIntoGetterCheck.setLayoutData(gridData);
gridData = new GridData();
gridData.horizontalIndent = 25;
disableStepIntoSetterCheck = new Button(composite, SWT.CHECK);
disableStepIntoSetterCheck.setText("Disable step into property setters");
disableStepIntoSetterCheck.setSelection(disableStepIntoSetter);
disableStepIntoSetterCheck.setEnabled(disableStepIntoPropertiesCheck.getSelection());
disableStepIntoSetterCheck.setLayoutData(gridData);
gridData = new GridData();
gridData.horizontalIndent = 25;
disableStepIntoDeleterCheck = new Button(composite, SWT.CHECK);
disableStepIntoDeleterCheck.setText("Disable step into property deleters");
disableStepIntoDeleterCheck.setSelection(disableStepIntoDeleter);
disableStepIntoDeleterCheck.setEnabled(disableStepIntoPropertiesCheck.getSelection());
disableStepIntoDeleterCheck.setLayoutData(gridData);
}
/**
* Creates a selection listener for disableStepIntoPropertiesCheck
*/
private void createSelectionListener() {
disableStepIntoPropertiesCheck.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent arg0) {
disableStepIntoGetterCheck.setSelection(false);
disableStepIntoGetterCheck.setEnabled(disableStepIntoPropertiesCheck.getSelection());
disableStepIntoSetterCheck.setSelection(false);
disableStepIntoSetterCheck.setEnabled(disableStepIntoPropertiesCheck.getSelection());
disableStepIntoDeleterCheck.setSelection(false);
disableStepIntoDeleterCheck.setEnabled(disableStepIntoPropertiesCheck.getSelection());
}
public void widgetDefaultSelected(SelectionEvent arg0) {
}
});
}
@Override
protected Control createDialogArea(Composite parent) {
Composite composite = (Composite) super.createDialogArea(parent);
createStepIntoOptions(composite);
return composite;
}
@Override
protected void okPressed() {
this.disableStepIntoProperties = disableStepIntoPropertiesCheck.getSelection();
this.disableStepIntoGetter = disableStepIntoGetterCheck.getSelection();
this.disableStepIntoSetter = disableStepIntoSetterCheck.getSelection();
this.disableStepIntoDeleter = disableStepIntoDeleterCheck.getSelection();
super.okPressed();
}
// Getters
public boolean isDisableStepIntoProperties() {
return disableStepIntoProperties;
}
public boolean isDisableStepIntoGetter() {
return disableStepIntoGetter;
}
public boolean isDisableStepIntoSetter() {
return disableStepIntoSetter;
}
public boolean isDisableStepIntoDeleter() {
return disableStepIntoDeleter;
}
}