package net.sf.eclipsefp.haskell.ui.wizards.cabal; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; import java.io.File; import java.util.Collection; import java.util.Iterator; import net.sf.eclipsefp.haskell.buildwrapper.BWFacade; import org.eclipse.core.resources.IProject; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.DirectoryDialog; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; /** * <p>Common UI class for cabal operations: set the dist folder (use scion folder by default)</p> * * @author JP Moresmau */ public class DistFolder { /** * simple property for a listener to listen to */ public static final String PROP_PATH="PATH"; private final Text tFolder; private String fullPath; private final PropertyChangeSupport pcs=new PropertyChangeSupport( this ); public DistFolder(final Collection<IProject> projects,final Composite composite,final String label,final String dialogTitle,final String dialogMessage){ Label lFolder=new Label(composite,SWT.NONE); lFolder.setText( label ); tFolder=new Text(composite,SWT.BORDER); tFolder.setText( BWFacade.DIST_FOLDER_CABAL ); GridData gd=new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL); tFolder.setLayoutData( gd ); Iterator<IProject> projIter = projects.iterator(); if (projIter.hasNext()) { final IProject uniqueP=projIter.next(); final String projectLocation=uniqueP.getLocation().toOSString(); fullPath=uniqueP.getLocation().append( BWFacade.DIST_FOLDER_CABAL ).toOSString(); Button bFolder=new Button(composite,SWT.PUSH); bFolder.setText( "..." ); bFolder.addSelectionListener( new SelectionAdapter() { @Override public void widgetSelected( final SelectionEvent e ) { String oldDisplay=null; if (fullPath!=null && fullPath.startsWith( projectLocation )){ oldDisplay=fullPath.substring( projectLocation.length()+File.separator.length() ); } DirectoryDialog dd=new DirectoryDialog( composite.getShell() ); dd.setText( dialogTitle ); dd.setMessage( dialogMessage ); dd.setFilterPath( fullPath ); fullPath=dd.open(); String toDisplay=fullPath; if (fullPath.startsWith( projectLocation )){ toDisplay=fullPath.substring( projectLocation.length()+File.separator.length() ); } tFolder.setText( toDisplay ); pcs.firePropertyChange( PROP_PATH, oldDisplay, toDisplay ); } }); } } public void addPropertyListener(final PropertyChangeListener pcl){ pcs.addPropertyChangeListener( PROP_PATH,pcl ); pcs.firePropertyChange( PROP_PATH, null, BWFacade.DIST_FOLDER_CABAL ); } public String getFolder(){ return tFolder.getText(); } }