/**
*
*/
package fr.inria.soctrace.framesoc.ui.input;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyListener;
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.swt.widgets.Text;
import fr.inria.soctrace.lib.utils.Portability;
/**
* Composite providing a text field for reading file paths, with a browse button beside.
*
* @author "Generoso Pagano <generoso.pagano@inria.fr>"
*/
public class FileInputComposite extends Composite {
private final static String FILES = "Trace files";
private final static String BROWSE = "Browse";
private final static int FILE_DIALOG_STYLE = SWT.MULTI;
private Text traceFileText;
private int fileDialogStyle = FILE_DIALOG_STYLE;
private String fileLabel = FILES;
private String browseLabel = BROWSE;
public FileInputComposite(final Composite parent, int style) {
super(parent, style);
setLayout(new GridLayout(3, false));
Label lblTraceFiles = new Label(this, SWT.NONE);
lblTraceFiles.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
lblTraceFiles.setText(fileLabel);
traceFileText = new Text(this, SWT.BORDER);
traceFileText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
Button btnBrowse = new Button(this, SWT.NONE);
btnBrowse.setText(browseLabel);
btnBrowse.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
traceFileText.setText("");
FileDialog dlg = new FileDialog(parent.getShell(), fileDialogStyle);
String fn = dlg.open();
if (fn != null) {
String[] names = dlg.getFileNames();
String filter = dlg.getFilterPath();
for (int i = 0; i < names.length; ++i) {
String name = Portability.normalize(filter + "/" + names[i]);
traceFileText.append("\"" + name + "\" ");
}
}
}
});
}
public int getFileDialogStyle() {
return fileDialogStyle;
}
public void setFileDialogStyle(int fileDialogStyle) {
this.fileDialogStyle = fileDialogStyle;
}
public String getFileLabel() {
return fileLabel;
}
public void setFileLabel(String fileLabel) {
this.fileLabel = fileLabel;
}
public String getBrowseLabel() {
return browseLabel;
}
public void setBrowseLabel(String browseLabel) {
this.browseLabel = browseLabel;
}
public void addModifyListener(ModifyListener listener) {
traceFileText.addModifyListener(listener);
}
}