// Copyright (c) 2003-2005 by Leif Frenzel - see http://leiffrenzel.de
package net.sf.eclipsefp.haskell.hugs.ui.preferences;
import net.sf.eclipsefp.common.ui.preferences.Tab;
import net.sf.eclipsefp.common.ui.preferences.overlay.OverlayPreferenceStore;
import net.sf.eclipsefp.haskell.hugs.HugsPlugin;
import net.sf.eclipsefp.haskell.hugs.core.IHugsParameters;
import net.sf.eclipsefp.haskell.hugs.core.preferences.IHugsPreferenceNames;
import org.eclipse.core.runtime.preferences.InstanceScope;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.*;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.osgi.service.prefs.BackingStoreException;
/** <p>The preference page for the HUGS preferences.</p>
*
* @author Leif Frenzel
*/
public class HugsPreferencePage extends PreferencePage
implements IWorkbenchPreferencePage,
IHugsPreferenceNames,
IHugsParameters {
private OverlayPreferenceStore overlayStore;
// interface methods of PreferencePage
//////////////////////////////////////
@Override
protected Control createContents( final Composite parent ) {
TabFolder folder = new TabFolder( parent, SWT.NONE );
Tab generalTab = new GeneralTab( overlayStore );
createTab( folder, "General", generalTab.createControl( folder ) );
// Tab languageTab = new LanguageTab( overlayStore );
// Control languageControl = languageTab.createControl( folder );
// createTab( folder, "Language Options", languageControl );
//
// Tab optimizationTab = new OptimizationTab( overlayStore );
// Control optimizationControl = optimizationTab.createControl( folder );
// createTab( folder, "Optimization", optimizationControl );
//
// Tab moreOptimizationTab = new MoreOptimizationTab( overlayStore );
// Control moreOptControl = moreOptimizationTab.createControl( folder );
// createTab( folder, "More Optimization", moreOptControl );
Dialog.applyDialogFont( folder );
return folder;
}
@Override
public void dispose() {
if( overlayStore != null ) {
overlayStore.stopListening();
overlayStore = null;
}
super.dispose();
}
@Override
public boolean performOk() {
overlayStore.propagate();
try {
new InstanceScope().getNode(HugsPlugin.getPluginId()).flush();
} catch( BackingStoreException ex ) {
HugsPlugin.log( ex );
}
return true;
}
@Override
protected void performDefaults() {
overlayStore.loadDefaults();
super.performDefaults();
}
// interface methods of IWorkbenchPreferencePage
////////////////////////////////////////////////
@Override
public void init( final IWorkbench workbench ) {
setPreferenceStore( HugsPlugin.getDefault().getPreferenceStore() );
overlayStore = createOverlayStore();
overlayStore.load();
overlayStore.startListening();
}
// helping methods
//////////////////
private void createTab( final TabFolder folder,
final String label,
final Control control ) {
TabItem tab = new TabItem( folder, SWT.NONE );
tab.setText( label );
tab.setControl( control );
}
private OverlayPreferenceStore createOverlayStore() {
IPreferenceStore prefStore = getPreferenceStore();
OverlayPreferenceStore store = new OverlayPreferenceStore( prefStore );
addGeneralPreferences( store );
return store;
}
private void addGeneralPreferences( final OverlayPreferenceStore store ) {
store.addStringKey( EXECUTABLE_NAME );
}
}