package org.eclipse.xtend.shared.ui.editor.preferences;
import org.eclipse.jface.preference.FieldEditor;
import org.eclipse.jface.text.TextAttribute;
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.Label;
public class FontstyleFieldEditor extends FieldEditor {
private final class StyleButtonSelectionAdapter extends SelectionAdapter {
private final Button control;
private final int flag;
public StyleButtonSelectionAdapter(Button control, int flag) {
this.control = control;
this.flag = flag;
}
@Override
public void widgetSelected(SelectionEvent event) {
if (control.getSelection() != ((value & flag) > 0)) {
int oldValue = value;
value ^= flag; // toggle
changed = true;
setPresentsDefaultValue(false);
fireValueChanged(VALUE, (oldValue > -1) ? Integer.toString(oldValue) : null, Integer.toString(value));
}
}
}
private boolean changed = false;
private int value = 0;
private Button boldButton, italicButton, underlineButton;
private Composite cbPanel;
public FontstyleFieldEditor(String name, String labeltext, Composite fieldEditorParent) {
init(name, labeltext);
createControl(fieldEditorParent);
}
@Override
protected void adjustForNumColumns(int numColumns) {
Label labelControl = getLabelControl();
if (labelControl != null && labelControl.getLayoutData() instanceof GridData) {
GridData data = (GridData) labelControl.getLayoutData();
data.horizontalSpan = numColumns;
}
if (cbPanel.getLayoutData() instanceof GridData) {
GridData layoutData = (GridData) cbPanel.getLayoutData();
layoutData.horizontalSpan = numColumns;
}
}
@Override
protected void doFillIntoGrid(Composite parent, int numColumns) {
cbPanel = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout(numColumns, true);
layout.marginWidth = 0;
layout.marginHeight = 0;
layout.horizontalSpacing = FieldEditor.HORIZONTAL_GAP;
cbPanel.setLayout(layout);
cbPanel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, numColumns, 1));
boldButton = new Button(cbPanel, SWT.CHECK | SWT.LEAD);
boldButton.setText(Messages.xtendxpanduipref_bold);
boldButton.addSelectionListener(new StyleButtonSelectionAdapter(boldButton, SWT.BOLD));
italicButton = new Button(cbPanel, SWT.CHECK | SWT.LEAD);
italicButton.setText(Messages.xtendxpanduipref_italic);
italicButton.addSelectionListener(new StyleButtonSelectionAdapter(italicButton, SWT.ITALIC));
underlineButton = new Button(cbPanel, SWT.CHECK | SWT.LEAD);
underlineButton.setText(Messages.xtendxpanduipref_underline);
underlineButton.addSelectionListener(new StyleButtonSelectionAdapter(underlineButton, TextAttribute.UNDERLINE));
}
@Override
protected void doLoad() {
String value = getPreferenceStore().getString(getPreferenceName());
doLoadInternal(value);
}
@Override
protected void doLoadDefault() {
String value = getPreferenceStore().getDefaultString(getPreferenceName());
doLoadInternal(value);
}
private void doLoadInternal(String valueString) {
changed = false;
if (valueString != null) {
try {
value = Integer.parseInt(valueString);
boldButton.setSelection((value & SWT.BOLD) > 0);
italicButton.setSelection((value & SWT.ITALIC) > 0);
underlineButton.setSelection((value & TextAttribute.UNDERLINE) > 0);
return;
}
catch (NumberFormatException e) {
/* ignore, use defaults */
}
}
value = 0;
boldButton.setSelection(false);
italicButton.setSelection(false);
underlineButton.setSelection(false);
}
@Override
protected void doStore() {
if (!changed) {
getPreferenceStore().setToDefault(getPreferenceName());
}
else {
getPreferenceStore().setValue(getPreferenceName(), Integer.toString(value));
}
}
@Override
public int getNumberOfControls() {
return 3;
}
}