package com.redhat.ceylon.eclipse.code.preferences;
import static com.redhat.ceylon.eclipse.code.preferences.CeylonPreferenceInitializer.ALTERNATE_ICONS;
import static com.redhat.ceylon.eclipse.code.preferences.CeylonPreferenceInitializer.DEFAULT_PROJECT_TYPE;
import static com.redhat.ceylon.eclipse.code.preferences.CeylonPreferenceInitializer.DEFAULT_RESOURCE_FOLDER;
import static com.redhat.ceylon.eclipse.code.preferences.CeylonPreferenceInitializer.DEFAULT_SOURCE_FOLDER;
import static org.eclipse.ui.dialogs.PreferencesUtil.createPreferenceDialogOn;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.jface.preference.FieldEditorPreferencePage;
import org.eclipse.jface.preference.RadioGroupFieldEditor;
import org.eclipse.jface.preference.StringFieldEditor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Link;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import com.redhat.ceylon.eclipse.core.debug.preferences.CeylonStepFilterPreferencePage;
import com.redhat.ceylon.eclipse.ui.CeylonPlugin;
public class CeylonPreferencePage
extends FieldEditorPreferencePage
implements IWorkbenchPreferencePage {
public static final String VM_PREFERENCE_PAGE =
"org.eclipse.jdt.debug.ui.preferences.VMPreferencePage";
private StringFieldEditor sourceFolder;
private StringFieldEditor resourceFolder;
private RadioGroupFieldEditor projectType;
private BoolFieldEditor alternateIcons;
public static final String ID =
CeylonPlugin.PLUGIN_ID + ".preferences";
public CeylonPreferencePage() {
super(GRID);
setDescription("Preferences relating to Ceylon development.");
}
@Override
public void init(IWorkbench workbench) {
setPreferenceStore(CeylonPlugin.getPreferences());
}
@Override
protected Control createContents(Composite parent) {
Link jreLink = new Link(parent, 0);
jreLink.setLayoutData(
GridDataFactory.swtDefaults()
.align(SWT.FILL, SWT.CENTER)
.create());
jreLink.setText("See Java '<a>Installed JREs</a>' to set up a Java Virtual Machine.");
jreLink.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
createPreferenceDialogOn(getShell(),
VM_PREFERENCE_PAGE,
null, null);
}
});
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(composite);
Link textEditorsLink = new Link(parent, 0);
textEditorsLink.setLayoutData(
GridDataFactory.swtDefaults()
.align(SWT.FILL, SWT.CENTER)
.create());
textEditorsLink.setText("See '<a>Editor</a>' for Ceylon editor preferences.");
textEditorsLink.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
createPreferenceDialogOn(getShell(),
CeylonEditorPreferencePage.ID, null, null);
}
});
Link completionLink = new Link(parent, 0);
completionLink.setLayoutData(
GridDataFactory.swtDefaults()
.align(SWT.FILL, SWT.CENTER)
.create());
completionLink.setText("See '<a>Completion</a>' for preferences related to content completion.");
completionLink.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
createPreferenceDialogOn(getShell(),
CeylonCompletionPreferencePage.ID, null, null);
}
});
Link refactoringLink = new Link(parent, 0);
refactoringLink.setLayoutData(
GridDataFactory.swtDefaults()
.align(SWT.FILL, SWT.CENTER)
.create());
refactoringLink.setText("See '<a>Refactoring</a>' for preferences related to refactoring.");
refactoringLink.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
createPreferenceDialogOn(getShell(),
CeylonRefactoringPreferencePage.ID,
null, null);
}
});
Link saveLink = new Link(parent, 0);
saveLink.setLayoutData(
GridDataFactory.swtDefaults()
.align(SWT.FILL, SWT.CENTER)
.create());
saveLink.setText("See '<a>Save Actions</a>' to enable save actions.");
saveLink.addSelectionListener(
new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
createPreferenceDialogOn(getShell(),
CeylonSaveActionsPreferencePage.ID,
null, null);
}
});
Link outlineLink = new Link(parent, 0);
outlineLink.setLayoutData(
GridDataFactory.swtDefaults()
.align(SWT.FILL, SWT.CENTER)
.create());
outlineLink.setText("See '<a>Outlines, Hierarchies, and Search Results</a>' to customize views.");
outlineLink.addSelectionListener(
new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
createPreferenceDialogOn(getShell(),
CeylonOutlinesPreferencePage.ID,
null, null);
}
});
Link openLink = new Link(parent, 0);
openLink.setLayoutData(
GridDataFactory.swtDefaults()
.align(SWT.FILL, SWT.CENTER)
.create());
openLink.setText("See '<a>Open Dialogs</a>' to customize 'Open ...' dialog navigation.");
openLink.addSelectionListener(
new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
createPreferenceDialogOn(getShell(),
CeylonOpenDialogsPreferencePage.ID,
null, null);
}
});
Link filtersLink = new Link(parent, 0);
filtersLink.setLayoutData(
GridDataFactory.swtDefaults()
.align(SWT.FILL, SWT.CENTER)
.create());
filtersLink.setText("See '<a>Filtering</a>' to set up filtering.");
filtersLink.addSelectionListener(
new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
createPreferenceDialogOn(getShell(),
CeylonFiltersPreferencePage.ID,
null, null);
}
});
Link debugLink = new Link(parent, 0);
debugLink.setLayoutData(
GridDataFactory.swtDefaults()
.align(SWT.FILL, SWT.CENTER)
.create());
debugLink.setText("See '<a>Debugging</a>' to set up step filtering.");
debugLink.addSelectionListener(
new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
createPreferenceDialogOn(getShell(),
CeylonStepFilterPreferencePage.ID,
null, null);
}
});
return contents;
}
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;
}
protected Composite getFieldEditorParent(Composite group) {
Composite parent = new Composite(group, SWT.NULL);
parent.setLayoutData(
GridDataFactory.fillDefaults()
.create());
return parent;
}
@Override
protected void createFieldEditors() {
final Composite iconsGroup =
createGroup(1,
"Icon set");
alternateIcons = new BoolFieldEditor(ALTERNATE_ICONS,
"Use alternative icon set (takes effect after restarting Eclipse)",
getFieldEditorParent(iconsGroup));
final Composite defaultsGroup =
createGroup(1,
"Defaults for new Ceylon projects");
projectType = new RadioGroupFieldEditor(DEFAULT_PROJECT_TYPE,
"Default target virtual machine:", 3,
new String[][] { new String[] { "JVM", "jvm" },
new String[] { "JavaScript", "js" },
new String[] { "Cross-platform", "jvm,js" } },
getFieldEditorParent(defaultsGroup));
sourceFolder = new StringFieldEditor(DEFAULT_SOURCE_FOLDER,
"Default source folder name:",
getFieldEditorParent(defaultsGroup));
resourceFolder = new StringFieldEditor(DEFAULT_RESOURCE_FOLDER,
"Default resource folder name:",
getFieldEditorParent(defaultsGroup));
alternateIcons.load();
projectType.load();
sourceFolder.load();
resourceFolder.load();
addField(alternateIcons);
addField(projectType);
addField(sourceFolder);
addField(resourceFolder);
}
@Override
protected void performDefaults() {
alternateIcons.loadDefault();
projectType.loadDefault();
sourceFolder.loadDefault();
resourceFolder.loadDefault();
super.performDefaults();
}
@Override
public boolean performOk() {
alternateIcons.store();
projectType.store();
sourceFolder.store();
resourceFolder.store();
return super.performOk();
}
}