package org.radrails.rails.internal.ui.preferences; import org.eclipse.core.runtime.Preferences; import org.eclipse.jface.preference.BooleanFieldEditor; import org.eclipse.jface.preference.FieldEditorPreferencePage; import org.eclipse.jface.preference.FileFieldEditor; import org.eclipse.jface.preference.PreferenceStore; 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.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Link; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; import org.eclipse.ui.dialogs.PreferencesUtil; import org.radrails.rails.core.IRailsConstants; import org.radrails.rails.internal.core.RailsPlugin; /** * @author matt * @author cwilliams */ public class RailsPreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage { public RailsPreferencePage() { super(GRID); setPreferenceStore(new AdaptedPreferences(RailsPlugin.getInstance().getPluginPreferences())); setDescription(Messages.RailsPreferencePage_Description); } protected void createFieldEditors() { Group scriptPathsGroup = new Group(getFieldEditorParent(), SWT.NONE); scriptPathsGroup.setText("Script Paths"); GridData gd = new GridData(SWT.FILL, SWT.BEGINNING, true, false); gd.horizontalSpan = 3; scriptPathsGroup.setLayoutData(gd); scriptPathsGroup.setLayout(new GridLayout(3, false)); addScriptPathsSection(scriptPathsGroup); // Toggle auto-open of Rails Shell Group group = new Group(getFieldEditorParent(), SWT.NONE); group.setText("Rails Shell"); gd = new GridData(SWT.FILL, SWT.BEGINNING, true, false); gd.horizontalSpan = 3; gd.heightHint = 40; group.setLayoutData(gd); addField(new BooleanFieldEditor(IRailsConstants.AUTO_OPEN_RAILS_SHELL, "Automatically open Rails Shell on Startup", group)); } private void addScriptPathsSection(Composite parent) { Label header = new Label(parent, SWT.WRAP); GridData headerData = new GridData(); headerData.horizontalSpan = 3; headerData.verticalSpan = 3; headerData.widthHint = 500; header.setLayoutData(headerData); header.setText(Messages.RailsPreferencePage_HeaderText); header.setFont(parent.getFont()); Link link = new Link(parent, SWT.WRAP); link.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { PreferencesUtil.createPreferenceDialogOn(getShell(), "org.rubypeople.rdt.debug.ui.preferences.PreferencePageRubyInterpreter", null, null); } }); link.setText(Messages.RailsPreferencePage_InterpretersLinkText); GridData data = new GridData(); data.horizontalSpan = 3; data.widthHint = 500; link.setLayoutData(data); addField(new FileFieldEditor(IRailsConstants.PREF_RAILS_PATH, Messages.RailsPreferencePage_RailsPathLabel, parent)); Label detectedPath = new Label(parent, SWT.NONE); detectedPath.setText(Messages.RailsPreferencePage_DetectedPathLabel); detectedPath.setFont(parent.getFont()); Label detectedRailsPath = new Label(parent, SWT.NONE); String detectedRails = RailsPlugin.getInstance().getRailsPath(); detectedRailsPath.setFont(parent.getFont()); if (detectedRails != null) { detectedRailsPath.setText(detectedRails); } else { detectedRailsPath.setText("Not detected"); } new Label(getFieldEditorParent(), SWT.NONE); Label space = new Label(parent, SWT.NONE); space.setLayoutData(data); addField(new FileFieldEditor(IRailsConstants.PREF_MONGREL_PATH, Messages.RailsPreferencePage_MongrelRailsPathLabel, parent)); Label detectedPath2 = new Label(parent, SWT.NONE); detectedPath2.setText(Messages.RailsPreferencePage_DetectedPathLabel); detectedPath2.setFont(parent.getFont()); Label detectedMongrelPath = new Label(parent, SWT.NONE); detectedMongrelPath.setFont(parent.getFont()); String detectedMongrel = RailsPlugin.getInstance().getMongrelPath(); if (detectedMongrel != null) { detectedMongrelPath.setText(detectedMongrel); } else { detectedMongrelPath.setText("Not detected"); } new Label(parent, SWT.NONE); } public void init(IWorkbench workbench) { } private class AdaptedPreferences extends PreferenceStore { private Preferences fPrefs; public AdaptedPreferences(Preferences prefs) { fPrefs = prefs; } public String getString(String name) { return fPrefs.getString(name); } public void setValue(String name, String value) { fPrefs.setValue(name, value); } public String getDefaultString(String name) { return fPrefs.getDefaultString(name); } @Override public void setValue(String name, boolean value) { fPrefs.setValue(name, value); } @Override public boolean getDefaultBoolean(String name) { return fPrefs.getDefaultBoolean(name); } @Override public boolean getBoolean(String name) { return fPrefs.getBoolean(name); } } }