package org.eclipse.jface.preference; | |
/* | |
* (c) Copyright IBM Corp. 2000, 2001. | |
* All Rights Reserved. | |
*/ | |
import org.eclipse.jface.resource.JFaceResources; | |
import org.eclipse.swt.SWT; | |
import org.eclipse.swt.events.*; | |
import org.eclipse.swt.widgets.*; | |
import java.io.File; | |
/** | |
* A field editor for a file path type preference. A standard file | |
* dialog appears when the user presses the change button. | |
*/ | |
public class FileFieldEditor extends StringButtonFieldEditor { | |
/** | |
* List of legal file extension suffixes, or <code>null</code> | |
* for system defaults. | |
*/ | |
private String[] extensions = null; | |
/** | |
* Indicates whether the path must be absolute; | |
* <code>false</code> by default. | |
*/ | |
private boolean enforceAbsolute = false; | |
/** | |
* Creates a new file field editor | |
*/ | |
protected FileFieldEditor() { | |
} | |
/** | |
* Creates a file field editor. | |
* | |
* @param name the name of the preference this field editor works on | |
* @param labelText the label text of the field editor | |
* @param parent the parent of the field editor's control | |
*/ | |
public FileFieldEditor(String name, String labelText, Composite parent) { | |
this(name, labelText, false, parent); | |
} | |
/** | |
* Creates a file field editor. | |
* | |
* @param name the name of the preference this field editor works on | |
* @param labelText the label text of the field editor | |
* @param enforceAbsolute <code>true</code> if the file path | |
* must be absolute, and <code>false</code> otherwise | |
* @param parent the parent of the field editor's control | |
*/ | |
public FileFieldEditor(String name, String labelText, boolean enforceAbsolute, Composite parent) { | |
init(name, labelText); | |
this.enforceAbsolute = enforceAbsolute; | |
setErrorMessage(JFaceResources.getString("FileFieldEditor.errorMessage"));//$NON-NLS-1$ | |
setChangeButtonText(JFaceResources.getString("openBrowse"));//$NON-NLS-1$ | |
setValidateStrategy(VALIDATE_ON_FOCUS_LOST); | |
createControl(parent); | |
} | |
/* (non-Javadoc) | |
* Method declared on StringButtonFieldEditor. | |
* Opens the file chooser dialog and returns the selected file. | |
*/ | |
protected String changePressed() { | |
File f = new File(getTextControl().getText()); | |
if (!f.exists()) | |
f = null; | |
File d = getFile(f); | |
if (d == null) | |
return null; | |
return d.getAbsolutePath(); | |
} | |
/* (non-Javadoc) | |
* Method declared on StringFieldEditor. | |
* Checks whether the text input field specifies an existing file. | |
*/ | |
protected boolean checkState() { | |
String msg = null; | |
String path = getTextControl().getText(); | |
if (path != null) | |
path = path.trim(); | |
else | |
path = "";//$NON-NLS-1$ | |
if (path.length() == 0) { | |
if (!isEmptyStringAllowed()) | |
msg = getErrorMessage(); | |
} else { | |
File file = new File(path); | |
if (file.isFile()) { | |
if (enforceAbsolute && !file.isAbsolute()) | |
msg = JFaceResources.getString("FileFieldEditor.errorMessage2");//$NON-NLS-1$ | |
} else { | |
msg = getErrorMessage(); | |
} | |
} | |
if (msg != null) { // error | |
showErrorMessage(msg); | |
return false; | |
} | |
// OK! | |
clearErrorMessage(); | |
return true; | |
} | |
/** | |
* Helper to open the file chooser dialog. | |
*/ | |
private File getFile(File startingDirectory) { | |
FileDialog dialog = new FileDialog(getShell(), SWT.OPEN); | |
if (startingDirectory != null) | |
dialog.setFileName(startingDirectory.getPath()); | |
if (extensions != null) | |
dialog.setFilterExtensions(extensions); | |
String file = dialog.open(); | |
if (file != null) { | |
file = file.trim(); | |
if (file.length() > 0) | |
return new File(file); | |
} | |
return null; | |
} | |
/** | |
* Sets this file field editor's file extension filter. | |
* | |
* @param extension a list of file extension, or <code>null</code> | |
* to set the filter to the system's default value | |
*/ | |
public void setFileExtensions(String[] extensions) { | |
this.extensions = extensions; | |
} | |
} |