Better script support in CMS.
[lgpl/argeo-commons.git] / org.argeo.cms.ui / src / org / argeo / cms / util / SimpleErgonomics.java
index 37464079155e3a4097325ae656f5b82d4c024997..de6ce1c59ff9893dc61d8489ab22322f27f895ff 100644 (file)
@@ -19,6 +19,7 @@ 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;
 
@@ -30,11 +31,17 @@ public class SimpleErgonomics extends AbstractCmsEntryPoint {
 
        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 = 0;
+       private CmsUiProvider lead;
+       private CmsUiProvider end;
+       private CmsUiProvider footer;
 
        private CmsImageManager imageManager = new ImageManagerImpl();
        private UxContext uxContext = null;
@@ -48,21 +55,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)));
 
                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());
+
+               // 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 = headerHeight;
+               footerArea.setLayoutData(footerData);
+
                uiInitialized = true;
                refresh();
        }
@@ -73,7 +97,7 @@ public class SimpleErgonomics extends AbstractCmsEntryPoint {
                        return;
                if (getState() == null)
                        setState("");
-               refreshHeader();
+               refreshSides();
                refreshBody();
                if (log.isTraceEnabled())
                        log.trace("UI refreshed " + getNode());
@@ -82,6 +106,7 @@ public class SimpleErgonomics extends AbstractCmsEntryPoint {
        protected void createAdminArea(Composite parent) {
        }
 
+       @Deprecated
        protected void refreshHeader() {
                if (header == null)
                        return;
@@ -96,6 +121,28 @@ 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();
@@ -114,10 +161,10 @@ public class SimpleErgonomics extends AbstractCmsEntryPoint {
 
                try {
                        Node node = getNode();
-                       if (node == null)
-                               log.error("Context cannot be null");
-                       else
-                               uiProvider.createUi(bodyArea, node);
+//                     if (node == null)
+//                             log.error("Context cannot be null");
+//                     else
+                       uiProvider.createUi(bodyArea, node);
                } catch (RepositoryException e) {
                        throw new CmsException("Cannot refresh body", e);
                }
@@ -146,4 +193,33 @@ 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;
+       }
+
 }