--- /dev/null
+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<String> getUiNames();
+
+ void initUi(String uiName, Composite parent);
+}
--- /dev/null
+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";
+ }
+}
}
public static GridData fillHeight() {
- return grabWidth(SWT.FILL, SWT.FILL);
+ return grabHeight(SWT.FILL, SWT.FILL);
}
public static GridData grabHeight(int horizontalAlignment, int verticalAlignment) {
return widget;
}
+ /** Style widget */
+ public static <T extends Widget> T style(T widget, CmsStyle style) {
+ widget.setData(CmsConstants.STYLE, style.toStyleClass());
+ return widget;
+ }
+
/** Enable markups on widget */
public static <T extends Widget> T markup(T widget) {
widget.setData(CmsConstants.MARKUP, true);
--- /dev/null
+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<String, String> 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;
+ }
+
+}
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;
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);
}
}
@Override
public void configure(Application application) {
- theme.apply(application);
+ if (theme != null)
+ theme.apply(application);
Map<String, String> 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);
}