package org.argeo.suite.ui;
-import static org.argeo.suite.ui.ArgeoSuiteIcon.dashboard;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.jcr.Session;
import org.argeo.cms.ui.CmsTheme;
+import org.argeo.cms.ui.CmsView;
import org.argeo.cms.ui.util.CmsUiUtils;
+import org.argeo.cms.ui.widgets.TabbedArea;
import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.CTabFolder;
-import org.eclipse.swt.custom.CTabItem;
import org.eclipse.swt.custom.SashForm;
+import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.layout.RowLayout;
-import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
-public class ArgeoSuiteUi {
- private Composite parent;
+/** The {@link CmsView} for the work ergonomics of Argeo Suite. */
+public class ArgeoSuiteUi extends Composite {
+ private static final long serialVersionUID = 6207018859086689108L;
+ public final static String DASHBOARD_LAYER = "dashboard";
private Composite header;
+ private Composite belowHeader;
private Composite leadPane;
+ private Composite dynamicArea;
- private SashForm dynamicArea;
- private Composite entryArea;
- private Composite editorArea;
- private CTabFolder editorTabFolder;
+ private CmsTheme theme;
- private Composite defaultBody;
+ private Session session;
- private CmsTheme theme;
+ private Map<String, WorkLayer> layers = new HashMap<>();
+ private String currentLayer = DASHBOARD_LAYER;
public ArgeoSuiteUi(Composite parent, int style) {
+ super(parent, style);
theme = CmsTheme.getCmsTheme(parent);
- this.parent = parent;
- parent.setLayout(CmsUiUtils.noSpaceGridLayout());
+ this.setLayout(CmsUiUtils.noSpaceGridLayout());
- header = new Composite(parent, SWT.NONE);
- CmsUiUtils.style(header, WorkStyles.header);
+ header = new Composite(this, SWT.NONE);
+ CmsUiUtils.style(header, SuiteStyle.header);
header.setLayoutData(CmsUiUtils.fillWidth());
- Composite belowHeader = new Composite(parent, SWT.NONE);
+ belowHeader = new Composite(this, SWT.NONE);
belowHeader.setLayoutData(CmsUiUtils.fillAll());
- belowHeader.setLayout(CmsUiUtils.noSpaceGridLayout(2));
+ }
- if (SWT.RIGHT_TO_LEFT == (style & SWT.RIGHT_TO_LEFT)) {// arabic, hebrew, etc.
- dynamicArea = new SashForm(belowHeader, SWT.HORIZONTAL);
- leadPane = new Composite(belowHeader, SWT.NONE);
- } else {
- leadPane = new Composite(belowHeader, SWT.NONE);
- dynamicArea = new SashForm(belowHeader, SWT.HORIZONTAL);
- }
- leadPane.setLayoutData(CmsUiUtils.fillHeight());
- CmsUiUtils.style(leadPane, WorkStyles.leadPane);
- dynamicArea.setLayoutData(CmsUiUtils.fillAll());
+ public void refreshBelowHeader(boolean initApp) {
+ CmsUiUtils.clear(belowHeader);
+ int style = getStyle();
+ if (initApp) {
+ belowHeader.setLayout(CmsUiUtils.noSpaceGridLayout(2));
+
+ if (SWT.RIGHT_TO_LEFT == (style & SWT.RIGHT_TO_LEFT)) {// arabic, hebrew, etc.
+ dynamicArea = new Composite(belowHeader, SWT.NONE);
+ leadPane = new Composite(belowHeader, SWT.NONE);
+ } else {
+ leadPane = new Composite(belowHeader, SWT.NONE);
+ dynamicArea = new Composite(belowHeader, SWT.NONE);
+ }
+ leadPane.setLayoutData(CmsUiUtils.fillHeight());
+ CmsUiUtils.style(leadPane, SuiteStyle.leadPane);
+ dynamicArea.setLayoutData(CmsUiUtils.fillAll());
+
+ dynamicArea.setLayout(new FormLayout());
- if (SWT.RIGHT_TO_LEFT == (style & SWT.RIGHT_TO_LEFT)) {// arabic, hebrew, etc.
- editorArea = new Composite(dynamicArea, SWT.BORDER);
- entryArea = new Composite(dynamicArea, SWT.BORDER);
} else {
- entryArea = new Composite(dynamicArea, SWT.NONE);
- editorArea = new Composite(dynamicArea, SWT.NONE);
+ belowHeader.setLayout(CmsUiUtils.noSpaceGridLayout());
}
- int[] weights = new int[] { 2000, 8000 };
- dynamicArea.setWeights(weights);
- editorArea.setLayout(new GridLayout());
-
- // TODO make it dynamic
- RecentItems recentItems = new RecentItems();
- recentItems.createUiPart(entryArea);
-
- editorTabFolder = new CTabFolder(editorArea, SWT.NONE);
- editorTabFolder.setLayoutData(CmsUiUtils.fillAll());
- Composite buttons = new Composite(editorTabFolder, SWT.NONE);
- RowLayout buttonsLayout = new RowLayout(SWT.HORIZONTAL);
- buttonsLayout.pack = false;
- buttons.setLayout(buttonsLayout);
- Button delete = new Button(buttons, SWT.FLAT);
- delete.setImage(ArgeoSuiteIcon.delete.getSmallIcon(theme));
- // int size = ArgeoSuiteIcon.delete.getSmallIconSize();
- // delete.setBounds(delete.getBounds().x,delete.getBounds().y,size,size);
- // delete.setSize(size, size);
- editorTabFolder.setTopRight(buttons);
-
- CTabItem defaultTab = new CTabItem(editorTabFolder, SWT.NONE);
- // defaultTab.setText("Home");
- defaultTab.setImage(dashboard.getSmallIcon(theme));
- defaultBody = new Composite(editorTabFolder, SWT.NONE);
- defaultTab.setControl(defaultBody);
- editorTabFolder.setSelection(defaultTab);
-
- // editorArea.setSingle(true);
}
- Composite getParent() {
- return parent;
+ /*
+ * LAYERS
+ */
+
+ Composite getCurrentLayer() {
+ if (currentLayer == null)
+ throw new IllegalStateException("No current layer");
+ return layers.get(currentLayer).getArea();
+ }
+
+ Composite getLayer(String id) {
+ if (!layers.containsKey(id))
+ throw new IllegalArgumentException("No layer " + id + " is available.");
+ return layers.get(id).getArea();
+ }
+
+ Composite switchToLayer(String layer) {
+ Composite current = getCurrentLayer();
+ if (currentLayer.equals(layer))
+ return current;
+ Composite toShow = getLayer(layer);
+ getDisplay().syncExec(() -> toShow.moveAbove(current));
+ currentLayer = layer;
+ return toShow;
+ }
+
+ void addLayer(String layer) {
+ WorkLayer workLayer = new WorkLayer(dynamicArea, getStyle());
+ layers.put(layer, workLayer);
}
+ /*
+ * GETTERS / SETTERS
+ */
+
Composite getHeader() {
return header;
}
return leadPane;
}
- SashForm getDynamicArea() {
- return dynamicArea;
+ Composite getBelowHeader() {
+ return belowHeader;
}
Composite getEntryArea() {
- return entryArea;
+ return layers.get(currentLayer).getEntryArea();
+ }
+
+ TabbedArea getTabbedArea() {
+ return layers.get(currentLayer).getTabbedArea();
}
- CTabFolder getEditorTabFolder() {
- return editorTabFolder;
+ Session getSession() {
+ return session;
}
- Composite getDefaultBody() {
- return defaultBody;
+ void setSession(Session session) {
+ this.session = session;
+ }
+
+ class WorkLayer {
+ private SashForm area;
+ private Composite entryArea;
+ private Composite editorArea;
+ private TabbedArea tabbedArea;
+
+ WorkLayer(Composite parent, int style) {
+ area = new SashForm(parent, SWT.HORIZONTAL);
+ area.setLayoutData(CmsUiUtils.coversAll());
+
+ if (SWT.RIGHT_TO_LEFT == (style & SWT.RIGHT_TO_LEFT)) {// arabic, hebrew, etc.
+ editorArea = new Composite(area, SWT.BORDER);
+ entryArea = new Composite(area, SWT.BORDER);
+ } else {
+ entryArea = new Composite(area, SWT.NONE);
+ editorArea = new Composite(area, SWT.NONE);
+ }
+ int[] weights = new int[] { 2000, 8000 };
+ area.setWeights(weights);
+// editorArea.setLayout(CmsUiUtils.noSpaceGridLayout());
+ editorArea.setLayout(new GridLayout());
+
+ tabbedArea = new TabbedArea(editorArea, SWT.NONE);
+ tabbedArea.setBodyStyle(SuiteStyle.mainTabBody.toStyleClass());
+ tabbedArea.setTabStyle(SuiteStyle.mainTab.toStyleClass());
+ tabbedArea.setTabSelectedStyle(SuiteStyle.mainTabSelected.toStyleClass());
+ tabbedArea.setCloseIcon(SuiteIcon.close.getSmallIcon(theme));
+ tabbedArea.setLayoutData(CmsUiUtils.fillAll());
+
+ // TODO make it dynamic
+// Composite buttons = new Composite(editorTabFolder, SWT.NONE);
+// buttons.setLayout(CmsUiUtils.noSpaceGridLayout());
+// ToolBar toolBar = new ToolBar(buttons, SWT.NONE);
+// toolBar.setLayoutData(new GridData(SWT.END, SWT.TOP, false, false));
+// ToolItem deleteItem = new ToolItem(toolBar, SWT.PUSH);
+// deleteItem.setImage(SuiteIcon.delete.getSmallIcon(theme));
+// deleteItem.setEnabled(false);
+// editorTabFolder.setTopRight(buttons);
+//
+// CTabItem defaultTab = new CTabItem(editorTabFolder, SWT.NONE);
+// // defaultTab.setText("Home");
+// defaultTab.setImage(dashboard.getSmallIcon(theme));
+// defaultBody = new Composite(editorTabFolder, SWT.NONE);
+// defaultTab.setControl(defaultBody);
+// editorTabFolder.setSelection(defaultTab);
+
+ }
+
+ Composite getArea() {
+ return area;
+ }
+
+ Composite getEntryArea() {
+ return entryArea;
+ }
+
+ TabbedArea getTabbedArea() {
+ return tabbedArea;
+ }
}
}