package com.redhat.ceylon.eclipse.code.preferences;
import static com.redhat.ceylon.eclipse.code.preferences.CeylonPreferenceInitializer.LINKED_MODE_EXTRACT;
import static com.redhat.ceylon.eclipse.code.preferences.CeylonPreferenceInitializer.LINKED_MODE_RENAME;
import static com.redhat.ceylon.eclipse.code.preferences.CeylonPreferenceInitializer.LINKED_MODE_RENAME_SELECT;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.jface.preference.BooleanFieldEditor;
import org.eclipse.jface.preference.FieldEditorPreferencePage;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Group;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import com.redhat.ceylon.eclipse.code.editor.CeylonEditor;
import com.redhat.ceylon.eclipse.ui.CeylonPlugin;
public class CeylonRefactoringPreferencePage
extends FieldEditorPreferencePage
implements IWorkbenchPreferencePage {
public static final String ID = CeylonPlugin.PLUGIN_ID + ".preferences.refactoring";
BoolFieldEditor linkedModeRename;
BooleanFieldEditor linkedModeRenameSelect;
BooleanFieldEditor linkedModeExtract;
public CeylonRefactoringPreferencePage() {
super(GRID);
setDescription("Preferences related to Ceylon refactorings.");
}
@Override
public boolean performOk() {
linkedModeRename.store();
linkedModeRenameSelect.store();
linkedModeExtract.store();
return true;
}
@Override
protected void performDefaults() {
super.performDefaults();
linkedModeRename.loadDefault();
linkedModeRenameSelect.loadDefault();
linkedModeExtract.loadDefault();
}
@Override
public void init(IWorkbench workbench) {
setPreferenceStore(CeylonPlugin.getPreferences());
CeylonEditor.initializeBrackMatcherPreferences();
}
@Override
protected Control createContents(Composite parent) {
// Composite composite = new Composite(parent, SWT.NONE);
// composite.setLayoutData(GridDataFactory.fillDefaults().grab(true, false).create());
// composite.setLayout(new GridLayout(1, true));
Control contents = super.createContents(parent);
return contents;
}
@Override
protected void createFieldEditors() {
Composite group = createGroup(1, "Linked mode");
linkedModeExtract = new BooleanFieldEditor(LINKED_MODE_EXTRACT,
"Use linked mode for extract refactorings",
getFieldEditorParent(group));
linkedModeExtract.load();
addField(linkedModeExtract);
linkedModeRename = new BoolFieldEditor(LINKED_MODE_RENAME,
"Use linked mode for rename",
getFieldEditorParent(group));
linkedModeRename.load();
addField(linkedModeRename);
final Composite parent = getFieldEditorParent(group);
parent.setLayoutData(GridDataFactory.swtDefaults().indent(10, 0).create());
linkedModeRenameSelect = new BooleanFieldEditor(LINKED_MODE_RENAME_SELECT,
"Fully select renamed identifier",
parent);
linkedModeRenameSelect.load();
addField(linkedModeRenameSelect);
linkedModeRenameSelect.setEnabled(
getPreferenceStore().getBoolean(LINKED_MODE_RENAME),
parent);
linkedModeRename.setListener(new Listener() {
@Override
public void valueChanged(boolean oldValue, boolean newValue) {
linkedModeRenameSelect.setEnabled(newValue, parent);
}
});
}
private Group createGroup(int cols, String text) {
Composite parent = getFieldEditorParent();
Group group = new Group(parent, SWT.NONE);
group.setText(text);
group.setLayout(GridLayoutFactory.swtDefaults().equalWidth(true).numColumns(cols).create());
group.setLayoutData(GridDataFactory.fillDefaults().span(3, 1).grab(true, false).create());
return group;
}
interface Listener {
void valueChanged(boolean oldValue, boolean newValue);
}
static class BoolFieldEditor extends BooleanFieldEditor {
private Listener listener;
public BoolFieldEditor(String name, String label, Composite parent) {
super(name, label, parent);
}
public BoolFieldEditor(String name, String labelText, int style,
Composite parent) {
super(name, labelText, style, parent);
}
public void setListener(Listener listener) {
this.listener = listener;
}
@Override
protected void valueChanged(boolean oldValue, boolean newValue) {
super.valueChanged(oldValue, newValue);
if (listener!=null) {
listener.valueChanged(oldValue, newValue);
}
}
@Override
protected void doLoadDefault() {
boolean oldValue = getBooleanValue();
super.doLoadDefault();
boolean newValue = getBooleanValue();
if (listener!=null) {
listener.valueChanged(oldValue, newValue);
}
}
}
protected Composite getFieldEditorParent(Composite group) {
Composite parent = new Composite(group, SWT.NULL);
parent.setLayoutData(GridDataFactory.fillDefaults().create());
return parent;
}
private IPropertyChangeListener listener;
@Override
public void dispose() {
super.dispose();
if (listener!=null) {
CeylonPlugin.getPreferences().removePropertyChangeListener(listener);
}
}
}