/**
* Copyright (c) 2013 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 java.io.File;
import net.sf.eclipsefp.haskell.core.cabal.CabalImplementation;
import net.sf.eclipsefp.haskell.core.cabal.CabalImplementationManager;
import net.sf.eclipsefp.haskell.ui.internal.preferences.IPreferenceConstants;
import net.sf.eclipsefp.haskell.ui.internal.util.UITexts;
import org.eclipse.jface.preference.BooleanFieldEditor;
import org.eclipse.jface.preference.DirectoryFieldEditor;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
/**
* Preference page for cabal-dev
* @author JP Moresmau
*
*/
public class CabalDevPP extends ExecutablePP {
private BooleanFieldEditor uniqueSandboxField;
private BooleanFieldEditor cabalSandboxField;
private DirectoryFieldEditor uniqueSandboxLocationField;
private BooleanFieldEditor manageDependenciesField;
public CabalDevPP(){
super("cabal-dev","cabal-dev",IPreferenceConstants.CABALDEV_EXECUTABLE);
}
/* (non-Javadoc)
* @see net.sf.eclipsefp.haskell.ui.internal.preferences.scion.ExecutablePP#createContents(org.eclipse.swt.widgets.Composite)
*/
@Override
protected Control createContents( final Composite parentComposite ) {
Control c=super.createContents( parentComposite );
Label l=new Label(parentComposite,SWT.NONE);
l.setText( UITexts.preferences_cabaldev_note);
cabalSandboxField= new BooleanFieldEditor( IPreferenceConstants.CABAL_SANDBOX,
UITexts.executables_preferences_cabal_sandbox,
parentComposite );
cabalSandboxField.setPage(this);
cabalSandboxField.setPreferenceStore( getPreferenceStore() );
cabalSandboxField.load();
CabalImplementation impl=CabalImplementationManager.getInstance().getDefaultCabalImplementation();
if (impl==null || !impl.allowsSandbox()){
cabalSandboxField.setEnabled( false, parentComposite );
}
cabalSandboxField.fillIntoGrid( parentComposite, 3 );
uniqueSandboxField= new BooleanFieldEditor( IPreferenceConstants.UNIQUE_SANDBOX,
UITexts.executables_preferences_unique_sandbox,
parentComposite );
uniqueSandboxField.setPage(this);
uniqueSandboxField.setPreferenceStore( getPreferenceStore() );
uniqueSandboxField.load();
uniqueSandboxField.fillIntoGrid( parentComposite, 3 );
final Composite locComposite=new Composite(parentComposite,SWT.NONE);
GridData gd=new GridData(SWT.FILL,SWT.CENTER,true,false);
gd.horizontalSpan=3;
locComposite.setLayoutData( gd );
locComposite.setLayout( new GridLayout(3,false) );
uniqueSandboxLocationField=new DirectoryFieldEditor( IPreferenceConstants.UNIQUE_SANDBOX_PATH, UITexts.executables_preferences_unique_sandbox_location, locComposite ){
/* (non-Javadoc)
* @see org.eclipse.jface.preference.DirectoryFieldEditor#doCheckState()
*/
@Override
protected boolean doCheckState() {
String fileName = getTextControl().getText();
fileName = fileName.trim();
if (fileName.length() == 0 && isEmptyStringAllowed()) {
return true;
}
File file = new File(fileName);
return !file.isFile();
}
};
uniqueSandboxLocationField.setPage(this);
uniqueSandboxLocationField.setPreferenceStore( getPreferenceStore() );
uniqueSandboxLocationField.load();
uniqueSandboxLocationField.setEnabled( uniqueSandboxField.getBooleanValue(), locComposite );
uniqueSandboxField.setPropertyChangeListener( new IPropertyChangeListener() {
@Override
public void propertyChange( final PropertyChangeEvent event ) {
uniqueSandboxLocationField.setEnabled( uniqueSandboxField.getBooleanValue(), locComposite );
}
} );
uniqueSandboxLocationField.fillIntoGrid( locComposite, 3 );
manageDependenciesField= new BooleanFieldEditor( IPreferenceConstants.MANAGE_DEPENDENCIES,
UITexts.executables_preferences_manage_dependencies,
parentComposite );
manageDependenciesField.setPage(this);
manageDependenciesField.setPreferenceStore( getPreferenceStore() );
manageDependenciesField.load();
manageDependenciesField.fillIntoGrid( parentComposite, 3 );
getShell().layout(true,true);
return c;
}
@Override
public boolean performOk() {
uniqueSandboxField.store();
cabalSandboxField.store();
uniqueSandboxLocationField.store();
manageDependenciesField.store();
return super.performOk();
}
}