]>
git.argeo.org Git - gpl/argeo-jcr.git/blob - swt/org.argeo.tool.devops.e4/src/org/argeo/cms/ui/eclipse/forms/ManagedForm.java
1 package org
.argeo
.cms
.ui
.eclipse
.forms
;
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 //import org.eclipse.ui.forms.widgets.FormToolkit;
8 //import org.eclipse.ui.forms.widgets.ScrolledForm;
11 * Managed form wraps a form widget and adds life cycle methods for form parts.
12 * A form part is a portion of the form that participates in form life cycle
15 * There is requirement for 1/1 mapping between widgets and form parts. A widget
16 * like Section can be a part by itself, but a number of widgets can join around
19 * Note to developers: this class is left public to allow its use beyond the
20 * original intention (inside a multi-page editor's page). You should limit the
21 * use of this class to make new instances inside a form container (wizard page,
22 * dialog etc.). Clients that need access to the class should not do it
23 * directly. Instead, they should do it through IManagedForm interface as much
28 public class ManagedForm
implements IManagedForm
{
31 private ScrolledComposite form
;
33 private FormToolkit toolkit
;
35 private Object container
;
37 private boolean ownsToolkit
;
39 private boolean initialized
;
41 private Vector parts
= new Vector();
44 * Creates a managed form in the provided parent. Form toolkit and widget
45 * will be created and owned by this object.
50 public ManagedForm(Composite parent
) {
51 toolkit
= new FormToolkit(parent
.getDisplay());
53 form
= toolkit
.createScrolledForm(parent
);
58 * Creates a managed form that will use the provided toolkit and
63 public ManagedForm(FormToolkit toolkit
, ScrolledComposite form
) {
65 this.toolkit
= toolkit
;
71 * @see org.eclipse.ui.forms.IManagedForm#addPart(org.eclipse.ui.forms.IFormPart)
73 public void addPart(IFormPart part
) {
75 part
.initialize(this);
81 * @see org.eclipse.ui.forms.IManagedForm#removePart(org.eclipse.ui.forms.IFormPart)
83 public void removePart(IFormPart part
) {
90 * @see org.eclipse.ui.forms.IManagedForm#getParts()
92 public IFormPart
[] getParts() {
93 return (IFormPart
[]) parts
.toArray(new IFormPart
[parts
.size()]);
99 * @see org.eclipse.ui.forms.IManagedForm#getToolkit()
101 public FormToolkit
getToolkit() {
108 * @see org.eclipse.ui.forms.IManagedForm#getForm()
110 public ScrolledComposite
getForm() {
117 * @see org.eclipse.ui.forms.IManagedForm#reflow(boolean)
119 public void reflow(boolean changed
) {
120 // form.reflow(changed);
124 * A part can use this method to notify other parts that implement
125 * IPartSelectionListener about selection changes.
128 * the part that broadcasts the selection
130 * the selection in the part
131 * @see IPartSelectionListener
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
))
138 // if (cpart instanceof IPartSelectionListener) {
139 // ((IPartSelectionListener) cpart).selectionChanged(part,
146 * Initializes the form by looping through the managed parts and
147 * initializing them. Has no effect if already called once.
149 public void initialize() {
152 for (int i
= 0; i
< parts
.size(); i
++) {
153 IFormPart part
= (IFormPart
) parts
.get(i
);
154 part
.initialize(this);
160 * Disposes all the parts in this form.
162 public void dispose() {
163 for (int i
= 0; i
< parts
.size(); i
++) {
164 IFormPart part
= (IFormPart
) parts
.get(i
);
173 * Refreshes the form by refreshes all the stale parts. Since 3.1, this
174 * method is performed on a UI thread when called from another thread so it
175 * is not needed to wrap the call in <code>Display.syncExec</code> or
176 * <code>asyncExec</code>.
178 public void refresh() {
179 Thread t
= Thread
.currentThread();
180 Thread dt
= toolkit
.getColors().getDisplay().getThread();
184 toolkit
.getColors().getDisplay().asyncExec(new Runnable() {
192 private void doRefresh() {
194 for (int i
= 0; i
< parts
.size(); i
++) {
195 IFormPart part
= (IFormPart
) parts
.get(i
);
196 if (part
.isStale()) {
201 // if (nrefreshed > 0)
202 // form.reflow(true);
208 * @see org.eclipse.ui.forms.IManagedForm#commit(boolean)
210 public void commit(boolean onSave
) {
211 for (int i
= 0; i
< parts
.size(); i
++) {
212 IFormPart part
= (IFormPart
) parts
.get(i
);
221 * @see org.eclipse.ui.forms.IManagedForm#setInput(java.lang.Object)
223 public boolean setInput(Object input
) {
224 boolean pageResult
= false;
227 for (int i
= 0; i
< parts
.size(); i
++) {
228 IFormPart part
= (IFormPart
) parts
.get(i
);
229 boolean result
= part
.setFormInput(input
);
239 * @see org.eclipse.ui.forms.IManagedForm#getInput()
241 public Object
getInput() {
246 * Transfers the focus to the first form part.
248 public void setFocus() {
249 if (parts
.size() > 0) {
250 IFormPart part
= (IFormPart
) parts
.get(0);
258 * @see org.eclipse.ui.forms.IManagedForm#isDirty()
260 public boolean isDirty() {
261 for (int i
= 0; i
< parts
.size(); i
++) {
262 IFormPart part
= (IFormPart
) parts
.get(i
);
272 * @see org.eclipse.ui.forms.IManagedForm#isStale()
274 public boolean isStale() {
275 for (int i
= 0; i
< parts
.size(); i
++) {
276 IFormPart part
= (IFormPart
) parts
.get(i
);
286 * @see org.eclipse.ui.forms.IManagedForm#dirtyStateChanged()
288 public void dirtyStateChanged() {
294 * @see org.eclipse.ui.forms.IManagedForm#staleStateChanged()
296 public void staleStateChanged() {
302 * @see org.eclipse.ui.forms.IManagedForm#getContainer()
304 public Object
getContainer() {
311 * @see org.eclipse.ui.forms.IManagedForm#setContainer(java.lang.Object)
313 public void setContainer(Object container
) {
314 this.container
= container
;
318 * @see org.eclipse.ui.forms.IManagedForm#getMessageManager()
320 // public IMessageManager getMessageManager() {
321 // return form.getMessageManager();