/** * Copyright (c) 2012 by JP Moresmau * This code is made available under the terms of the Eclipse Public License, * version 1.0 (EPL). See http://www.eclipse.org/legal/epl-v10.html */ package net.sf.eclipsefp.haskell.ui.internal.preferences.scion; import net.sf.eclipsefp.haskell.ui.HaskellUIPlugin; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.preference.PreferencePage; import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; /** * Base class for all helper executable preference page * Allows choosing an exe or detecting it in the path * @author JP Moresmau * */ public abstract class ExecutablePP extends PreferencePage implements IWorkbenchPreferencePage{ private AutodetectExecutableField executableField; private final String pgmName; private final String exeName; private final String pref; private final String pkgName; public ExecutablePP( final String pgmName, final String exeName, final String pref ) { this(pgmName,exeName,exeName,pref); } public ExecutablePP( final String pgmName, final String exeName,final String pkgName, final String pref ) { super(); this.pgmName = pgmName; this.exeName = exeName; this.pkgName = pkgName; this.pref = pref; } /* (non-Javadoc) * @see org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse.swt.widgets.Composite) */ @Override protected Control createContents( final Composite parentComposite ) { noDefaultAndApplyButton(); IPreferenceStore prefStore = HaskellUIPlugin.getDefault().getPreferenceStore(); setPreferenceStore(prefStore); parentComposite.setLayout( new GridLayout(3,false) ); IPropertyChangeListener propertyListener=new IPropertyChangeListener() { @Override public void propertyChange( final PropertyChangeEvent arg0 ) { setValid( isValid() ); } }; executableField=new AutodetectExecutableField( this, parentComposite, pgmName, exeName, pkgName, pref,propertyListener ); new Label(parentComposite,SWT.NONE); setValid( isValid() ); return parentComposite; } /* (non-Javadoc) * @see org.eclipse.jface.preference.PreferencePage#performOk() */ @Override public boolean performOk() { executableField.store(); return super.performOk(); } @Override public void init( final IWorkbench workbench ) { // unused } }