package net.sf.eclipsefp.haskell.ui.internal.preferences.editor;
import net.sf.eclipsefp.common.ui.dialog.BooleanDialogField;
import net.sf.eclipsefp.common.ui.dialog.DialogField;
import net.sf.eclipsefp.common.ui.dialog.IDialogFieldListener;
import net.sf.eclipsefp.common.ui.preferences.Tab;
import net.sf.eclipsefp.common.ui.preferences.overlay.OverlayPreferenceStore;
import net.sf.eclipsefp.haskell.ui.HaskellUIPlugin;
import org.eclipse.core.runtime.preferences.InstanceScope;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.eclipse.ui.editors.text.TextEditorPreferenceConstants;
import org.osgi.service.prefs.BackingStoreException;
/**
* <p>Abstract super class for all editors preference pages (replace Tab and Editor Tab)</p>
*
* @author JP Moresmau
*/
public abstract class AbstractEditorPP extends PreferencePage implements IWorkbenchPreferencePage,
IEditorPreferenceNames {
public static void initializeDefaultValues( final IPreferenceStore store ) {
TextEditorPreferenceConstants.initializeDefaultValues( store );
DefaultEditorPreferenceInitializer.initializeDefaultValues( store );
}
private OverlayPreferenceStore overlayStore;
protected Tab tab;
@Override
public void dispose() {
if( overlayStore != null ) {
overlayStore.stopListening();
overlayStore = null;
}
super.dispose();
}
@Override
public boolean performOk() {
overlayStore.propagate();
try {
InstanceScope.INSTANCE.getNode(HaskellUIPlugin.getPluginId()).flush();
} catch( BackingStoreException ex ) {
HaskellUIPlugin.log( ex );
}
return true;
}
@Override
protected void performDefaults() {
overlayStore.loadDefaults();
super.performDefaults();
}
// interface methods of IWorkbenchPreferencePage
////////////////////////////////////////////////
@Override
public void init( final IWorkbench workbench ) {
//setPreferenceStore( HaskellUIPlugin.getDefault() .getPreferenceStore() );
overlayStore = createOverlayStore();
overlayStore.load();
overlayStore.startListening();
setPreferenceStore(overlayStore);
tab=new Tab(getPreferenceStore()){
@Override
public Control createControl( final Composite parent ) {
return null;
}
@Override
public void propertyChange( final PropertyChangeEvent arg0 ) {
// NOOP
}
};
}
private OverlayPreferenceStore createOverlayStore() {
//IPreferenceStore prefStore = getPreferenceStore();
OverlayPreferenceStore store = new OverlayPreferenceStore( HaskellUIPlugin.getDefault() .getPreferenceStore() );
addPreferences( store );
return store;
}
// functionality for subclasses
///////////////////////////////
DialogField createBooleanField( final Composite parent,
final String text,
final String name ) {
BooleanDialogField result = new BooleanDialogField( parent, text );
result.addDialogFieldListener( new IDialogFieldListener() {
@Override
public void infoChanged( final Object newInfo ) {
boolean selected = ( ( Boolean )newInfo ).booleanValue();
getPreferenceStore().setValue( name, selected );
}
} );
result.setInfo( getFromStore( name ) );
return result;
}
// helping methods
//////////////////
Boolean getFromStore( final String name ) {
boolean value = getPreferenceStore().getBoolean( name );
return ( value ) ? Boolean.TRUE : Boolean.FALSE;
}
protected abstract void addPreferences(final OverlayPreferenceStore store);
}