package edu.ualberta.med.biobank.gui.common.widgets;
import org.eclipse.core.runtime.ListenerList;
import org.eclipse.jface.util.SafeRunnable;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.PlatformUI;
public class BgcFileBrowser extends BgcBaseWidget {
private BgcBaseText textfield;
private Button browse;
private FileDialog fileDialog;
private String[] filterExtensions;
protected ListenerList fileSelectionListeners = new ListenerList();
public BgcFileBrowser(Composite parent, String label, int style,
String[] extensions) {
super(parent, style);
this.filterExtensions = extensions;
setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, false));
setLayout(new GridLayout(3, false));
Label l = new Label(this, SWT.NONE);
l.setText(label + ":"); //$NON-NLS-1$
textfield = new BgcBaseText(this, SWT.NONE);
textfield.setEditable(false);
textfield.setLayoutData(new GridData(GridData.FILL, GridData.FILL,
true, false));
browse = new Button(this, style);
browse.setText(Messages.BgcFileBrowser_browse);
browse.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
fileDialog = new FileDialog(PlatformUI.getWorkbench()
.getActiveWorkbenchWindow().getShell(), SWT.OPEN);
fileDialog.setText(Messages.BgcFileBrowser_open);
fileDialog.setFilterExtensions(filterExtensions);
final String path = fileDialog.open();
if (path != null) {
textfield.setText(path);
Object[] listeners = fileSelectionListeners.getListeners();
for (int i = 0; i < listeners.length; ++i) {
final IBgcFileBrowserListener l = (IBgcFileBrowserListener) listeners[i];
SafeRunnable.run(new SafeRunnable() {
@Override
public void run() {
l.fileSelected(path);
}
});
}
}
}
});
}
public String getFilePath() {
return textfield.getText();
}
public void reset() {
textfield.setText(""); //$NON-NLS-1$
}
public FileDialog getFileDialog() {
return fileDialog;
}
public void addFileSelectedListener(IBgcFileBrowserListener listener) {
fileSelectionListeners.add(listener);
}
}