1 package org.argeo.cms.ui.eclipse.forms;
2
3 import java.util.Vector;
4 import org.eclipse.jface.viewers.ISelection;
5 import org.eclipse.swt.custom.ScrolledComposite;
6 import org.eclipse.swt.widgets.Composite;
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 public class ManagedForm implements IManagedForm {
29 private Object input;
30
31 private ScrolledComposite form;
32
33 private FormToolkit toolkit;
34
35 private Object container;
36
37 private boolean ownsToolkit;
38
39 private boolean initialized;
40
41 private Vector parts = new Vector();
42
43
44
45
46
47
48
49
50 public ManagedForm(Composite parent) {
51 toolkit = new FormToolkit(parent.getDisplay());
52 ownsToolkit = true;
53 form = toolkit.createScrolledForm(parent);
54
55 }
56
57
58
59
60
61
62
63 public ManagedForm(FormToolkit toolkit, ScrolledComposite form) {
64 this.form = form;
65 this.toolkit = toolkit;
66 }
67
68
69
70
71
72
73 public void addPart(IFormPart part) {
74 parts.add(part);
75 part.initialize(this);
76 }
77
78
79
80
81
82
83 public void removePart(IFormPart part) {
84 parts.remove(part);
85 }
86
87
88
89
90
91
92 public IFormPart[] getParts() {
93 return (IFormPart[]) parts.toArray(new IFormPart[parts.size()]);
94 }
95
96
97
98
99
100
101 public FormToolkit getToolkit() {
102 return toolkit;
103 }
104
105
106
107
108
109
110 public ScrolledComposite getForm() {
111 return form;
112 }
113
114
115
116
117
118
119 public void reflow(boolean changed) {
120
121 }
122
123
124
125
126
127
128
129
130
131
132
133 public void fireSelectionChanged(IFormPart part, ISelection selection) {
134 for (int i = 0; i < parts.size(); i++) {
135 IFormPart cpart = (IFormPart) parts.get(i);
136 if (part.equals(cpart))
137 continue;
138
139
140
141
142 }
143 }
144
145
146
147
148
149 public void initialize() {
150 if (initialized)
151 return;
152 for (int i = 0; i < parts.size(); i++) {
153 IFormPart part = (IFormPart) parts.get(i);
154 part.initialize(this);
155 }
156 initialized = true;
157 }
158
159
160
161
162 public void dispose() {
163 for (int i = 0; i < parts.size(); i++) {
164 IFormPart part = (IFormPart) parts.get(i);
165 part.dispose();
166 }
167 if (ownsToolkit) {
168 toolkit.dispose();
169 }
170 }
171
172
173
174
175
176
177
178 public void refresh() {
179 Thread t = Thread.currentThread();
180 Thread dt = toolkit.getColors().getDisplay().getThread();
181 if (t.equals(dt))
182 doRefresh();
183 else {
184 toolkit.getColors().getDisplay().asyncExec(new Runnable() {
185 public void run() {
186 doRefresh();
187 }
188 });
189 }
190 }
191
192 private void doRefresh() {
193 int nrefreshed = 0;
194 for (int i = 0; i < parts.size(); i++) {
195 IFormPart part = (IFormPart) parts.get(i);
196 if (part.isStale()) {
197 part.refresh();
198 nrefreshed++;
199 }
200 }
201
202
203 }
204
205
206
207
208
209
210 public void commit(boolean onSave) {
211 for (int i = 0; i < parts.size(); i++) {
212 IFormPart part = (IFormPart) parts.get(i);
213 if (part.isDirty())
214 part.commit(onSave);
215 }
216 }
217
218
219
220
221
222
223 public boolean setInput(Object input) {
224 boolean pageResult = false;
225
226 this.input = input;
227 for (int i = 0; i < parts.size(); i++) {
228 IFormPart part = (IFormPart) parts.get(i);
229 boolean result = part.setFormInput(input);
230 if (result)
231 pageResult = true;
232 }
233 return pageResult;
234 }
235
236
237
238
239
240
241 public Object getInput() {
242 return input;
243 }
244
245
246
247
248 public void setFocus() {
249 if (parts.size() > 0) {
250 IFormPart part = (IFormPart) parts.get(0);
251 part.setFocus();
252 }
253 }
254
255
256
257
258
259
260 public boolean isDirty() {
261 for (int i = 0; i < parts.size(); i++) {
262 IFormPart part = (IFormPart) parts.get(i);
263 if (part.isDirty())
264 return true;
265 }
266 return false;
267 }
268
269
270
271
272
273
274 public boolean isStale() {
275 for (int i = 0; i < parts.size(); i++) {
276 IFormPart part = (IFormPart) parts.get(i);
277 if (part.isStale())
278 return true;
279 }
280 return false;
281 }
282
283
284
285
286
287
288 public void dirtyStateChanged() {
289 }
290
291
292
293
294
295
296 public void staleStateChanged() {
297 }
298
299
300
301
302
303
304 public Object getContainer() {
305 return container;
306 }
307
308
309
310
311
312
313 public void setContainer(Object container) {
314 this.container = container;
315 }
316
317
318
319
320
321
322
323 }