]> git.argeo.org Git - gpl/argeo-suite.git/blob - ArgeoSuiteUi.java
e30360c092dbb3d21c565f2227eae6f6a6648183
[gpl/argeo-suite.git] / ArgeoSuiteUi.java
1 package org.argeo.suite.ui;
2
3 import static org.argeo.suite.ui.SuiteIcon.dashboard;
4
5 import java.util.HashMap;
6 import java.util.Map;
7
8 import javax.jcr.Session;
9
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;
23
24 /** The {@link CmsView} for the work ergonomics of Argeo Suite. */
25 public class ArgeoSuiteUi extends Composite {
26 private static final long serialVersionUID = 6207018859086689108L;
27
28 private Composite header;
29 private Composite belowHeader;
30 private Composite leadPane;
31 private Composite dynamicArea;
32
33 private CmsTheme theme;
34
35 private Session session;
36
37 private Map<String, WorkLayer> layers = new HashMap<>();
38 private String currentLayer = "dashboard";
39
40 public ArgeoSuiteUi(Composite parent, int style) {
41 super(parent, style);
42 theme = CmsTheme.getCmsTheme(parent);
43 this.setLayout(CmsUiUtils.noSpaceGridLayout());
44
45 header = new Composite(this, SWT.NONE);
46 CmsUiUtils.style(header, SuiteStyle.header);
47 header.setLayoutData(CmsUiUtils.fillWidth());
48
49 belowHeader = new Composite(this, SWT.NONE);
50 belowHeader.setLayoutData(CmsUiUtils.fillAll());
51 belowHeader.setLayout(CmsUiUtils.noSpaceGridLayout(2));
52
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);
56 } else {
57 leadPane = new Composite(belowHeader, SWT.NONE);
58 dynamicArea = new Composite(belowHeader, SWT.NONE);
59 }
60 leadPane.setLayoutData(CmsUiUtils.fillHeight());
61 CmsUiUtils.style(leadPane, SuiteStyle.leadPane);
62 dynamicArea.setLayoutData(CmsUiUtils.fillAll());
63
64 dynamicArea.setLayout(new FormLayout());
65
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));
70 }
71
72 Composite getCurrentLayer() {
73 return layers.get(currentLayer).getArea();
74 }
75
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();
80 }
81
82 Composite switchToLayer(String layer) {
83 Composite current = getCurrentLayer();
84 if (currentLayer.equals(layer))
85 return current;
86 Composite toShow = getLayer(layer);
87 getDisplay().syncExec(() -> toShow.moveAbove(current));
88 currentLayer = layer;
89 return toShow;
90 }
91
92 /*
93 * GETTERS / SETTERS
94 */
95
96 Composite getHeader() {
97 return header;
98 }
99
100 Composite getLeadPane() {
101 return leadPane;
102 }
103
104 Composite getBelowHeader() {
105 return belowHeader;
106 }
107
108 Composite getEntryArea() {
109 return layers.get(currentLayer).getEntryArea();
110 }
111
112 Composite getDefaultBody() {
113 return layers.get(currentLayer).getDefaultBody();
114 }
115
116 Session getSession() {
117 return session;
118 }
119
120 void setSession(Session session) {
121 this.session = session;
122 }
123
124 class WorkLayer {
125 private SashForm area;
126 private Composite entryArea;
127 private Composite editorArea;
128 private CTabFolder editorTabFolder;
129
130 private Composite defaultBody;
131
132 WorkLayer(Composite parent, int style) {
133 area = new SashForm(parent, SWT.HORIZONTAL);
134 area.setLayoutData(CmsUiUtils.coversAll());
135
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);
139 } else {
140 entryArea = new Composite(area, SWT.NONE);
141 editorArea = new Composite(area, SWT.NONE);
142 }
143 int[] weights = new int[] { 2000, 8000 };
144 area.setWeights(weights);
145 editorArea.setLayout(new GridLayout());
146
147 editorTabFolder = new CTabFolder(editorArea, SWT.NONE);
148 editorTabFolder.setLayoutData(CmsUiUtils.fillAll());
149
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);
159
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);
166
167 }
168
169 Composite getArea() {
170 return area;
171 }
172
173 Composite getEntryArea() {
174 return entryArea;
175 }
176
177 CTabFolder getEditorTabFolder() {
178 return editorTabFolder;
179 }
180
181 Composite getDefaultBody() {
182 return defaultBody;
183 }
184
185 }
186
187 }