]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.utils.ui/src/org/simantics/utils/ui/widgets/FileOrDirectorySelectionWidget.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.utils.ui / src / org / simantics / utils / ui / widgets / FileOrDirectorySelectionWidget.java
diff --git a/bundles/org.simantics.utils.ui/src/org/simantics/utils/ui/widgets/FileOrDirectorySelectionWidget.java b/bundles/org.simantics.utils.ui/src/org/simantics/utils/ui/widgets/FileOrDirectorySelectionWidget.java
new file mode 100644 (file)
index 0000000..f9e986c
--- /dev/null
@@ -0,0 +1,118 @@
+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