-package org.simantics.utils.ui.widgets;\r
-\r
-import java.io.File;\r
-import java.util.ArrayList;\r
-import java.util.List;\r
-\r
-import org.eclipse.jface.layout.GridDataFactory;\r
-import org.eclipse.swt.SWT;\r
-import org.eclipse.swt.events.ModifyEvent;\r
-import org.eclipse.swt.events.ModifyListener;\r
-import org.eclipse.swt.events.SelectionAdapter;\r
-import org.eclipse.swt.events.SelectionEvent;\r
-import org.eclipse.swt.layout.GridData;\r
-import org.eclipse.swt.layout.GridLayout;\r
-import org.eclipse.swt.widgets.Button;\r
-import org.eclipse.swt.widgets.Composite;\r
-import org.eclipse.swt.widgets.Group;\r
-import org.eclipse.swt.widgets.Text;\r
-\r
-public abstract class FileOrDirectorySelectionWidget extends Composite{\r
- \r
- Text fileText;\r
- String filename[];\r
- \r
- private List<FileSelectionListener> listeners = new ArrayList<FileSelectionListener>();\r
- \r
- public FileOrDirectorySelectionWidget(Composite parent, String name,int style) {\r
- super(parent, style);\r
- this.setLayout(new GridLayout(1,false));\r
- GridDataFactory.fillDefaults().grab(true, false).align(SWT.FILL, SWT.TOP).applyTo(this);\r
- \r
- Group fileGroup = new Group(this, SWT.NONE);\r
- GridDataFactory.fillDefaults().grab(true, false).align(SWT.FILL, SWT.TOP).applyTo(fileGroup);\r
- \r
- fileGroup.setText(name);\r
- fileGroup.setLayout(new GridLayout(2, false));\r
- \r
- fileText = new Text(fileGroup, SWT.SINGLE|SWT.BORDER);\r
- GridData data = new GridData();\r
- data.grabExcessHorizontalSpace = true;\r
- data.horizontalAlignment = SWT.FILL;\r
- fileText.setLayoutData(data);\r
- \r
- Button browseButton = new Button(fileGroup, SWT.PUSH);\r
- browseButton.setText("Browse");\r
- data = new GridData();\r
- browseButton.setLayoutData(data);\r
- \r
- \r
- \r
- browseButton.addSelectionListener(new SelectionAdapter() {\r
- @Override\r
- public void widgetSelected(SelectionEvent e) {\r
- String[] name = openDialog();\r
- if (name != null) {\r
- setFilename(name);\r
- }\r
- }\r
- });\r
- \r
- fileText.addModifyListener(new ModifyListener() {\r
- \r
- @Override\r
- public void modifyText(ModifyEvent e) {\r
- String file = fileText.getText();\r
- setFilename(file.split(","));\r
- \r
- }\r
- });\r
- }\r
- \r
- protected abstract String[] openDialog();\r
- \r
- protected abstract boolean isValid(File file);\r
- \r
- protected void setFilename(String[] filename) {\r
- String text = "";\r
- for (String s : filename) {\r
- text += s + ",";\r
- }\r
- if (text.length() > 2)\r
- text = text.substring(0, text.length() - 1);\r
- \r
- if (!text.equals(fileText.getText()))\r
- fileText.setText(text);\r
- \r
- boolean accept = true;\r
- for (String s : filename){\r
- File file = new File(s);\r
- if (!isValid(file)) {\r
- accept = false;\r
- break;\r
- }\r
- }\r
- if (accept)\r
- this.filename = filename;\r
- else\r
- this.filename = null;\r
- \r
- for (FileSelectionListener l : listeners) {\r
- l.fileSelected(this, this.filename);\r
- }\r
- }\r
- \r
- public String[] getFilename() {\r
- return filename;\r
- }\r
- \r
- public void addListener(FileSelectionListener listener) {\r
- this.listeners.add(listener);\r
- }\r
- \r
- public void removeListener(FileSelectionListener listener) {\r
- this.listeners.remove(listener);\r
- }\r
- \r
-\r
-}\r
+package org.simantics.utils.ui.widgets;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.jface.layout.GridDataFactory;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+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.Group;
+import org.eclipse.swt.widgets.Text;
+
+public abstract class FileOrDirectorySelectionWidget extends Composite{
+
+ Text fileText;
+ String filename[];
+
+ private List<FileSelectionListener> listeners = new ArrayList<FileSelectionListener>();
+
+ public FileOrDirectorySelectionWidget(Composite parent, String name,int style) {
+ super(parent, style);
+ this.setLayout(new GridLayout(1,false));
+ GridDataFactory.fillDefaults().grab(true, false).align(SWT.FILL, SWT.TOP).applyTo(this);
+
+ Group fileGroup = new Group(this, SWT.NONE);
+ GridDataFactory.fillDefaults().grab(true, false).align(SWT.FILL, SWT.TOP).applyTo(fileGroup);
+
+ fileGroup.setText(name);
+ fileGroup.setLayout(new GridLayout(2, false));
+
+ fileText = new Text(fileGroup, SWT.SINGLE|SWT.BORDER);
+ GridData data = new GridData();
+ data.grabExcessHorizontalSpace = true;
+ data.horizontalAlignment = SWT.FILL;
+ fileText.setLayoutData(data);
+
+ Button browseButton = new Button(fileGroup, SWT.PUSH);
+ browseButton.setText("Browse");
+ data = new GridData();
+ browseButton.setLayoutData(data);
+
+
+
+ browseButton.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ String[] name = openDialog();
+ if (name != null) {
+ setFilename(name);
+ }
+ }
+ });
+
+ fileText.addModifyListener(new ModifyListener() {
+
+ @Override
+ public void modifyText(ModifyEvent e) {
+ String file = fileText.getText();
+ setFilename(file.split(","));
+
+ }
+ });
+ }
+
+ protected abstract String[] openDialog();
+
+ protected abstract boolean isValid(File file);
+
+ protected void setFilename(String[] filename) {
+ String text = "";
+ for (String s : filename) {
+ text += s + ",";
+ }
+ if (text.length() > 2)
+ text = text.substring(0, text.length() - 1);
+
+ if (!text.equals(fileText.getText()))
+ fileText.setText(text);
+
+ boolean accept = true;
+ for (String s : filename){
+ File file = new File(s);
+ if (!isValid(file)) {
+ accept = false;
+ break;
+ }
+ }
+ if (accept)
+ this.filename = filename;
+ else
+ this.filename = null;
+
+ for (FileSelectionListener l : listeners) {
+ l.fileSelected(this, this.filename);
+ }
+ }
+
+ public String[] getFilename() {
+ return filename;
+ }
+
+ public void addListener(FileSelectionListener listener) {
+ this.listeners.add(listener);
+ }
+
+ public void removeListener(FileSelectionListener listener) {
+ this.listeners.remove(listener);
+ }
+
+
+}