package com.redhat.ceylon.eclipse.code.preferences; import static com.redhat.ceylon.eclipse.code.preferences.CeylonPreferenceInitializer.CLEAN_IMPORTS; import static com.redhat.ceylon.eclipse.code.preferences.CeylonPreferenceInitializer.FORMAT; import static com.redhat.ceylon.eclipse.code.preferences.CeylonPreferenceInitializer.NORMALIZE_NL; import static com.redhat.ceylon.eclipse.code.preferences.CeylonPreferenceInitializer.NORMALIZE_WS; import static com.redhat.ceylon.eclipse.code.preferences.CeylonPreferenceInitializer.STRIP_TRAILING_WS; import static com.redhat.ceylon.eclipse.java2ceylon.Java2CeylonProxies.utilJ2C; import static org.eclipse.ui.texteditor.AbstractDecoratedTextEditorPreferenceConstants.EDITOR_SPACES_FOR_TABS; 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.jface.util.PropertyChangeEvent; 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 org.eclipse.ui.editors.text.EditorsUI; import com.redhat.ceylon.eclipse.ui.CeylonPlugin; public class CeylonSaveActionsPreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage { public static final String ID = CeylonPlugin.PLUGIN_ID + ".preferences.save"; BooleanFieldEditor normalizeWs; BooleanFieldEditor normalizeNl; BooleanFieldEditor stripTrailingWs; BooleanFieldEditor cleanImports; BooleanFieldEditor format; public CeylonSaveActionsPreferencePage() { super(GRID); setDescription("Save actions are executed each time a Ceylon source file is saved."); } @Override public boolean performOk() { normalizeWs.store(); normalizeNl.store(); stripTrailingWs.store(); cleanImports.store(); format.store(); return true; } @Override protected void performDefaults() { super.performDefaults(); normalizeWs.loadDefault(); normalizeNl.loadDefault(); stripTrailingWs.loadDefault(); cleanImports.loadDefault(); format.loadDefault(); } @Override public void init(IWorkbench workbench) { setPreferenceStore(CeylonPlugin.getPreferences()); } @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 result = super.createContents(parent); return result; } @Override protected void createFieldEditors() { Composite group = createGroup(1, "On save"); final Composite parent = getFieldEditorParent(group); normalizeWs = new BooleanFieldEditor(NORMALIZE_WS, "Convert tabs to spaces (if insert spaces for tabs enabled)", parent); normalizeWs.load(); normalizeWs.setEnabled(utilJ2C().indents().getIndentWithSpaces(), parent); listener=new IPropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent event) { if (event.getProperty().equals(EDITOR_SPACES_FOR_TABS)) { normalizeWs.setEnabled(utilJ2C().indents().getIndentWithSpaces(), parent); } } }; EditorsUI.getPreferenceStore().addPropertyChangeListener(listener); addField(normalizeWs); normalizeNl = new BooleanFieldEditor(NORMALIZE_NL, "Fix line endings", parent); normalizeNl.load(); addField(normalizeNl); stripTrailingWs = new BooleanFieldEditor(STRIP_TRAILING_WS, "Strip trailing whitespace", parent); stripTrailingWs.load(); addField(stripTrailingWs); cleanImports = new BooleanFieldEditor(CLEAN_IMPORTS, "Clean imports", parent); cleanImports.load(); addField(cleanImports); format = new BooleanFieldEditor(FORMAT, "Format", parent); format.load(); addField(format); } private Composite 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; } private IPropertyChangeListener listener; @Override public void dispose() { super.dispose(); if (listener!=null) { CeylonPlugin.getPreferences().removePropertyChangeListener(listener); } } }