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