1 package org.simantics.utils.ui.widgets;
\r
4 import java.util.ArrayList;
\r
5 import java.util.List;
\r
7 import org.eclipse.jface.layout.GridDataFactory;
\r
8 import org.eclipse.swt.SWT;
\r
9 import org.eclipse.swt.events.ModifyEvent;
\r
10 import org.eclipse.swt.events.ModifyListener;
\r
11 import org.eclipse.swt.events.SelectionAdapter;
\r
12 import org.eclipse.swt.events.SelectionEvent;
\r
13 import org.eclipse.swt.layout.GridData;
\r
14 import org.eclipse.swt.layout.GridLayout;
\r
15 import org.eclipse.swt.widgets.Button;
\r
16 import org.eclipse.swt.widgets.Composite;
\r
17 import org.eclipse.swt.widgets.Group;
\r
18 import org.eclipse.swt.widgets.Text;
\r
20 public abstract class FileOrDirectorySelectionWidget extends Composite{
\r
25 private List<FileSelectionListener> listeners = new ArrayList<FileSelectionListener>();
\r
27 public FileOrDirectorySelectionWidget(Composite parent, String name,int style) {
\r
28 super(parent, style);
\r
29 this.setLayout(new GridLayout(1,false));
\r
30 GridDataFactory.fillDefaults().grab(true, false).align(SWT.FILL, SWT.TOP).applyTo(this);
\r
32 Group fileGroup = new Group(this, SWT.NONE);
\r
33 GridDataFactory.fillDefaults().grab(true, false).align(SWT.FILL, SWT.TOP).applyTo(fileGroup);
\r
35 fileGroup.setText(name);
\r
36 fileGroup.setLayout(new GridLayout(2, false));
\r
38 fileText = new Text(fileGroup, SWT.SINGLE|SWT.BORDER);
\r
39 GridData data = new GridData();
\r
40 data.grabExcessHorizontalSpace = true;
\r
41 data.horizontalAlignment = SWT.FILL;
\r
42 fileText.setLayoutData(data);
\r
44 Button browseButton = new Button(fileGroup, SWT.PUSH);
\r
45 browseButton.setText("Browse");
\r
46 data = new GridData();
\r
47 browseButton.setLayoutData(data);
\r
51 browseButton.addSelectionListener(new SelectionAdapter() {
\r
53 public void widgetSelected(SelectionEvent e) {
\r
54 String[] name = openDialog();
\r
61 fileText.addModifyListener(new ModifyListener() {
\r
64 public void modifyText(ModifyEvent e) {
\r
65 String file = fileText.getText();
\r
66 setFilename(file.split(","));
\r
72 protected abstract String[] openDialog();
\r
74 protected abstract boolean isValid(File file);
\r
76 protected void setFilename(String[] filename) {
\r
78 for (String s : filename) {
\r
81 if (text.length() > 2)
\r
82 text = text.substring(0, text.length() - 1);
\r
84 if (!text.equals(fileText.getText()))
\r
85 fileText.setText(text);
\r
87 boolean accept = true;
\r
88 for (String s : filename){
\r
89 File file = new File(s);
\r
90 if (!isValid(file)) {
\r
96 this.filename = filename;
\r
98 this.filename = null;
\r
100 for (FileSelectionListener l : listeners) {
\r
101 l.fileSelected(this, this.filename);
\r
105 public String[] getFilename() {
\r
109 public void addListener(FileSelectionListener listener) {
\r
110 this.listeners.add(listener);
\r
113 public void removeListener(FileSelectionListener listener) {
\r
114 this.listeners.remove(listener);
\r