]> gerrit.simantics Code Review - simantics/platform.git/blob - 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
1 package org.simantics.utils.ui.widgets;\r
2 \r
3 import java.io.File;\r
4 import java.util.ArrayList;\r
5 import java.util.List;\r
6 \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
19 \r
20 public abstract class FileOrDirectorySelectionWidget extends Composite{\r
21         \r
22         Text fileText;\r
23         String filename[];\r
24         \r
25         private List<FileSelectionListener> listeners = new ArrayList<FileSelectionListener>();\r
26         \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
31                 \r
32                 Group fileGroup = new Group(this, SWT.NONE);\r
33                 GridDataFactory.fillDefaults().grab(true, false).align(SWT.FILL, SWT.TOP).applyTo(fileGroup);\r
34                 \r
35                 fileGroup.setText(name);\r
36                 fileGroup.setLayout(new GridLayout(2, false));\r
37                 \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
43                 \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
48                 \r
49                 \r
50                                 \r
51                 browseButton.addSelectionListener(new SelectionAdapter() {\r
52                         @Override\r
53                         public void widgetSelected(SelectionEvent e) {\r
54                                 String[] name = openDialog();\r
55                                 if (name != null) {\r
56                                         setFilename(name);\r
57                                 }\r
58                         }\r
59                 });\r
60                 \r
61                 fileText.addModifyListener(new ModifyListener() {\r
62                         \r
63                         @Override\r
64                         public void modifyText(ModifyEvent e) {\r
65                                 String file = fileText.getText();\r
66                                 setFilename(file.split(","));\r
67                                 \r
68                         }\r
69                 });\r
70         }\r
71         \r
72         protected abstract String[] openDialog();\r
73         \r
74         protected abstract boolean isValid(File file);\r
75         \r
76         protected void setFilename(String[] filename) {\r
77                 String text = "";\r
78                 for (String s : filename) {\r
79                         text += s + ",";\r
80                 }\r
81                 if (text.length() > 2)\r
82                         text = text.substring(0, text.length() - 1);\r
83                 \r
84                 if (!text.equals(fileText.getText()))\r
85                         fileText.setText(text);\r
86                 \r
87                 boolean accept = true;\r
88                 for (String s : filename){\r
89                         File file = new File(s);\r
90                         if (!isValid(file)) {\r
91                                 accept = false;\r
92                                 break;\r
93                         }\r
94                 }\r
95                 if (accept)\r
96                         this.filename = filename;\r
97                 else\r
98                         this.filename = null;\r
99                 \r
100                 for (FileSelectionListener l : listeners) {\r
101                         l.fileSelected(this, this.filename);\r
102                 }\r
103         }\r
104         \r
105         public String[] getFilename() {\r
106                 return filename;\r
107         }\r
108         \r
109         public void addListener(FileSelectionListener listener) {\r
110                 this.listeners.add(listener);\r
111         }\r
112         \r
113         public void removeListener(FileSelectionListener listener) {\r
114                 this.listeners.remove(listener);\r
115         }\r
116         \r
117 \r
118 }\r