1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.vectomatic.file;
19
20 import org.vectomatic.file.impl.FileListImpl;
21
22 import com.google.gwt.dom.client.Document;
23 import com.google.gwt.dom.client.Element;
24 import com.google.gwt.dom.client.FormElement;
25 import com.google.gwt.dom.client.InputElement;
26 import com.google.gwt.event.dom.client.ChangeEvent;
27 import com.google.gwt.event.dom.client.ChangeHandler;
28 import com.google.gwt.event.dom.client.HasChangeHandlers;
29 import com.google.gwt.event.shared.HandlerRegistration;
30 import com.google.gwt.user.client.Event;
31 import com.google.gwt.user.client.ui.HasEnabled;
32 import com.google.gwt.user.client.ui.HasName;
33 import com.google.gwt.user.client.ui.RootPanel;
34 import com.google.gwt.user.client.ui.Widget;
35
36
37
38
39
40 public class FileUploadExt extends Widget implements HasName, HasChangeHandlers, HasEnabled {
41
42
43
44
45 public FileUploadExt() {
46 this(true);
47 }
48
49
50
51
52 public FileUploadExt(boolean multiple) {
53 this(Document.get().createFileInputElement(), multiple);
54 }
55
56 protected FileUploadExt(Element element, boolean multiple) {
57 setElement(element);
58 setStyleName("gwt-FileUpload");
59 setMultiple(multiple);
60 }
61
62
63
64
65
66 public boolean isMultiple() {
67 return isMultiple(getElement());
68 }
69 private static final native boolean isMultiple(Element element)
70
71 ;
72
73
74
75
76
77 public void setMultiple(boolean value) {
78 setMultiple(getElement(), value);
79 }
80 private static final native void setMultiple(Element element, boolean value)
81
82 ;
83
84
85
86
87 public FileList getFiles() {
88 return new FileList(getFiles(getElement()));
89 }
90 private static final native FileListImpl getFiles(Element element)
91
92 ;
93
94
95
96 public void click() {
97 click(getElement());
98 }
99 private static final native void click(Element element)
100
101 ;
102
103 @Override
104 public void onBrowserEvent(Event event) {
105
106
107 super.onBrowserEvent(event);
108 Element parent = getElement().getParentElement();
109 Element nextSibling = getElement().getNextSiblingElement();
110 FormElement form = Document.get().createFormElement();
111 form.appendChild(getElement());
112 form.reset();
113 parent.insertBefore(getElement(), nextSibling);
114 }
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133 public static FileUploadExt wrap(Element element, boolean multiple) {
134
135 assert Document.get().getBody().isOrHasChild(element);
136
137 FileUploadExt fileUpload = new FileUploadExt(element, multiple);
138
139
140 fileUpload.onAttach();
141 RootPanel.detachOnWindowClose(fileUpload);
142
143 return fileUpload;
144 }
145
146 public HandlerRegistration addChangeHandler(ChangeHandler handler) {
147 return addDomHandler(handler, ChangeEvent.getType());
148 }
149
150
151
152
153
154
155
156 public String getFilename() {
157 return getInputElement().getValue();
158 }
159
160 public String getName() {
161 return getInputElement().getName();
162 }
163
164
165
166
167
168
169 public boolean isEnabled() {
170 return !getElement().getPropertyBoolean("disabled");
171 }
172
173
174
175
176
177
178
179 public void setEnabled(boolean enabled) {
180 getElement().setPropertyBoolean("disabled", !enabled);
181 }
182
183 public void setName(String name) {
184 getInputElement().setName(name);
185 }
186
187 private InputElement getInputElement() {
188 return getElement().cast();
189 }
190 }