org.eclipse.jface.preference.FileFieldEditor Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of org.eclipse.jface Show documentation
Show all versions of org.eclipse.jface Show documentation
This is org.eclipse.jface jar used by Scout SDK
The newest version!
/*******************************************************************************
* Copyright (c) 2000, 2015 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
* Baltasar Belyavsky - fix for 300539 - Add ability to specify filter-path
*******************************************************************************/
package org.eclipse.jface.preference;
import java.io.File;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.FileDialog;
/**
* 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 null
* for system defaults.
*/
private String[] extensions = null;
/**
* Initial path for the Browse dialog.
*/
private File filterPath = null;
/**
* Indicates whether the path must be absolute;
* false
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 true
if the file path
* must be absolute, and false
otherwise
* @param parent the parent of the field editor's control
*/
public FileFieldEditor(String name, String labelText, boolean enforceAbsolute, Composite parent) {
this(name, labelText, enforceAbsolute, VALIDATE_ON_FOCUS_LOST, 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 true
if the file path
* must be absolute, and false
otherwise
* @param validationStrategy either {@link StringButtonFieldEditor#VALIDATE_ON_KEY_STROKE}
* to perform on the fly checking, or {@link StringButtonFieldEditor#VALIDATE_ON_FOCUS_LOST}
* (the default) to perform validation only after the text has been typed in
* @param parent the parent of the field editor's control.
* @since 3.4
* @see StringButtonFieldEditor#VALIDATE_ON_KEY_STROKE
* @see StringButtonFieldEditor#VALIDATE_ON_FOCUS_LOST
*/
public FileFieldEditor(String name, String labelText,
boolean enforceAbsolute, int validationStrategy, Composite parent) {
init(name, labelText);
this.enforceAbsolute = enforceAbsolute;
setErrorMessage(JFaceResources
.getString("FileFieldEditor.errorMessage"));//$NON-NLS-1$
setChangeButtonText(JFaceResources.getString("openBrowse"));//$NON-NLS-1$
setValidateStrategy(validationStrategy);
createControl(parent);
}
@Override
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();
}
@Override
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;
}
if(doCheckState()) { // OK!
clearErrorMessage();
return true;
}
msg = getErrorMessage(); // subclass might have changed it in the #doCheckState()
if (msg != null) {
showErrorMessage(msg);
}
return false;
}
/**
* Helper to open the file chooser dialog.
* @param startingDirectory the directory to open the dialog on.
* @return File The File the user selected or null
if they
* do not.
*/
private File getFile(File startingDirectory) {
FileDialog dialog = new FileDialog(getShell(), SWT.OPEN | SWT.SHEET);
if (startingDirectory != null) {
dialog.setFileName(startingDirectory.getPath());
}
else if (filterPath != null) {
dialog.setFilterPath(filterPath.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 extensions a list of file extension, or null
* to set the filter to the system's default value
*/
public void setFileExtensions(String[] extensions) {
this.extensions = extensions;
}
/**
* Sets the initial path for the Browse dialog.
* @param path initial path for the Browse dialog
* @since 3.6
*/
public void setFilterPath(File path) {
filterPath = path;
}
}