package net.sf.eclipsefp.haskell.ui.internal.preferences;
import java.util.LinkedList;
import java.util.List;
import net.sf.eclipsefp.haskell.core.HaskellCorePlugin;
import net.sf.eclipsefp.haskell.core.preferences.ICorePreferenceNames;
import net.sf.eclipsefp.haskell.ui.internal.util.UITexts;
import org.eclipse.core.runtime.preferences.InstanceScope;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.IntegerFieldEditor;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
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.preferences.ScopedPreferenceStore;
/**
* <p>Debug preferences</p>
*
* @author JP Moresmau
*/
public class DebugPP extends PreferencePage implements IWorkbenchPreferencePage {
public static void initializeDefaults( final IPreferenceStore store ) {
store.setDefault( ICorePreferenceNames.DEBUG_BREAK_ON_ERROR, false );
store.setDefault( ICorePreferenceNames.DEBUG_BREAK_ON_EXCEPTION, false );
store.setDefault( ICorePreferenceNames.DEBUG_PRINT_WITH_SHOW, true );
store.setDefault( ICorePreferenceNames.RUN_COMMAND_HISTORY_MAX, 20 );
}
private final List<Button> buttons=new LinkedList<>();
private IntegerFieldEditor historyMax;
public DebugPP() {
super(UITexts.preferences_debug_title);
setDescription(UITexts.preferences_debug_description );
}
@Override
protected Control createContents( final Composite parent ) {
initializeDialogUnits( parent );
Composite result = new Composite( parent, SWT.NONE );
GridLayout layout = new GridLayout();
layout.marginHeight =
convertVerticalDLUsToPixels( IDialogConstants.VERTICAL_MARGIN );
layout.marginWidth = 0;
layout.verticalSpacing = convertVerticalDLUsToPixels( 10 );
layout.horizontalSpacing =
convertHorizontalDLUsToPixels( IDialogConstants.HORIZONTAL_SPACING );
layout.numColumns = 2;
result.setLayout( layout );
addButton(result,ICorePreferenceNames.DEBUG_PRINT_WITH_SHOW,UITexts.preferences_debug_print_with_show);
addButton(result,ICorePreferenceNames.DEBUG_BREAK_ON_ERROR,UITexts.preferences_debug_break_on_error);
addButton(result,ICorePreferenceNames.DEBUG_BREAK_ON_EXCEPTION,UITexts.preferences_debug_break_on_exception);
historyMax=new IntegerFieldEditor(ICorePreferenceNames.RUN_COMMAND_HISTORY_MAX, UITexts.preferences_run_command_history_max, result );
historyMax.setPreferenceStore( getPreferenceStore() );
historyMax.setValidRange( 1, 100 );
historyMax.setPage( this );
historyMax.setTextLimit( 3 );
historyMax.fillIntoGrid( result, 2 );
historyMax.load();
Dialog.applyDialogFont( result );
return result;
}
private void addButton(final Composite result,final String pref,final String text){
Button b=new Button(result,SWT.CHECK);
buttons.add(b);
b.setText( text );
b.setData( pref );
b.setSelection( getPreferenceStore().getBoolean( pref ) );
GridData gd=new GridData(GridData.GRAB_HORIZONTAL);
gd.horizontalSpan=2;
b.setLayoutData(gd);
}
@Override
public void init( final IWorkbench workbench ) {
// NOOP
}
@Override
protected void performDefaults() {
IPreferenceStore store = getPreferenceStore();
for (Button b:buttons){
String pref=(String)b.getData();
b.setSelection( store.getDefaultBoolean( pref ) );
}
historyMax.loadDefault();
super.performDefaults();
}
@Override
public boolean performOk() {
IPreferenceStore store = getPreferenceStore();
for (Button b:buttons){
String pref=(String)b.getData();
store.setValue( pref, b.getSelection() );
}
historyMax.store();
/*try {
new InstanceScope().getNode(HaskellCorePlugin.getPluginId()).flush();
} catch( BackingStoreException ex ) {
HaskellCorePlugin.log( ex );
}*/
return super.performOk();
}
@Override
protected IPreferenceStore doGetPreferenceStore() {
return new ScopedPreferenceStore(InstanceScope.INSTANCE,
HaskellCorePlugin.getPluginId());
}
}