package org.eclipse.imp.preferences.fields; import java.io.File; import org.eclipse.imp.preferences.IPreferencesService; import org.eclipse.imp.preferences.PreferencesTab; import org.eclipse.jface.preference.PreferencePage; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.DirectoryDialog; public class DirectoryFieldEditor extends FileFieldEditor { public DirectoryFieldEditor(PreferencePage page, PreferencesTab tab, IPreferencesService service, String level, String name, String labelText, int width, int strategy, Composite parent) { super(page, tab, service, level, name, labelText, width, strategy, parent); } public DirectoryFieldEditor(PreferencePage page, PreferencesTab tab, IPreferencesService service, String level, String name, String labelText, int width, Composite parent) { super(page, tab, service, level, name, labelText, width, parent); } public DirectoryFieldEditor(PreferencePage page, PreferencesTab tab, IPreferencesService service, String level, String name, String labelText, Composite parent) { super(page, tab, service, level, name, labelText, parent); } /** * Helper to open the directory chooser dialog. * @param startingDirectory the directory to open the dialog on. * @return File The directory the user selected or <code>null</code> if they * do not. */ @Override protected File getFile(File startingDirectory) { DirectoryDialog dialog = new DirectoryDialog(getShell(), SWT.OPEN); if (startingDirectory != null) dialog.setFilterPath(startingDirectory.getPath()); String dir = dialog.open(); if (dir != null) { dir = dir.trim(); if (dir.length() > 0) return new File(dir); } return null; } @Override protected boolean doCheckState(String path) { String msg = null; if (emptyStringAllowed && path == null || path.length() == 0) { clearErrorMessage(); return true; } File file = new File(path); boolean result = true; if (file.isDirectory()) { if (getEnforceAbsolute() && !file.isAbsolute()) msg = JFaceResources.getString("FileFieldEditor.errorMessage2");//$NON-NLS-1$ } else { msg = "Path does not designate a valid directory"; } if (msg != null) { setErrorMessage(getFieldMessagePrefix() + msg); result = false; } else { clearErrorMessage(); result = true; } return result; } }