// Copyright (c) 2003-2004 by Leif Frenzel - see http://leiffrenzel.de package net.sf.eclipsefp.common.ui.dialog; import org.eclipse.core.resources.*; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.jface.window.Window; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.dialogs.ElementTreeSelectionDialog; import org.eclipse.ui.model.WorkbenchContentProvider; import org.eclipse.ui.model.WorkbenchLabelProvider; import org.eclipse.ui.views.navigator.ResourceComparator; /** <p>a dialog field that allows the selection of a directory.</p> * * @author Leif Frenzel */ public class WSFileDialogField extends BrowseDialogField { private final String extension; public WSFileDialogField( final Composite parent, final String labelText ) { super( parent, labelText ); extension = null; } public WSFileDialogField( final Composite parent, final String labelText, final String extension ) { super( parent, labelText ); this.extension = extension; } // interface methods of BrowseDialogField ///////////////////////////////////////// @Override String openDialog( final Shell shell ) { IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); // TODO initial selection // IResource focus= initialSelection != null ? // root.findMember(initialSelection) : null; ElementTreeSelectionDialog dialog = createDialog( shell ); dialog.setTitle( "Select a file" ); addFilter( dialog ); dialog.setInput( root ); dialog.setComparator( new ResourceComparator( ResourceComparator.NAME ) ); // dialog.setInitialSelection(focus); return openDialog( dialog ); } // helping methods ////////////////// private String openDialog( final ElementTreeSelectionDialog dialog ) { String result = ""; if( dialog.open() == Window.OK ) { Object[] elements = dialog.getResult(); if( elements.length > 0 ) { IResource res = ( IResource )elements[ 0 ]; result = res.getLocation().toOSString(); } } return result; } private ElementTreeSelectionDialog createDialog( final Shell shell ) { WorkbenchLabelProvider lp = new WorkbenchLabelProvider(); WorkbenchContentProvider cp = new WorkbenchContentProvider(); return new ElementTreeSelectionDialog( shell, lp, cp ); } private void addFilter( final ElementTreeSelectionDialog dialog ) { if( extension != null ) { dialog.addFilter( new ViewerFilter() { @Override public boolean select( final Viewer viewer, final Object parentElement, final Object element ) { boolean result = true; IResource res = ( IResource )element; if( res instanceof IFile ) { result = res.getFileExtension().equals( extension ); } return result; } } ); } } }