blob: 6f3b3c56632dc6f191b0db9cae7b2b1659e55c84 [file] [log] [blame]
package org.eclipse.dltk.internal.debug.ui;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.jface.dialogs.ErrorDialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.preference.IPreferenceStore;
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.swt.widgets.Shell;
/**
* An error dialog which allows the user to set a boolean preference.
*
* This is typically used to set a preference that determines if the dialog
* should be shown in the future
*/
public class ErrorDialogWithToggle extends ErrorDialog {
/**
* The preference key which is set by the toggle button. This key must be a
* boolean preference in the preference store.
*/
private String fPreferenceKey = null;
/**
* The message displayed to the user, with the toggle button
*/
private String fToggleMessage = null;
private Button fToggleButton = null;
/**
* The preference store which will be affected by the toggle button
*/
IPreferenceStore fStore = null;
public ErrorDialogWithToggle(Shell parentShell, String dialogTitle,
String message, IStatus status, String preferenceKey,
String toggleMessage, IPreferenceStore store) {
super(parentShell, dialogTitle, message, status,
IStatus.WARNING | IStatus.ERROR | IStatus.INFO);
fStore = store;
fPreferenceKey = preferenceKey;
fToggleMessage = toggleMessage;
}
@Override
protected Control createDialogArea(Composite parent) {
Composite dialogComposite = (Composite) super.createDialogArea(parent);
dialogComposite.setFont(parent.getFont());
setToggleButton(createCheckButton(dialogComposite, fToggleMessage));
getToggleButton().setSelection(!fStore.getBoolean(fPreferenceKey));
applyDialogFont(dialogComposite);
return dialogComposite;
}
/**
* Creates a button with the given label and sets the default configuration
* data.
*/
private Button createCheckButton(Composite parent, String label) {
Button button = new Button(parent, SWT.CHECK | SWT.LEFT);
button.setText(label);
GridData data = new GridData(SWT.NONE);
data.horizontalSpan = 2;
data.horizontalAlignment = GridData.CENTER;
button.setLayoutData(data);
button.setFont(parent.getFont());
return button;
}
@Override
protected void buttonPressed(int id) {
if (id == IDialogConstants.OK_ID) { // was the OK button pressed?
storePreference();
}
super.buttonPressed(id);
}
private void storePreference() {
fStore.setValue(fPreferenceKey, !getToggleButton().getSelection());
}
protected Button getToggleButton() {
return fToggleButton;
}
protected void setToggleButton(Button button) {
fToggleButton = button;
}
@Override
protected void createButtonsForButtonBar(Composite parent) {
super.createButtonsForButtonBar(parent);
getButton(IDialogConstants.OK_ID).setFocus();
}
}