From: Mathieu Baudier Date: Sun, 14 Feb 2021 08:22:01 +0000 (+0100) Subject: Introduce footer. X-Git-Tag: argeo-suite-2.1.21~1^2~3 X-Git-Url: http://git.argeo.org/?p=gpl%2Fargeo-suite.git;a=commitdiff_plain;h=9ab716f8f45fc34f4848bd1a8b8c0a5e7783a5a9 Introduce footer. --- diff --git a/core/org.argeo.suite.ui/OSGI-INF/footer.xml b/core/org.argeo.suite.ui/OSGI-INF/footer.xml new file mode 100644 index 0000000..3499b4f --- /dev/null +++ b/core/org.argeo.suite.ui/OSGI-INF/footer.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/core/org.argeo.suite.ui/OSGI-INF/header.xml b/core/org.argeo.suite.ui/OSGI-INF/header.xml index a8fc66d..526d9f9 100644 --- a/core/org.argeo.suite.ui/OSGI-INF/header.xml +++ b/core/org.argeo.suite.ui/OSGI-INF/header.xml @@ -1,9 +1,8 @@ - + - diff --git a/core/org.argeo.suite.ui/bnd.bnd b/core/org.argeo.suite.ui/bnd.bnd index a94d10a..abd4ae2 100644 --- a/core/org.argeo.suite.ui/bnd.bnd +++ b/core/org.argeo.suite.ui/bnd.bnd @@ -1,6 +1,7 @@ Service-Component:\ OSGI-INF/cmsApp.xml,\ OSGI-INF/header.xml,\ +OSGI-INF/footer.xml,\ OSGI-INF/leadPane.xml,\ OSGI-INF/loginScreen.xml,\ OSGI-INF/recentItems.xml,\ diff --git a/core/org.argeo.suite.ui/config/footer.properties b/core/org.argeo.suite.ui/config/footer.properties new file mode 100644 index 0000000..12aca56 --- /dev/null +++ b/core/org.argeo.suite.ui/config/footer.properties @@ -0,0 +1 @@ +service.pid=argeo.suite.ui.footer diff --git a/core/org.argeo.suite.ui/src/org/argeo/suite/ui/DefaultFooter.java b/core/org.argeo.suite.ui/src/org/argeo/suite/ui/DefaultFooter.java new file mode 100644 index 0000000..7821e22 --- /dev/null +++ b/core/org.argeo.suite.ui/src/org/argeo/suite/ui/DefaultFooter.java @@ -0,0 +1,38 @@ +package org.argeo.suite.ui; + +import java.util.Map; + +import javax.jcr.Node; +import javax.jcr.RepositoryException; + +import org.argeo.cms.ui.CmsUiProvider; +import org.argeo.cms.ui.util.CmsUiUtils; +import org.eclipse.swt.SWT; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.osgi.framework.BundleContext; + +/** Footer of a standard Argeo Suite application. */ +public class DefaultFooter implements CmsUiProvider { + @Override + public Control createUi(Composite parent, Node context) throws RepositoryException { + parent.setLayout(CmsUiUtils.noSpaceGridLayout()); + Composite content = new Composite(parent, SWT.NONE); + Control contentControl = createContent(content, context); + + // TODO support and guarantee + + return contentControl; + } + + protected Control createContent(Composite parent, Node context) throws RepositoryException { + return parent; + } + + public void init(BundleContext bundleContext, Map properties) { + } + + public void destroy(BundleContext bundleContext, Map properties) { + + } +} diff --git a/core/org.argeo.suite.ui/src/org/argeo/suite/ui/DefaultHeader.java b/core/org.argeo.suite.ui/src/org/argeo/suite/ui/DefaultHeader.java index 84a5ebd..91154c3 100644 --- a/core/org.argeo.suite.ui/src/org/argeo/suite/ui/DefaultHeader.java +++ b/core/org.argeo.suite.ui/src/org/argeo/suite/ui/DefaultHeader.java @@ -1,8 +1,6 @@ package org.argeo.suite.ui; -import java.util.Dictionary; import java.util.Map; -import java.util.TreeMap; import javax.jcr.Node; import javax.jcr.RepositoryException; @@ -13,7 +11,6 @@ import org.argeo.cms.ui.CmsTheme; import org.argeo.cms.ui.CmsUiProvider; import org.argeo.cms.ui.CmsView; import org.argeo.cms.ui.util.CmsUiUtils; -import org.argeo.util.LangUtils; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; @@ -25,14 +22,10 @@ import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.osgi.framework.BundleContext; import org.osgi.framework.wiring.BundleWiring; -import org.osgi.service.cm.ConfigurationException; -import org.osgi.service.cm.ManagedService; -/** HEader of a standard Argeo Suite application. */ -public class DefaultHeader implements CmsUiProvider, ManagedService { +/** Header of a standard Argeo Suite application. */ +public class DefaultHeader implements CmsUiProvider { public final static String TITLE_PROPERTY = "argeo.suite.ui.header.title"; - private Map properties; - private Localized title = null; @Override @@ -92,7 +85,6 @@ public class DefaultHeader implements CmsUiProvider, ManagedService { } public void init(BundleContext bundleContext, Map properties) { - this.properties = new TreeMap<>(properties); String titleStr = (String) properties.get(TITLE_PROPERTY); if (titleStr != null) { if (titleStr.startsWith("%")) { @@ -120,12 +112,6 @@ public class DefaultHeader implements CmsUiProvider, ManagedService { } - @Override - public void updated(Dictionary properties) throws ConfigurationException { - if (properties != null) - this.properties.putAll(LangUtils.dictToStringMap(properties)); - } - public Localized getTitle() { return title; } diff --git a/core/org.argeo.suite.ui/src/org/argeo/suite/ui/SuiteApp.java b/core/org.argeo.suite.ui/src/org/argeo/suite/ui/SuiteApp.java index fcf7e1f..6082480 100644 --- a/core/org.argeo.suite.ui/src/org/argeo/suite/ui/SuiteApp.java +++ b/core/org.argeo.suite.ui/src/org/argeo/suite/ui/SuiteApp.java @@ -60,6 +60,7 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { private String pidPrefix; private String headerPid; + private String footerPid; private String leadPanePid; private String loginScreenPid; @@ -99,6 +100,7 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { throw new IllegalArgumentException("PID prefix must be set."); headerPid = pidPrefix + "header"; + footerPid = pidPrefix + "footer"; leadPanePid = pidPrefix + "leadPane"; loginScreenPid = pidPrefix + "loginScreen"; } @@ -151,6 +153,7 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { SuiteUi ui = (SuiteUi) parent; CmsView cmsView = CmsView.getCmsView(parent); CmsUiProvider headerUiProvider = findUiProvider(headerPid); + CmsUiProvider footerUiProvider = findUiProvider(footerPid); Localized appTitle = null; if (headerUiProvider instanceof DefaultHeader) { appTitle = ((DefaultHeader) headerUiProvider).getTitle(); @@ -159,9 +162,12 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { if (cmsView.isAnonymous() && publicBasePath == null) {// internal app, must login ui.logout(); - refreshPart(headerUiProvider, ui.getHeader(), context); + if (headerUiProvider != null) + refreshPart(headerUiProvider, ui.getHeader(), context); ui.refreshBelowHeader(false); refreshPart(findUiProvider(loginScreenPid), ui.getBelowHeader(), context); + if (footerUiProvider != null) + refreshPart(footerUiProvider, ui.getFooter(), context); ui.layout(true, true); setState(ui, LOGIN); } else { @@ -188,13 +194,16 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { if (context == null) context = ui.getUserDir(); - refreshPart(headerUiProvider, ui.getHeader(), context); + if (headerUiProvider != null) + refreshPart(headerUiProvider, ui.getHeader(), context); ui.refreshBelowHeader(true); for (String key : layersByPid.keySet()) { SuiteLayer layer = layersByPid.get(key).get(); ui.addLayer(key, layer); } refreshPart(findUiProvider(leadPanePid), ui.getLeadPane(), context); + if (footerUiProvider != null) + refreshPart(footerUiProvider, ui.getFooter(), context); ui.layout(true, true); setState(parent, state != null ? state : defaultLayerPid); } @@ -219,13 +228,13 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { private CmsUiProvider findUiProvider(String pid) { if (!uiProvidersByPid.containsKey(pid)) - throw new IllegalArgumentException("No UI provider registered as " + pid); + return null; return uiProvidersByPid.get(pid).get(); } private SuiteLayer findLayer(String pid) { if (!layersByPid.containsKey(pid)) - throw new IllegalArgumentException("No UI provider registered as " + pid); + return null; return layersByPid.get(pid).get(); } diff --git a/core/org.argeo.suite.ui/src/org/argeo/suite/ui/SuiteStyle.java b/core/org.argeo.suite.ui/src/org/argeo/suite/ui/SuiteStyle.java index 5183fa4..0156801 100644 --- a/core/org.argeo.suite.ui/src/org/argeo/suite/ui/SuiteStyle.java +++ b/core/org.argeo.suite.ui/src/org/argeo/suite/ui/SuiteStyle.java @@ -4,15 +4,17 @@ import org.argeo.cms.ui.util.CmsStyle; /** Styles used by Argeo Suite work UI. */ public enum SuiteStyle implements CmsStyle { - // Header + // header header, headerTitle, headerMenu, headerMenuItem, - // Recent items + // footer + footer, + // recent items recentItems, - // Lead pane + // lead pane leadPane, leadPaneItem, leadPaneSectionTitle, leadPaneSubSectionTitle, - // Group composite + // group composite titleContainer, titleLabel, subTitleLabel, formLine, formColumn, navigationBar, navigationTitle, navigationButton, - // Forms elements + // forms elements simpleLabel, simpleText, simpleInput, // table titleCell, @@ -20,7 +22,7 @@ public enum SuiteStyle implements CmsStyle { workArea, // tabbed area mainTabBody, mainTabSelected, mainTab, - // Buttons + // buttons inlineButton; @Override diff --git a/core/org.argeo.suite.ui/src/org/argeo/suite/ui/SuiteUi.java b/core/org.argeo.suite.ui/src/org/argeo/suite/ui/SuiteUi.java index 3c4474f..52a2fd6 100644 --- a/core/org.argeo.suite.ui/src/org/argeo/suite/ui/SuiteUi.java +++ b/core/org.argeo.suite.ui/src/org/argeo/suite/ui/SuiteUi.java @@ -26,6 +26,7 @@ class SuiteUi extends Composite { private Localized title; private Composite header; + private Composite footer; private Composite belowHeader; private Composite leadPane; private Composite dynamicArea; @@ -52,6 +53,11 @@ class SuiteUi extends Composite { belowHeader = new Composite(this, SWT.NONE); belowHeader.setLayoutData(CmsUiUtils.fillAll()); + + footer = new Composite(this, SWT.NONE); + footer.setLayout(CmsUiUtils.noSpaceGridLayout()); + CmsUiUtils.style(header, SuiteStyle.header); + footer.setLayoutData(CmsUiUtils.fillWidth()); } public void refreshBelowHeader(boolean initApp) { @@ -181,6 +187,10 @@ class SuiteUi extends Composite { return header; } + Composite getFooter() { + return footer; + } + Composite getLeadPane() { return leadPane; }