]>
git.argeo.org Git - gpl/argeo-suite.git/blob - SuiteUi.java
02ff38e73a2b969759b493466609bc04c24d6e8b
1 package org
.argeo
.app
.ui
;
3 import java
.util
.HashMap
;
6 import org
.argeo
.api
.acr
.Content
;
7 import org
.argeo
.api
.cms
.CmsLog
;
8 import org
.argeo
.cms
.Localized
;
9 import org
.argeo
.cms
.swt
.CmsSwtUi
;
10 import org
.argeo
.cms
.swt
.CmsSwtUtils
;
11 import org
.eclipse
.swt
.SWT
;
12 import org
.eclipse
.swt
.layout
.FormLayout
;
13 import org
.eclipse
.swt
.widgets
.Composite
;
15 /** The view for the default ergonomics of Argeo Suite. */
16 class SuiteUi
extends CmsSwtUi
{
17 private static final long serialVersionUID
= 6207018859086689108L;
18 private final static CmsLog log
= CmsLog
.getLog(SuiteUi
.class);
20 private Localized title
;
21 private Composite header
;
22 private Composite footer
;
23 private Composite belowHeader
;
24 private Composite leadPane
;
25 private Composite sidePane
;
26 private Composite dynamicArea
;
28 // private Session sysSession;
29 // private Session homeSession;
30 private Content userDir
;
32 private Map
<String
, SuiteLayer
> layers
= new HashMap
<>();
33 private Map
<String
, Composite
> workAreas
= new HashMap
<>();
34 private String currentLayerId
= null;
36 private boolean loginScreen
= false;
37 // private String postLoginState;
39 public SuiteUi(Composite parent
, int style
) {
41 this.setLayout(CmsSwtUtils
.noSpaceGridLayout());
43 header
= new Composite(this, SWT
.NONE
);
44 header
.setLayout(CmsSwtUtils
.noSpaceGridLayout());
45 CmsSwtUtils
.style(header
, SuiteStyle
.header
);
46 header
.setLayoutData(CmsSwtUtils
.fillWidth());
48 belowHeader
= new Composite(this, SWT
.NONE
);
49 belowHeader
.setLayoutData(CmsSwtUtils
.fillAll());
51 footer
= new Composite(this, SWT
.NONE
);
52 footer
.setLayout(CmsSwtUtils
.noSpaceGridLayout());
53 CmsSwtUtils
.style(footer
, SuiteStyle
.footer
);
54 footer
.setLayoutData(CmsSwtUtils
.fillWidth());
57 public void refreshBelowHeader(boolean initApp
) {
58 CmsSwtUtils
.clear(belowHeader
);
59 int style
= getStyle();
61 belowHeader
.setLayout(CmsSwtUtils
.noSpaceGridLayout(3));
63 if (SWT
.RIGHT_TO_LEFT
== (style
& SWT
.RIGHT_TO_LEFT
)) {// arabic, hebrew, etc.
64 sidePane
= new Composite(belowHeader
, SWT
.NONE
);
65 sidePane
.setLayout(CmsSwtUtils
.noSpaceGridLayout());
66 sidePane
.setLayoutData(CmsSwtUtils
.fillHeight());
67 dynamicArea
= new Composite(belowHeader
, SWT
.NONE
);
68 leadPane
= new Composite(belowHeader
, SWT
.NONE
);
70 leadPane
= new Composite(belowHeader
, SWT
.NONE
);
71 dynamicArea
= new Composite(belowHeader
, SWT
.NONE
);
72 sidePane
= new Composite(belowHeader
, SWT
.NONE
);
73 sidePane
.setLayout(CmsSwtUtils
.noSpaceGridLayout());
74 sidePane
.setLayoutData(CmsSwtUtils
.fillHeight());
76 leadPane
.setLayoutData(CmsSwtUtils
.fillHeight());
77 leadPane
.setLayout(CmsSwtUtils
.noSpaceGridLayout());
78 CmsSwtUtils
.style(leadPane
, SuiteStyle
.leadPane
);
80 dynamicArea
.setLayoutData(CmsSwtUtils
.fillAll());
81 dynamicArea
.setLayout(new FormLayout());
84 belowHeader
.setLayout(CmsSwtUtils
.noSpaceGridLayout());
92 Composite
getCurrentWorkArea() {
93 if (currentLayerId
== null)
94 throw new IllegalStateException("No current layer");
95 return workAreas
.get(currentLayerId
);
98 String
getCurrentLayerId() {
99 return currentLayerId
;
102 private Composite
getLayer(String id
, Content context
) {
103 if (!layers
.containsKey(id
))
105 if (!workAreas
.containsKey(id
))
106 initLayer(id
, layers
.get(id
), context
);
107 return workAreas
.get(id
);
110 Composite
switchToLayer(String layerId
, Content context
) {
111 Composite current
= null;
112 if (currentLayerId
!= null) {
113 current
= getCurrentWorkArea();
114 if (currentLayerId
.equals(layerId
))
117 if (context
== null) {
118 if (!getCmsView().isAnonymous())
119 context
= getUserDirNode();
121 Composite toShow
= getLayer(layerId
, context
);
122 if (toShow
!= null) {
123 currentLayerId
= layerId
;
125 // getDisplay().syncExec(() -> {
126 if (!toShow
.isDisposed()) {
127 toShow
.moveAbove(null);
129 log
.warn("Cannot show work area because it is disposed.");
130 toShow
= initLayer(layerId
, layers
.get(layerId
), context
);
131 toShow
.moveAbove(null);
133 dynamicArea
.layout(true, true);
142 void switchToLayer(SuiteLayer layer
, Content context
) {
143 // TODO make it more robust
144 for (String layerId
: layers
.keySet()) {
145 SuiteLayer l
= layers
.get(layerId
);
146 if (layer
.getId().equals(l
.getId())) {
147 switchToLayer(layerId
, context
);
151 throw new IllegalArgumentException("Layer is not registered.");
154 void addLayer(String id
, SuiteLayer layer
) {
155 layers
.put(id
, layer
);
158 void removeLayer(String id
) {
160 if (workAreas
.containsKey(id
)) {
161 Composite workArea
= workAreas
.remove(id
);
162 if (!workArea
.isDisposed())
167 protected Composite
initLayer(String id
, SuiteLayer layer
, Content context
) {
168 Composite workArea
= getCmsView().doAs(() -> (Composite
) layer
.createUiPart(dynamicArea
, context
));
169 CmsSwtUtils
.style(workArea
, SuiteStyle
.workArea
);
170 workArea
.setLayoutData(CmsSwtUtils
.coverAll());
171 workAreas
.put(id
, workArea
);
175 synchronized void logout() {
177 // Jcr.logout(sysSession);
178 // Jcr.logout(homeSession);
179 currentLayerId
= null;
187 Composite
getHeader() {
191 Composite
getFooter() {
195 Composite
getLeadPane() {
199 Composite
getSidePane() {
203 Composite
getBelowHeader() {
207 // Session getSysSession() {
208 // return sysSession;
211 // synchronized void initSessions(Repository repository, String userDirPath) throws RepositoryException {
212 // this.sysSession = repository.login();
213 // this.homeSession = repository.login(CmsConstants.HOME_WORKSPACE);
214 // userDir = sysSession.getNode(userDirPath);
215 // addDisposeListener((e) -> {
216 // Jcr.logout(sysSession);
217 // Jcr.logout(homeSession);
222 Content
getUserDirNode() {
228 Content
getUserDir() {
232 void setUserDir(Content userDir
) {
233 this.userDir
= userDir
;
236 // Session getSysSession() {
237 // return sysSession;
240 // Session getSession(String workspaceName) {
241 // if (workspaceName == null)
242 // return sysSession;
243 // if (CmsConstants.SYS_WORKSPACE.equals(workspaceName))
244 // return sysSession;
245 // else if (CmsConstants.HOME_WORKSPACE.equals(workspaceName))
246 // return homeSession;
248 // throw new IllegalArgumentException("Unknown workspace " + workspaceName);
251 public Localized
getTitle() {
255 public void setTitle(Localized title
) {
259 public boolean isLoginScreen() {
263 public void setLoginScreen(boolean loginScreen
) {
264 this.loginScreen
= loginScreen
;
267 // public String getPostLoginState() {
268 // return postLoginState;
271 // public void setPostLoginState(String postLoginState) {
272 // this.postLoginState = postLoginState;