/**
* Copyright (c) 2013-2016 Angelo ZERR.
* 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:
* Angelo Zerr <angelo.zerr@gmail.com> - initial API and implementation
*/
package tern.eclipse.ide.ui.preferences;
import java.io.File;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.FileDialog;
public class FileComboFieldEditor extends StringButtonComboFieldEditor {
private String[] extensions;
private File filterPath;
private boolean enforceAbsolute;
protected FileComboFieldEditor(String[] items) {
super(items);
this.extensions = null;
this.filterPath = null;
this.enforceAbsolute = false;
}
public FileComboFieldEditor(String name, String labelText, String[] items,
Composite parent) {
this(name, labelText, false, items, parent);
}
public FileComboFieldEditor(String name, String labelText,
boolean enforceAbsolute, String[] items, Composite parent) {
this(name, labelText, enforceAbsolute, 1, items, parent);
}
public FileComboFieldEditor(String name, String labelText,
boolean enforceAbsolute, int validationStrategy, String[] items,
Composite parent) {
super(items);
this.extensions = null;
this.filterPath = null;
this.enforceAbsolute = false;
init(name, labelText);
this.enforceAbsolute = enforceAbsolute;
setErrorMessage(JFaceResources
.getString("FileFieldEditor.errorMessage"));
setChangeButtonText(JFaceResources.getString("openBrowse"));
setValidateStrategy(validationStrategy);
createControl(parent);
}
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();
}
protected boolean checkState() {
String msg = null;
String path = getTextControl().getText();
if (path != null)
path = path.trim();
else {
path = "";
}
if (path.length() == 0) {
if (!(isEmptyStringAllowed()))
msg = getErrorMessage();
} else {
if (!path.equals("node")) {
File file = new File(path);
if (file.isFile()) {
if ((this.enforceAbsolute) && (!(file.isAbsolute())))
msg = JFaceResources
.getString("FileFieldEditor.errorMessage2");
} else {
msg = getErrorMessage();
}
}
}
if (msg != null) {
showErrorMessage(msg);
return false;
}
if (doCheckState()) {
clearErrorMessage();
return true;
}
msg = getErrorMessage();
if (msg != null) {
showErrorMessage(msg);
}
return false;
}
private File getFile(File startingDirectory) {
FileDialog dialog = new FileDialog(getShell(), 268439552);
if (startingDirectory != null) {
dialog.setFileName(startingDirectory.getPath());
} else if (this.filterPath != null) {
dialog.setFilterPath(this.filterPath.getPath());
}
if (this.extensions != null) {
dialog.setFilterExtensions(this.extensions);
}
String file = dialog.open();
if (file != null) {
file = file.trim();
if (file.length() > 0) {
return new File(file);
}
}
return null;
}
public void setFileExtensions(String[] extensions) {
this.extensions = extensions;
}
public void setFilterPath(File path) {
this.filterPath = path;
}
}