package org.xmind.ui.internal.spelling; import java.util.ArrayList; import java.util.List; import org.eclipse.jface.layout.GridLayoutFactory; import org.eclipse.jface.preference.BooleanFieldEditor; import org.eclipse.jface.preference.FieldEditor; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; import org.xmind.ui.preference.PreferenceFieldEditorPageSection; import com.swabunga.spell.engine.Configuration; public class SpellingOptionsPreferencePageSection extends PreferenceFieldEditorPageSection implements IWorkbenchPreferencePage { private List<FieldEditor> settingFields = new ArrayList<FieldEditor>(); protected Composite settingsParent; public void init(IWorkbench workbenche) { setPreferenceStore(SpellingPlugin.getDefault().getPreferenceStore()); } @Override protected void createFieldEditors() { addField(new BooleanFieldEditor(SpellingPlugin.SPELLING_CHECK_ENABLED, Messages.enableSpellCheck, getFieldEditorParent())); addSpellingSettings(getFieldEditorParent()); updateOptions(SpellingPlugin.isSpellingCheckEnabled()); } private void addSpellingSettings(Composite parent) { settingsParent = createSettingsParent(parent); addSettingField(Configuration.SPELL_IGNOREUPPERCASE, Messages.ignoreAllCapital); addSettingField(Configuration.SPELL_IGNOREMIXEDCASE, Messages.ignoreMultiCapital); addSettingField(Configuration.SPELL_IGNOREINTERNETADDRESSES, Messages.ignoreWebAddress); addSettingField(Configuration.SPELL_IGNOREDIGITWORDS, Messages.ignoreNumberousAppendix); addSettingField(Configuration.SPELL_IGNORESENTENCECAPITALIZATION, Messages.ignoreFirstLowercaseSentences); } private void addSettingField(String name, String label) { FieldEditor field = new BooleanFieldEditor(name, label, settingsParent); addField(field); settingFields.add(field); } private void updateOptions(boolean enabled) { settingsParent.setEnabled(enabled); for (FieldEditor field : settingFields) { field.setEnabled(enabled, settingsParent); } } public void propertyChange(PropertyChangeEvent event) { FieldEditor field = (FieldEditor) event.getSource(); if (SpellingPlugin.SPELLING_CHECK_ENABLED .equals(field.getPreferenceName())) { updateOptions(((BooleanFieldEditor) field).getBooleanValue()); } } @Override public void dispose() { super.dispose(); if (settingsParent != null) { settingsParent.dispose(); settingsParent = null; } } protected Composite createSettingsParent(Composite parent) { GridLayoutFactory.fillDefaults().extendedMargins(25, 0, 0, 0) .applyTo(parent); parent.setLayoutData( new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); Composite itemContainer = new Composite(parent, SWT.NONE); itemContainer.setLayoutData( new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); GridLayoutFactory.fillDefaults().applyTo(itemContainer); return itemContainer; } public void apply() { this.performApply(); } public boolean ok() { return this.performOk(); } public void excuteDefault() { this.performDefaults(); } public boolean cancel() { return this.performCancel(); } }