X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.suite.ui%2Fsrc%2Forg%2Fargeo%2Fsuite%2Fui%2FArgeoSuiteUi.java;h=d74dc21aa4c7463d6650b15805f1c3625b75e2d8;hb=a91a037c1d7d94a47e356918952a106b5071cf5c;hp=2505c4596e60185c96ccd3e272b723b01a95f718;hpb=5ace611de7a12d74a6b606861b89a2d3517514b0;p=gpl%2Fargeo-suite.git diff --git a/org.argeo.suite.ui/src/org/argeo/suite/ui/ArgeoSuiteUi.java b/org.argeo.suite.ui/src/org/argeo/suite/ui/ArgeoSuiteUi.java index 2505c45..d74dc21 100644 --- a/org.argeo.suite.ui/src/org/argeo/suite/ui/ArgeoSuiteUi.java +++ b/org.argeo.suite.ui/src/org/argeo/suite/ui/ArgeoSuiteUi.java @@ -1,77 +1,109 @@ package org.argeo.suite.ui; +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.RowLayout; -import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.layout.FormLayout; +import org.eclipse.swt.layout.GridLayout; 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 CmsTheme theme; - private SashForm dynamicArea; - private Composite entryArea; - private CTabFolder editorArea; + private Session session; - private Composite defaultBody; + private Map layers = new HashMap<>(); + private String currentLayer = DASHBOARD_LAYER; public ArgeoSuiteUi(Composite parent, int style) { - this.parent = parent; - parent.setLayout(CmsUiUtils.noSpaceGridLayout()); + super(parent, style); + theme = CmsTheme.getCmsTheme(parent); + 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 CTabFolder(dynamicArea, SWT.NONE); - entryArea = new Composite(dynamicArea, SWT.NONE); } else { - entryArea = new Composite(dynamicArea, SWT.NONE); - editorArea = new CTabFolder(dynamicArea, SWT.NONE); + belowHeader.setLayout(CmsUiUtils.noSpaceGridLayout()); } - int[] weights = new int[] { 2000, 8000 }; - dynamicArea.setWeights(weights); + } + + /* + * LAYERS + */ - Composite buttons = new Composite(editorArea, SWT.NONE); - buttons.setLayout(new RowLayout(SWT.HORIZONTAL)); - Button delete = new Button(buttons, SWT.PUSH); - delete.setText("Delete"); - editorArea.setTopRight(buttons); + Composite getCurrentLayer() { + if (currentLayer == null) + throw new IllegalStateException("No current layer"); + return layers.get(currentLayer).getArea(); + } - CTabItem defaultTab = new CTabItem(editorArea, SWT.NONE); - defaultTab.setText("Home"); - defaultBody = new Composite(editorArea, SWT.NONE); - defaultTab.setControl(defaultBody); + Composite getLayer(String id) { + if (!layers.containsKey(id)) + throw new IllegalArgumentException("No layer " + id + " is available."); + return layers.get(id).getArea(); + } - // editorArea.setSingle(true); + 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; } - Composite getParent() { - return parent; + void addLayer(String layer) { + WorkLayer workLayer = new WorkLayer(dynamicArea, getStyle()); + layers.put(layer, workLayer); } + /* + * GETTERS / SETTERS + */ + Composite getHeader() { return header; } @@ -80,20 +112,85 @@ public class ArgeoSuiteUi { return leadPane; } - SashForm getDynamicArea() { - return dynamicArea; + Composite getBelowHeader() { + return belowHeader; } Composite getEntryArea() { - return entryArea; + return layers.get(currentLayer).getEntryArea(); } - CTabFolder getEditorArea() { - return editorArea; + TabbedArea getTabbedArea() { + return layers.get(currentLayer).getTabbedArea(); } - Composite getDefaultBody() { - return defaultBody; + Session getSession() { + return session; + } + + 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; + } } }