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