X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms.ui%2Fsrc%2Forg%2Fargeo%2Fcms%2Futil%2FSimpleErgonomics.java;h=ca563600cc7ca139fb060f043bf987017f4a48a5;hb=1c9a38f78a8a1b314a8d4a46cb26237c27f60a59;hp=8ada61fdf462d88bb88f0646e7bd13d2bbbe7539;hpb=972528f4de2d00690362c01d3ce843ca9cd10250;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms.ui/src/org/argeo/cms/util/SimpleErgonomics.java b/org.argeo.cms.ui/src/org/argeo/cms/util/SimpleErgonomics.java index 8ada61fdf..ca563600c 100644 --- a/org.argeo.cms.ui/src/org/argeo/cms/util/SimpleErgonomics.java +++ b/org.argeo.cms.ui/src/org/argeo/cms/util/SimpleErgonomics.java @@ -2,42 +2,52 @@ package org.argeo.cms.util; import java.util.Map; +import javax.jcr.Node; import javax.jcr.Repository; import javax.jcr.RepositoryException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.argeo.cms.AbstractCmsEntryPoint; import org.argeo.cms.CmsException; -import org.argeo.cms.CmsImageManager; -import org.argeo.cms.CmsStyles; -import org.argeo.cms.CmsUiProvider; -import org.argeo.cms.UxContext; +import org.argeo.cms.ui.AbstractCmsEntryPoint; +import org.argeo.cms.ui.CmsImageManager; +import org.argeo.cms.ui.CmsStyles; +import org.argeo.cms.ui.CmsUiProvider; +import org.argeo.cms.ui.UxContext; import org.argeo.cms.ui.internal.ImageManagerImpl; import org.eclipse.rap.rwt.RWT; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; /** Simple header/body ergonomics. */ public class SimpleErgonomics extends AbstractCmsEntryPoint { + private static final long serialVersionUID = 8743413921359548523L; + private final static Log log = LogFactory.getLog(SimpleErgonomics.class); private boolean uiInitialized = false; private Composite headerArea; + private Composite leftArea; + private Composite rightArea; + private Composite footerArea; private Composite bodyArea; private final CmsUiProvider uiProvider; private CmsUiProvider header; - private Integer headerHeight = 40; + private Integer headerHeight = 0; + private Integer footerHeight = 0; + private CmsUiProvider lead; + private CmsUiProvider end; + private CmsUiProvider footer; private CmsImageManager imageManager = new ImageManagerImpl(); private UxContext uxContext = null; - public SimpleErgonomics(Repository repository, String workspace, - String defaultPath, CmsUiProvider uiProvider, + public SimpleErgonomics(Repository repository, String workspace, String defaultPath, CmsUiProvider uiProvider, Map factoryProperties) { super(repository, workspace, defaultPath, factoryProperties); this.uiProvider = uiProvider; @@ -46,20 +56,38 @@ public class SimpleErgonomics extends AbstractCmsEntryPoint { @Override protected void initUi(Composite parent) { parent.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - parent.setLayout(CmsUtils.noSpaceGridLayout()); + parent.setLayout(CmsUtils.noSpaceGridLayout(new GridLayout(3, false))); - // createAdminArea(parent); + uxContext = new SimpleUxContext(); + if (!getUxContext().isMasterData()) + createAdminArea(parent); headerArea = new Composite(parent, SWT.NONE); headerArea.setLayout(new FillLayout()); - GridData headerData = new GridData(SWT.FILL, SWT.FILL, false, false); + GridData headerData = new GridData(SWT.FILL, SWT.FILL, false, false, 3, 1); headerData.heightHint = headerHeight; headerArea.setLayoutData(headerData); + // TODO: bi-directional + leftArea = new Composite(parent, SWT.NONE); + leftArea.setLayoutData(new GridData(SWT.LEAD, SWT.TOP, false, false)); + leftArea.setLayout(CmsUtils.noSpaceGridLayout()); + bodyArea = new Composite(parent, SWT.NONE); bodyArea.setData(RWT.CUSTOM_VARIANT, CmsStyles.CMS_BODY); bodyArea.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); bodyArea.setLayout(CmsUtils.noSpaceGridLayout()); - uxContext = new SimpleUxContext(); + + // TODO: bi-directional + rightArea = new Composite(parent, SWT.NONE); + rightArea.setLayoutData(new GridData(SWT.END, SWT.TOP, false, false)); + rightArea.setLayout(CmsUtils.noSpaceGridLayout()); + + footerArea = new Composite(parent, SWT.NONE); + // footerArea.setLayout(new FillLayout()); + GridData footerData = new GridData(SWT.FILL, SWT.FILL, false, false, 3, 1); + footerData.heightHint = footerHeight; + footerArea.setLayoutData(footerData); + uiInitialized = true; refresh(); } @@ -70,7 +98,7 @@ public class SimpleErgonomics extends AbstractCmsEntryPoint { return; if (getState() == null) setState(""); - refreshHeader(); + refreshSides(); refreshBody(); if (log.isTraceEnabled()) log.trace("UI refreshed " + getNode()); @@ -79,7 +107,11 @@ public class SimpleErgonomics extends AbstractCmsEntryPoint { protected void createAdminArea(Composite parent) { } + @Deprecated protected void refreshHeader() { + if (header == null) + return; + for (Control child : headerArea.getChildren()) child.dispose(); try { @@ -90,12 +122,33 @@ public class SimpleErgonomics extends AbstractCmsEntryPoint { headerArea.layout(true, true); } + protected void refreshSides() { + refresh(headerArea, header, CmsStyles.CMS_HEADER); + refresh(leftArea, lead, CmsStyles.CMS_LEAD); + refresh(rightArea, end, CmsStyles.CMS_END); + refresh(footerArea, footer, CmsStyles.CMS_FOOTER); + } + + private void refresh(Composite area, CmsUiProvider uiProvider, String style) { + if (uiProvider == null) + return; + + for (Control child : area.getChildren()) + child.dispose(); + CmsUtils.style(area, style); + try { + uiProvider.createUi(area, getNode()); + } catch (RepositoryException e) { + throw new CmsException("Cannot refresh header", e); + } + area.layout(true, true); + } + protected void refreshBody() { // Exception Throwable exception = getException(); if (exception != null) { - SystemNotifications systemNotifications = new SystemNotifications( - bodyArea); + SystemNotifications systemNotifications = new SystemNotifications(bodyArea); systemNotifications.notifyException(exception); resetException(); return; @@ -108,7 +161,11 @@ public class SimpleErgonomics extends AbstractCmsEntryPoint { bodyArea.setLayout(CmsUtils.noSpaceGridLayout()); try { - uiProvider.createUi(bodyArea, getNode()); + Node node = getNode(); +// if (node == null) +// log.error("Context cannot be null"); +// else + uiProvider.createUi(bodyArea, node); } catch (RepositoryException e) { throw new CmsException("Cannot refresh body", e); } @@ -137,4 +194,37 @@ public class SimpleErgonomics extends AbstractCmsEntryPoint { public void setImageManager(CmsImageManager imageManager) { this.imageManager = imageManager; } + + public CmsUiProvider getLead() { + return lead; + } + + public void setLead(CmsUiProvider lead) { + this.lead = lead; + } + + public CmsUiProvider getEnd() { + return end; + } + + public void setEnd(CmsUiProvider end) { + this.end = end; + } + + public CmsUiProvider getFooter() { + return footer; + } + + public void setFooter(CmsUiProvider footer) { + this.footer = footer; + } + + public CmsUiProvider getHeader() { + return header; + } + + public void setFooterHeight(Integer footerHeight) { + this.footerHeight = footerHeight; + } + }