]> git.argeo.org Git - lgpl/argeo-commons.git/blob - SimpleErgonomics.java
40e5fecf8238a246a666be4bc88905dce15b438c
[lgpl/argeo-commons.git] / SimpleErgonomics.java
1 package org.argeo.cms.util;
2
3 import java.util.Map;
4
5 import javax.jcr.Repository;
6 import javax.jcr.RepositoryException;
7
8 import org.apache.commons.logging.Log;
9 import org.apache.commons.logging.LogFactory;
10 import org.argeo.cms.AbstractCmsEntryPoint;
11 import org.argeo.cms.CmsException;
12 import org.argeo.cms.CmsImageManager;
13 import org.argeo.cms.CmsStyles;
14 import org.argeo.cms.CmsUiProvider;
15 import org.argeo.cms.internal.ImageManagerImpl;
16 import org.eclipse.rap.rwt.RWT;
17 import org.eclipse.swt.SWT;
18 import org.eclipse.swt.layout.FillLayout;
19 import org.eclipse.swt.layout.GridData;
20 import org.eclipse.swt.widgets.Composite;
21 import org.eclipse.swt.widgets.Control;
22
23 /** Simple header/body ergonomics. */
24 public class SimpleErgonomics extends AbstractCmsEntryPoint {
25 private final static Log log = LogFactory.getLog(SimpleErgonomics.class);
26
27 private boolean uiInitialized = false;
28 private Composite headerArea;
29 private Composite bodyArea;
30 private final CmsUiProvider uiProvider;
31
32 private CmsUiProvider header;
33 private Integer headerHeight = 40;
34
35 private CmsImageManager imageManager = new ImageManagerImpl();
36
37 public SimpleErgonomics(Repository repository, String workspace,
38 String defaultPath, CmsUiProvider uiProvider,
39 Map<String, String> factoryProperties) {
40 super(repository, workspace, defaultPath, factoryProperties);
41 this.uiProvider = uiProvider;
42 }
43
44 @Override
45 protected void createUi(Composite parent) {
46 parent.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
47 parent.setLayout(CmsUtils.noSpaceGridLayout());
48
49 headerArea = new Composite(parent, SWT.NONE);
50 headerArea.setLayout(new FillLayout());
51 GridData headerData = new GridData(SWT.FILL, SWT.FILL, false, false);
52 headerData.heightHint = headerHeight;
53 headerArea.setLayoutData(headerData);
54
55 bodyArea = new Composite(parent, SWT.NONE);
56 bodyArea.setData(RWT.CUSTOM_VARIANT, CmsStyles.CMS_BODY);
57 bodyArea.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
58 bodyArea.setLayout(CmsUtils.noSpaceGridLayout());
59
60 uiInitialized = true;
61 refresh();
62 }
63
64 @Override
65 protected void refresh() {
66 if (!uiInitialized)
67 return;
68 if (getState() == null)
69 setState("");
70 refreshHeader();
71 refreshBody();
72 if (log.isTraceEnabled())
73 log.trace("UI refreshed " + getNode());
74 }
75
76 protected void refreshHeader() {
77 for (Control child : headerArea.getChildren())
78 child.dispose();
79 try {
80 header.createUi(headerArea, getNode());
81 } catch (RepositoryException e) {
82 throw new CmsException("Cannot refresh header", e);
83 }
84 headerArea.layout(true, true);
85 }
86
87 protected void refreshBody() {
88 // Exception
89 Throwable exception = getException();
90 if (exception != null) {
91 SystemNotifications systemNotifications = new SystemNotifications(
92 bodyArea);
93 systemNotifications.notifyException(exception);
94 resetException();
95 return;
96 // TODO report
97 }
98
99 // clear
100 for (Control child : bodyArea.getChildren())
101 child.dispose();
102 bodyArea.setLayout(CmsUtils.noSpaceGridLayout());
103
104 try {
105 uiProvider.createUi(bodyArea, getNode());
106 } catch (RepositoryException e) {
107 throw new CmsException("Cannot refresh body", e);
108 }
109
110 bodyArea.layout(true, true);
111 }
112
113 @Override
114 public CmsImageManager getImageManager() {
115 return imageManager;
116 }
117
118 public void setHeader(CmsUiProvider header) {
119 this.header = header;
120 }
121
122 public void setHeaderHeight(Integer headerHeight) {
123 this.headerHeight = headerHeight;
124 }
125
126 public void setImageManager(CmsImageManager imageManager) {
127 this.imageManager = imageManager;
128 }
129 }