View Javadoc
1   package org.argeo.cms.ui.eclipse.forms.editor;
2   import org.argeo.cms.ui.eclipse.forms.IManagedForm;
3   import org.eclipse.swt.widgets.Control;
4   /**
5    * Interface that all GUI pages need to implement in order
6    * to be added to FormEditor part. The interface makes 
7    * several assumptions:
8    * <ul>
9    * <li>The form page has a managed form</li>
10   * <li>The form page has a unique id</li>
11   * <li>The form page can be GUI but can also wrap a complete
12   * editor class (in that case, it should return <code>true</code>
13   * from <code>isEditor()</code> method).</li>
14   * <li>The form page is lazy i.e. understands that 
15   * its part control will be created at the last possible
16   * moment.</li>.
17   * </ul>
18   * <p>Existing editors can be wrapped by implementing
19   * this interface. In this case, 'isEditor' should return <code>true</code>.
20   * A common editor to wrap in <code>TextEditor</code> that is
21   * often added to show the raw source code of the file open into
22   * the multi-page editor.
23   * 
24   * @since 1.0
25   */
26  public interface IFormPage {
27  	/**
28  	 * @param editor
29  	 *            the form editor that this page belongs to
30  	 */
31  	void initialize(FormEditor editor);
32  	/**
33  	 * Returns the editor this page belongs to.
34  	 * 
35  	 * @return the form editor
36  	 */
37  	FormEditor getEditor();
38  	/**
39  	 * Returns the managed form of this page, unless this is a source page.
40  	 * 
41  	 * @return the managed form or <samp>null </samp> if this is a source page.
42  	 */
43  	IManagedForm getManagedForm();
44  	/**
45  	 * Indicates whether the page has become the active in the editor. Classes
46  	 * that implement this interface may use this method to commit the page (on
47  	 * <code>false</code>) or lazily create and/or populate the content on
48  	 * <code>true</code>.
49  	 * 
50  	 * @param active
51  	 *            <code>true</code> if page should be visible, <code>false</code>
52  	 *            otherwise.
53  	 */
54  	void setActive(boolean active);
55  	/**
56  	 * Returns <samp>true </samp> if page is currently active, false if not.
57  	 * 
58  	 * @return <samp>true </samp> for active page.
59  	 */
60  	boolean isActive();
61  	/**
62  	 * Tests if the content of the page is in a state that allows the
63  	 * editor to flip to another page. Typically, pages that contain
64  	 * raw source with syntax errors should not allow editors to 
65  	 * leave them until errors are corrected.
66  	 * @return <code>true</code> if the editor can flip to another page,
67  	 * <code>false</code> otherwise.
68  	 */
69  	boolean canLeaveThePage();
70  	/**
71  	 * Returns the control associated with this page.
72  	 * 
73  	 * @return the control of this page if created or <samp>null </samp> if the
74  	 *         page has not been shown yet.
75  	 */
76  	Control getPartControl();
77  	/**
78  	 * Page must have a unique id that can be used to show it without knowing
79  	 * its relative position in the editor.
80  	 * 
81  	 * @return the unique page identifier
82  	 */
83  	String getId();
84  	/**
85  	 * Returns the position of the page in the editor.
86  	 * 
87  	 * @return the zero-based index of the page in the editor.
88  	 */
89  	int getIndex();
90  	/**
91  	 * Sets the position of the page in the editor.
92  	 * 
93  	 * @param index
94  	 *            the zero-based index of the page in the editor.
95  	 */
96  	void setIndex(int index);
97  	/**
98  	 * Tests whether this page wraps a complete editor that
99  	 * can be registered on its own, or represents a page
100 	 * that cannot exist outside the multi-page editor context.
101 	 * 
102 	 * @return <samp>true </samp> if the page wraps an editor,
103 	 *         <samp>false </samp> if this is a form page.
104 	 */
105 	boolean isEditor();
106 	/**
107 	 * A hint to bring the provided object into focus. If the object is in a
108 	 * tree or table control, select it. If it is shown on a scrollable page,
109 	 * ensure that it is visible. If the object is not presented in 
110 	 * the page, <code>false</code> should be returned to allow another
111 	 * page to try.
112 	 * 
113 	 * @param object
114 	 *            object to select and reveal
115 	 * @return <code>true</code> if the request was successful, <code>false</code>
116 	 *         otherwise.
117 	 */
118 	boolean selectReveal(Object object);
119 }