package org.erlide.debug.ui.properties;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.debug.core.model.ILineBreakpoint;
import org.eclipse.swt.SWT;
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.Group;
import org.eclipse.ui.PlatformUI;
import org.erlide.backend.debug.IErlangBreakpoint;
import org.erlide.debug.ui.utils.BreakpointUtils;
import org.erlide.engine.model.IErlElement;
import org.erlide.ui.editors.erl.IErlangHelpContextIds;
import org.erlide.util.ErlLogger;
public class ErlangLineBreakpointPropertyPage extends ErlangBreakpointPropertyPage {
Button fEnableConditionButton;
private BreakpointConditionEditor fConditionEditor;
// private Button fConditionIsTrue;
// private Button fConditionHasChanged;
// private Label fSuspendWhenLabel;
// // Watchpoint editors
// private Button fFieldAccess;
// private Button fFieldModification;
// // Method breakpoint editors
// private Button fMethodEntry;
// private Button fMethodExit;
@Override
protected void doStore() throws CoreException {
final IErlangBreakpoint breakpoint = getBreakpoint();
super.doStore();
if (fConditionEditor != null) {
final boolean enableCondition = fEnableConditionButton.getSelection();
final String condition = fConditionEditor.getCondition();
// final boolean suspendOnTrue = fConditionIsTrue.getSelection();
if (breakpoint.isConditionEnabled() != enableCondition) {
breakpoint.setConditionEnabled(enableCondition);
}
if (!condition.equals(breakpoint.getCondition())) {
breakpoint.setCondition(condition);
}
// if (breakpoint.isConditionSuspendOnTrue() != suspendOnTrue) {
// breakpoint.setConditionSuspendOnTrue(suspendOnTrue);
// }
}
// if (breakpoint instanceof IJavaWatchpoint) {
// final IJavaWatchpoint watchpoint = (IJavaWatchpoint) getBreakpoint();
// final boolean access = fFieldAccess.getSelection();
// final boolean modification = fFieldModification.getSelection();
// if (access != watchpoint.isAccess()) {
// watchpoint.setAccess(access);
// }
// if (modification != watchpoint.isModification()) {
// watchpoint.setModification(modification);
// }
// }
// if (breakpoint instanceof IJavaMethodBreakpoint) {
// final IJavaMethodBreakpoint methodBreakpoint =
// (IJavaMethodBreakpoint) getBreakpoint();
// final boolean entry = fMethodEntry.getSelection();
// final boolean exit = fMethodExit.getSelection();
// if (entry != methodBreakpoint.isEntry()) {
// methodBreakpoint.setEntry(entry);
// }
// if (exit != methodBreakpoint.isExit()) {
// methodBreakpoint.setExit(exit);
// }
// }
}
@Override
protected void createTypeSpecificLabels(final Composite parent) {
createLabel(parent, "Module:");
final String moduleName = getBreakpoint().getMarker().getResource().getName();
createText(parent, SWT.READ_ONLY, moduleName)
.setBackground(parent.getBackground());
// Line number
final ILineBreakpoint breakpoint = (ILineBreakpoint) getBreakpoint();
final StringBuffer lineNumber = new StringBuffer(4);
try {
final int lNumber = breakpoint.getLineNumber();
if (lNumber > 0) {
lineNumber.append(lNumber);
}
} catch (final CoreException ce) {
ErlLogger.error(ce);
}
if (lineNumber.length() > 0) {
createLabel(parent, "&Line Number:");
final String string = lineNumber.toString();
createText(parent, SWT.READ_ONLY, string)
.setBackground(parent.getBackground());
}
final IErlElement element = BreakpointUtils.getElement(breakpoint);
if (element == null) {
return;
}
createLabel(parent, "Function:");
createText(parent, SWT.READ_ONLY, element.toString())
.setBackground(parent.getBackground());
}
/**
* Create the condition editor and associated editors.
*
* @see org.eclipse.jdt.internal.debug.ui.propertypages.JavaBreakpointPage#createTypeSpecificEditors(org.eclipse.swt.widgets.Composite)
*/
@Override
protected void createTypeSpecificEditors(final Composite parent)
throws CoreException {
setTitle("Line Breakpoint");
final IErlangBreakpoint breakpoint = getBreakpoint();
if (breakpoint.supportsCondition()) {
createConditionEditor(parent);
}
// if (breakpoint instanceof IJavaWatchpoint) {
// setTitle(PropertyPageMessages.JavaLineBreakpointPage_19);
// final IJavaWatchpoint watchpoint = (IJavaWatchpoint) getBreakpoint();
// final SelectionAdapter watchpointValidator = new SelectionAdapter() {
// @Override
// public void widgetSelected(final SelectionEvent e) {
// validateWatchpoint();
// }
// };
// createLabel(parent, PropertyPageMessages.JavaLineBreakpointPage_6);
// fEnabledButton.addSelectionListener(watchpointValidator);
// fFieldAccess = createCheckButton(parent,
// PropertyPageMessages.JavaLineBreakpointPage_7);
// fFieldAccess.setSelection(watchpoint.isAccess());
// fFieldAccess.addSelectionListener(watchpointValidator);
// fFieldModification = createCheckButton(parent,
// PropertyPageMessages.JavaLineBreakpointPage_8);
// fFieldModification.setSelection(watchpoint.isModification());
// fFieldModification.addSelectionListener(watchpointValidator);
// }
// if (breakpoint instanceof IJavaMethodBreakpoint) {
// setTitle(PropertyPageMessages.JavaLineBreakpointPage_20);
// final IJavaMethodBreakpoint methodBreakpoint =
// (IJavaMethodBreakpoint) getBreakpoint();
// final SelectionAdapter methodBreakpointValidator = new
// SelectionAdapter() {
// @Override
// public void widgetSelected(final SelectionEvent e) {
// validateMethodBreakpoint();
// }
// };
// createLabel(parent, PropertyPageMessages.JavaLineBreakpointPage_9);
// fEnabledButton.addSelectionListener(methodBreakpointValidator);
// fMethodEntry = createCheckButton(parent,
// PropertyPageMessages.JavaLineBreakpointPage_10);
// fMethodEntry.setSelection(methodBreakpoint.isEntry());
// fMethodEntry.addSelectionListener(methodBreakpointValidator);
// fMethodExit = createCheckButton(parent,
// PropertyPageMessages.JavaLineBreakpointPage_11);
// fMethodExit.setSelection(methodBreakpoint.isExit());
// fMethodExit.addSelectionListener(methodBreakpointValidator);
// }
}
/**
* Validates the watchpoint...if we are one
*/
// private void validateWatchpoint() {
// if (fEnabledButton.getSelection()
// && !(fFieldAccess.getSelection() || fFieldModification
// .getSelection())) {
// addErrorMessage(fgWatchpointError);
// } else {
// removeErrorMessage(fgWatchpointError);
// }
// }
/**
* Validates the method breakpoint, if we are one
*/
// private void validateMethodBreakpoint() {
// boolean valid = true;
// if (fEnabledButton.getSelection()
// && !(fMethodEntry.getSelection() || fMethodExit.getSelection())) {
// setErrorMessage(fgMethodBreakpointError);
// valid = false;
// } else {
// setErrorMessage(null);
// }
// setValid(valid);
// }
/**
* Creates the controls that allow the user to specify the breakpoint's
* condition
*
* @param parent
* the composite in which the condition editor should be created
* @throws CoreException
* if an exception occurs accessing the breakpoint
*/
private void createConditionEditor(final Composite parent) throws CoreException {
final IErlangBreakpoint breakpoint = getBreakpoint();
// String label = null;
// if (BreakpointUtils.getType(breakpoint) != null) {
// final IBindingService bindingService = (IBindingService) PlatformUI
// .getWorkbench().getAdapter(IBindingService.class);
// if (bindingService != null) {
// final TriggerSequence keyBinding = bindingService
// .getBestActiveBindingFor(ITextEditorActionDefinitionIds.CONTENT_ASSIST_PROPOSALS);
// if (keyBinding != null) {
// label = MessageFormat.format(
// PropertyPageMessages.JavaLineBreakpointPage_12,
// new String[] { keyBinding.format() });
// }
// }
// }
// if (label == null) {
// label = PropertyPageMessages.JavaLineBreakpointPage_13;
// }
final Group g = new Group(parent, SWT.NONE);
g.setLayout(new GridLayout(1, false));
g.setText(EMPTY_STRING);
g.setFont(parent.getFont());
final GridData gd = new GridData(GridData.FILL_BOTH);
gd.horizontalSpan = 1;
g.setLayoutData(gd);
final Composite conditionComposite = g;
fEnableConditionButton = createCheckButton(conditionComposite, "Enable");
fEnableConditionButton.setSelection(breakpoint.isConditionEnabled());
fEnableConditionButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(final SelectionEvent e) {
setConditionEnabled(fEnableConditionButton.getSelection());
}
});
fConditionEditor = new BreakpointConditionEditor(conditionComposite, this);
// fSuspendWhenLabel = createLabel(conditionComposite,
// PropertyPageMessages.JavaLineBreakpointPage_15);
// fConditionIsTrue = createRadioButton(conditionComposite,
// "condition is 'tr&ue'");
// fConditionHasChanged = createRadioButton(conditionComposite,
// "value of condition ch&anges");
// if (breakpoint.isConditionSuspendOnTrue()) {
// fConditionIsTrue.setSelection(true);
// } else {
// fConditionHasChanged.setSelection(true);
// }
setConditionEnabled(fEnableConditionButton.getSelection());
}
/**
* Sets the enabled state of the condition editing controls.
*
* @param enabled
*/
void setConditionEnabled(final boolean enabled) {
fConditionEditor.setEnabled(enabled);
// fSuspendWhenLabel.setEnabled(enabled);
// fConditionIsTrue.setEnabled(enabled);
// fConditionHasChanged.setEnabled(enabled);
}
@Override
public int convertHeightInCharsToPixels(final int chars) {
return super.convertHeightInCharsToPixels(chars);
}
@Override
public int convertWidthInCharsToPixels(final int chars) {
return super.convertWidthInCharsToPixels(chars);
}
@Override
public void dispose() {
if (fConditionEditor != null) {
fConditionEditor.dispose();
}
super.dispose();
}
@Override
public void createControl(final Composite parent) {
super.createControl(parent);
PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(),
IErlangHelpContextIds.ERLANG_LINE_BREAKPOINT_PROPERTY_PAGE);
}
}