From: Mathieu Baudier Date: Sat, 3 Oct 2020 15:41:12 +0000 (+0200) Subject: Introduce CMS App concept. X-Git-Tag: argeo-commons-2.1.89~85 X-Git-Url: https://git.argeo.org/?p=lgpl%2Fargeo-commons.git;a=commitdiff_plain;h=28eae1d74809cb8752ab72219063e822e264c77d Introduce CMS App concept. --- diff --git a/org.argeo.cms.ui/src/org/argeo/cms/ui/CmsApp.java b/org.argeo.cms.ui/src/org/argeo/cms/ui/CmsApp.java new file mode 100644 index 000000000..b8d382562 --- /dev/null +++ b/org.argeo.cms.ui/src/org/argeo/cms/ui/CmsApp.java @@ -0,0 +1,12 @@ +package org.argeo.cms.ui; + +import java.util.Set; + +import org.eclipse.swt.widgets.Composite; + +/** An extensible user interface base on the CMS backend. */ +public interface CmsApp { + Set getUiNames(); + + void initUi(String uiName, Composite parent); +} diff --git a/org.argeo.cms.ui/src/org/argeo/cms/ui/util/CmsStyle.java b/org.argeo.cms.ui/src/org/argeo/cms/ui/util/CmsStyle.java new file mode 100644 index 000000000..79d5bb682 --- /dev/null +++ b/org.argeo.cms.ui/src/org/argeo/cms/ui/util/CmsStyle.java @@ -0,0 +1,12 @@ +package org.argeo.cms.ui.util; + +/** Can be applied to {@link Enum}s in order to generated (CSS) class names. */ +public interface CmsStyle { + default String toStyleClass() { + return getClassPrefix() + "-" + ((Enum) this).name(); + } + + default String getClassPrefix() { + return "cms"; + } +} diff --git a/org.argeo.cms.ui/src/org/argeo/cms/ui/util/CmsUiUtils.java b/org.argeo.cms.ui/src/org/argeo/cms/ui/util/CmsUiUtils.java index 1671c90cc..3669db3fd 100644 --- a/org.argeo.cms.ui/src/org/argeo/cms/ui/util/CmsUiUtils.java +++ b/org.argeo.cms.ui/src/org/argeo/cms/ui/util/CmsUiUtils.java @@ -115,7 +115,7 @@ public class CmsUiUtils implements CmsConstants { } public static GridData fillHeight() { - return grabWidth(SWT.FILL, SWT.FILL); + return grabHeight(SWT.FILL, SWT.FILL); } public static GridData grabHeight(int horizontalAlignment, int verticalAlignment) { @@ -132,6 +132,12 @@ public class CmsUiUtils implements CmsConstants { return widget; } + /** Style widget */ + public static T style(T widget, CmsStyle style) { + widget.setData(CmsConstants.STYLE, style.toStyleClass()); + return widget; + } + /** Enable markups on widget */ public static T markup(T widget) { widget.setData(CmsConstants.MARKUP, true); diff --git a/org.argeo.cms.ui/src/org/argeo/cms/web/CmsWebApp.java b/org.argeo.cms.ui/src/org/argeo/cms/web/CmsWebApp.java new file mode 100644 index 000000000..cae02fde5 --- /dev/null +++ b/org.argeo.cms.ui/src/org/argeo/cms/web/CmsWebApp.java @@ -0,0 +1,38 @@ +package org.argeo.cms.web; + +import java.util.Map; + +import org.argeo.cms.ui.CmsApp; +import org.eclipse.rap.rwt.application.AbstractEntryPoint; +import org.eclipse.rap.rwt.application.Application; +import org.eclipse.swt.widgets.Composite; + +public class CmsWebApp extends MinimalWebApp { + private CmsApp cmsApp; + + @Override + protected void addEntryPoints(Application application, Map properties) { + for (String uiName : cmsApp.getUiNames()) { + application.addEntryPoint("/" + uiName, () -> { + return new AbstractEntryPoint() { + private static final long serialVersionUID = -9153259126766694485L; + + @Override + protected void createContents(Composite parent) { + cmsApp.initUi(uiName, parent); + + } + }; + }, properties); + } + } + + public CmsApp getCmsApp() { + return cmsApp; + } + + public void setCmsApp(CmsApp cmsApp) { + this.cmsApp = cmsApp; + } + +} diff --git a/org.argeo.cms.ui/src/org/argeo/cms/web/MinimalWebApp.java b/org.argeo.cms.ui/src/org/argeo/cms/web/MinimalWebApp.java index 31c93af22..fe8b20c92 100644 --- a/org.argeo.cms.ui/src/org/argeo/cms/web/MinimalWebApp.java +++ b/org.argeo.cms.ui/src/org/argeo/cms/web/MinimalWebApp.java @@ -1,7 +1,6 @@ package org.argeo.cms.web; import static org.argeo.cms.ui.util.CmsTheme.CMS_THEME_BUNDLE_PROPERTY; -import static org.argeo.cms.ui.util.CmsTheme.DEFAULT_CMS_THEME_BUNDLE; import java.util.HashMap; import java.util.Map; @@ -22,8 +21,6 @@ public class MinimalWebApp implements ApplicationConfiguration { if (properties.containsKey(CMS_THEME_BUNDLE_PROPERTY)) { String cmsThemeBundle = properties.get(CMS_THEME_BUNDLE_PROPERTY).toString(); theme = new CmsTheme(bundleContext, cmsThemeBundle); - } else { - theme = new CmsTheme(bundleContext, DEFAULT_CMS_THEME_BUNDLE); } } @@ -38,11 +35,16 @@ public class MinimalWebApp implements ApplicationConfiguration { @Override public void configure(Application application) { - theme.apply(application); + if (theme != null) + theme.apply(application); Map properties = new HashMap<>(); - properties.put(WebClient.THEME_ID, RWT.DEFAULT_THEME_ID); - properties.put(WebClient.HEAD_HTML, theme.getAdditionalHeaders()); + if (theme != null) { + properties.put(WebClient.THEME_ID, theme.getThemeId()); + properties.put(WebClient.HEAD_HTML, theme.getAdditionalHeaders()); + } else { + properties.put(WebClient.THEME_ID, RWT.DEFAULT_THEME_ID); + } addEntryPoints(application, properties); }