]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.cms.ui/src/org/argeo/cms/util/SimpleErgonomics.java
Improve DocBook
[lgpl/argeo-commons.git] / org.argeo.cms.ui / src / org / argeo / cms / util / SimpleErgonomics.java
1 package org.argeo.cms.util;
2
3 import java.util.Map;
4
5 import javax.jcr.Node;
6 import javax.jcr.Repository;
7 import javax.jcr.RepositoryException;
8
9 import org.apache.commons.logging.Log;
10 import org.apache.commons.logging.LogFactory;
11 import org.argeo.cms.CmsException;
12 import org.argeo.cms.ui.AbstractCmsEntryPoint;
13 import org.argeo.cms.ui.CmsImageManager;
14 import org.argeo.cms.ui.CmsStyles;
15 import org.argeo.cms.ui.CmsUiProvider;
16 import org.argeo.cms.ui.UxContext;
17 import org.argeo.cms.ui.internal.ImageManagerImpl;
18 import org.eclipse.rap.rwt.RWT;
19 import org.eclipse.swt.SWT;
20 import org.eclipse.swt.layout.FillLayout;
21 import org.eclipse.swt.layout.GridData;
22 import org.eclipse.swt.layout.GridLayout;
23 import org.eclipse.swt.widgets.Composite;
24 import org.eclipse.swt.widgets.Control;
25
26 /** Simple header/body ergonomics. */
27 public class SimpleErgonomics extends AbstractCmsEntryPoint {
28 private static final long serialVersionUID = 8743413921359548523L;
29
30 private final static Log log = LogFactory.getLog(SimpleErgonomics.class);
31
32 private boolean uiInitialized = false;
33 private Composite headerArea;
34 private Composite leftArea;
35 private Composite rightArea;
36 private Composite footerArea;
37 private Composite bodyArea;
38 private final CmsUiProvider uiProvider;
39
40 private CmsUiProvider header;
41 private Integer headerHeight = 0;
42 private Integer footerHeight = 0;
43 private CmsUiProvider lead;
44 private CmsUiProvider end;
45 private CmsUiProvider footer;
46
47 private CmsImageManager imageManager = new ImageManagerImpl();
48 private UxContext uxContext = null;
49
50 public SimpleErgonomics(Repository repository, String workspace, String defaultPath, CmsUiProvider uiProvider,
51 Map<String, String> factoryProperties) {
52 super(repository, workspace, defaultPath, factoryProperties);
53 this.uiProvider = uiProvider;
54 }
55
56 @Override
57 protected void initUi(Composite parent) {
58 parent.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
59 parent.setLayout(CmsUtils.noSpaceGridLayout(new GridLayout(3, false)));
60
61 uxContext = new SimpleUxContext();
62 if (!getUxContext().isMasterData())
63 createAdminArea(parent);
64 headerArea = new Composite(parent, SWT.NONE);
65 headerArea.setLayout(new FillLayout());
66 GridData headerData = new GridData(SWT.FILL, SWT.FILL, false, false, 3, 1);
67 headerData.heightHint = headerHeight;
68 headerArea.setLayoutData(headerData);
69
70 // TODO: bi-directional
71 leftArea = new Composite(parent, SWT.NONE);
72 leftArea.setLayoutData(new GridData(SWT.LEAD, SWT.TOP, false, false));
73 leftArea.setLayout(CmsUtils.noSpaceGridLayout());
74
75 bodyArea = new Composite(parent, SWT.NONE);
76 bodyArea.setData(RWT.CUSTOM_VARIANT, CmsStyles.CMS_BODY);
77 bodyArea.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
78 bodyArea.setLayout(CmsUtils.noSpaceGridLayout());
79
80 // TODO: bi-directional
81 rightArea = new Composite(parent, SWT.NONE);
82 rightArea.setLayoutData(new GridData(SWT.END, SWT.TOP, false, false));
83 rightArea.setLayout(CmsUtils.noSpaceGridLayout());
84
85 footerArea = new Composite(parent, SWT.NONE);
86 // footerArea.setLayout(new FillLayout());
87 GridData footerData = new GridData(SWT.FILL, SWT.FILL, false, false, 3, 1);
88 footerData.heightHint = footerHeight;
89 footerArea.setLayoutData(footerData);
90
91 uiInitialized = true;
92 refresh();
93 }
94
95 @Override
96 protected void refresh() {
97 if (!uiInitialized)
98 return;
99 if (getState() == null)
100 setState("");
101 refreshSides();
102 refreshBody();
103 if (log.isTraceEnabled())
104 log.trace("UI refreshed " + getNode());
105 }
106
107 protected void createAdminArea(Composite parent) {
108 }
109
110 @Deprecated
111 protected void refreshHeader() {
112 if (header == null)
113 return;
114
115 for (Control child : headerArea.getChildren())
116 child.dispose();
117 try {
118 header.createUi(headerArea, getNode());
119 } catch (RepositoryException e) {
120 throw new CmsException("Cannot refresh header", e);
121 }
122 headerArea.layout(true, true);
123 }
124
125 protected void refreshSides() {
126 refresh(headerArea, header, CmsStyles.CMS_HEADER);
127 refresh(leftArea, lead, CmsStyles.CMS_LEAD);
128 refresh(rightArea, end, CmsStyles.CMS_END);
129 refresh(footerArea, footer, CmsStyles.CMS_FOOTER);
130 }
131
132 private void refresh(Composite area, CmsUiProvider uiProvider, String style) {
133 if (uiProvider == null)
134 return;
135
136 for (Control child : area.getChildren())
137 child.dispose();
138 CmsUtils.style(area, style);
139 try {
140 uiProvider.createUi(area, getNode());
141 } catch (RepositoryException e) {
142 throw new CmsException("Cannot refresh header", e);
143 }
144 area.layout(true, true);
145 }
146
147 protected void refreshBody() {
148 // Exception
149 Throwable exception = getException();
150 if (exception != null) {
151 SystemNotifications systemNotifications = new SystemNotifications(bodyArea);
152 systemNotifications.notifyException(exception);
153 resetException();
154 return;
155 // TODO report
156 }
157
158 // clear
159 for (Control child : bodyArea.getChildren())
160 child.dispose();
161 bodyArea.setLayout(CmsUtils.noSpaceGridLayout());
162
163 try {
164 Node node = getNode();
165 // if (node == null)
166 // log.error("Context cannot be null");
167 // else
168 uiProvider.createUi(bodyArea, node);
169 } catch (RepositoryException e) {
170 throw new CmsException("Cannot refresh body", e);
171 }
172
173 bodyArea.layout(true, true);
174 }
175
176 @Override
177 public UxContext getUxContext() {
178 return uxContext;
179 }
180
181 @Override
182 public CmsImageManager getImageManager() {
183 return imageManager;
184 }
185
186 public void setHeader(CmsUiProvider header) {
187 this.header = header;
188 }
189
190 public void setHeaderHeight(Integer headerHeight) {
191 this.headerHeight = headerHeight;
192 }
193
194 public void setImageManager(CmsImageManager imageManager) {
195 this.imageManager = imageManager;
196 }
197
198 public CmsUiProvider getLead() {
199 return lead;
200 }
201
202 public void setLead(CmsUiProvider lead) {
203 this.lead = lead;
204 }
205
206 public CmsUiProvider getEnd() {
207 return end;
208 }
209
210 public void setEnd(CmsUiProvider end) {
211 this.end = end;
212 }
213
214 public CmsUiProvider getFooter() {
215 return footer;
216 }
217
218 public void setFooter(CmsUiProvider footer) {
219 this.footer = footer;
220 }
221
222 public CmsUiProvider getHeader() {
223 return header;
224 }
225
226 public void setFooterHeight(Integer footerHeight) {
227 this.footerHeight = footerHeight;
228 }
229
230 }