// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.debug.ui.propertypages;
import org.chromium.debug.core.ChromiumDebugPlugin;
import org.chromium.debug.core.model.ChromiumExceptionBreakpoint;
import org.eclipse.core.resources.IWorkspaceRunnable;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.swt.SWT;
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.ui.dialogs.PropertyPage;
/**
* A JavaScript line breakpoint property page.
*/
public class JsExceptionBreakpointPage extends PropertyPage {
private Button enabledCheckbox;
private Button includeCaughtCheckbox;
@Override
protected Control createContents(Composite parent) {
noDefaultAndApplyButton();
Composite mainComposite = JsLineBreakpointPage.createComposite(parent, 2, 1);
try {
createBreakpointDataControls(mainComposite);
createInfoControls(mainComposite);
createEnabledControls(mainComposite);
createIncludeCaughtControls(mainComposite);
} catch (CoreException e) {
ChromiumDebugPlugin.log(e);
}
setValid(true);
return mainComposite;
}
@Override
public boolean performOk() {
IWorkspaceRunnable runnable = new IWorkspaceRunnable() {
public void run(IProgressMonitor monitor) throws CoreException {
storePrefs();
}
};
try {
ResourcesPlugin.getWorkspace().run(runnable, null, 0, null);
} catch (CoreException e) {
ChromiumDebugPlugin.log(e);
}
return super.performOk();
}
private void storePrefs() throws CoreException {
ChromiumExceptionBreakpoint breakpoint = getBreakpoint();
breakpoint.setEnabled(enabledCheckbox.getSelection());
breakpoint.setIncludeCaught(includeCaughtCheckbox.getSelection());
}
private void createBreakpointDataControls(Composite mainComposite) {
}
private void createInfoControls(Composite parent) {
}
private void createEnabledControls(Composite parent) throws CoreException {
enabledCheckbox = checkboxControl(parent,
Messages.JavascriptLineBreakpointPage_Enabled, getBreakpoint().isEnabled());
}
private void createIncludeCaughtControls(Composite parent) throws CoreException {
Button includeUncaughtCheckbox = checkboxControl(parent,
Messages.JsExceptionBreakpointPage_UNCAUGHT, true);
includeUncaughtCheckbox.setEnabled(false);
includeCaughtCheckbox = checkboxControl(parent,
Messages.JsExceptionBreakpointPage_CAUGHT, getBreakpoint().getIncludeCaught());
}
private Button checkboxControl(Composite parent, String label, boolean initialState)
throws CoreException {
Button checkbox = new Button(parent, SWT.CHECK);
GridData gd = new GridData();
gd.horizontalSpan = 2;
checkbox.setLayoutData(gd);
checkbox.setSelection(initialState);
checkbox.setText(label);
return checkbox;
}
@Override
public void setErrorMessage(String newMessage) {
super.setErrorMessage(newMessage);
setValid(newMessage == null);
}
protected ChromiumExceptionBreakpoint getBreakpoint() {
return (ChromiumExceptionBreakpoint) getElement();
}
}