1 package org
.argeo
.suite
.ui
;
3 import static org
.argeo
.suite
.ui
.SuiteIcon
.dashboard
;
5 import java
.util
.HashMap
;
8 import javax
.jcr
.Session
;
10 import org
.argeo
.cms
.ui
.CmsTheme
;
11 import org
.argeo
.cms
.ui
.CmsView
;
12 import org
.argeo
.cms
.ui
.util
.CmsUiUtils
;
13 import org
.eclipse
.swt
.SWT
;
14 import org
.eclipse
.swt
.custom
.CTabFolder
;
15 import org
.eclipse
.swt
.custom
.CTabItem
;
16 import org
.eclipse
.swt
.custom
.SashForm
;
17 import org
.eclipse
.swt
.layout
.FormLayout
;
18 import org
.eclipse
.swt
.layout
.GridData
;
19 import org
.eclipse
.swt
.layout
.GridLayout
;
20 import org
.eclipse
.swt
.widgets
.Composite
;
21 import org
.eclipse
.swt
.widgets
.ToolBar
;
22 import org
.eclipse
.swt
.widgets
.ToolItem
;
24 /** The {@link CmsView} for the work ergonomics of Argeo Suite. */
25 public class ArgeoSuiteUi
extends Composite
{
26 private static final long serialVersionUID
= 6207018859086689108L;
28 private Composite header
;
29 private Composite belowHeader
;
30 private Composite leadPane
;
31 private Composite dynamicArea
;
33 private CmsTheme theme
;
35 private Session session
;
37 private Map
<String
, WorkLayer
> layers
= new HashMap
<>();
38 private String currentLayer
= "dashboard";
40 public ArgeoSuiteUi(Composite parent
, int style
) {
42 theme
= CmsTheme
.getCmsTheme(parent
);
43 this.setLayout(CmsUiUtils
.noSpaceGridLayout());
45 header
= new Composite(this, SWT
.NONE
);
46 CmsUiUtils
.style(header
, SuiteStyle
.header
);
47 header
.setLayoutData(CmsUiUtils
.fillWidth());
49 belowHeader
= new Composite(this, SWT
.NONE
);
50 belowHeader
.setLayoutData(CmsUiUtils
.fillAll());
51 belowHeader
.setLayout(CmsUiUtils
.noSpaceGridLayout(2));
53 if (SWT
.RIGHT_TO_LEFT
== (style
& SWT
.RIGHT_TO_LEFT
)) {// arabic, hebrew, etc.
54 dynamicArea
= new Composite(belowHeader
, SWT
.NONE
);
55 leadPane
= new Composite(belowHeader
, SWT
.NONE
);
57 leadPane
= new Composite(belowHeader
, SWT
.NONE
);
58 dynamicArea
= new Composite(belowHeader
, SWT
.NONE
);
60 leadPane
.setLayoutData(CmsUiUtils
.fillHeight());
61 CmsUiUtils
.style(leadPane
, SuiteStyle
.leadPane
);
62 dynamicArea
.setLayoutData(CmsUiUtils
.fillAll());
64 dynamicArea
.setLayout(new FormLayout());
66 layers
.put("dashboard", new WorkLayer(dynamicArea
, style
));
67 layers
.put("documents", new WorkLayer(dynamicArea
, style
));
68 layers
.put("locations", new WorkLayer(dynamicArea
, style
));
69 layers
.put("people", new WorkLayer(dynamicArea
, style
));
72 Composite
getCurrentLayer() {
73 return layers
.get(currentLayer
).getArea();
76 Composite
getLayer(String id
) {
77 if (!layers
.containsKey(id
))
78 throw new IllegalArgumentException("No layer " + id
+ " is available.");
79 return layers
.get(id
).getArea();
82 Composite
switchToLayer(String layer
) {
83 Composite current
= getCurrentLayer();
84 if (currentLayer
.equals(layer
))
86 Composite toShow
= getLayer(layer
);
87 getDisplay().syncExec(() -> toShow
.moveAbove(current
));
96 Composite
getHeader() {
100 Composite
getLeadPane() {
104 Composite
getBelowHeader() {
108 Composite
getEntryArea() {
109 return layers
.get(currentLayer
).getEntryArea();
112 Composite
getDefaultBody() {
113 return layers
.get(currentLayer
).getDefaultBody();
116 Session
getSession() {
120 void setSession(Session session
) {
121 this.session
= session
;
125 private SashForm area
;
126 private Composite entryArea
;
127 private Composite editorArea
;
128 private CTabFolder editorTabFolder
;
130 private Composite defaultBody
;
132 WorkLayer(Composite parent
, int style
) {
133 area
= new SashForm(parent
, SWT
.HORIZONTAL
);
134 area
.setLayoutData(CmsUiUtils
.coversAll());
136 if (SWT
.RIGHT_TO_LEFT
== (style
& SWT
.RIGHT_TO_LEFT
)) {// arabic, hebrew, etc.
137 editorArea
= new Composite(area
, SWT
.BORDER
);
138 entryArea
= new Composite(area
, SWT
.BORDER
);
140 entryArea
= new Composite(area
, SWT
.NONE
);
141 editorArea
= new Composite(area
, SWT
.NONE
);
143 int[] weights
= new int[] { 2000, 8000 };
144 area
.setWeights(weights
);
145 editorArea
.setLayout(new GridLayout());
147 editorTabFolder
= new CTabFolder(editorArea
, SWT
.NONE
);
148 editorTabFolder
.setLayoutData(CmsUiUtils
.fillAll());
150 // TODO make it dynamic
151 Composite buttons
= new Composite(editorTabFolder
, SWT
.NONE
);
152 buttons
.setLayout(CmsUiUtils
.noSpaceGridLayout());
153 ToolBar toolBar
= new ToolBar(buttons
, SWT
.NONE
);
154 toolBar
.setLayoutData(new GridData(SWT
.END
, SWT
.TOP
, false, false));
155 ToolItem deleteItem
= new ToolItem(toolBar
, SWT
.PUSH
);
156 deleteItem
.setImage(SuiteIcon
.delete
.getSmallIcon(theme
));
157 deleteItem
.setEnabled(false);
158 editorTabFolder
.setTopRight(buttons
);
160 CTabItem defaultTab
= new CTabItem(editorTabFolder
, SWT
.NONE
);
161 // defaultTab.setText("Home");
162 defaultTab
.setImage(dashboard
.getSmallIcon(theme
));
163 defaultBody
= new Composite(editorTabFolder
, SWT
.NONE
);
164 defaultTab
.setControl(defaultBody
);
165 editorTabFolder
.setSelection(defaultTab
);
169 Composite
getArea() {
173 Composite
getEntryArea() {
177 CTabFolder
getEditorTabFolder() {
178 return editorTabFolder
;
181 Composite
getDefaultBody() {