From 572d4d275bf6d3a21794b832eb6c0700e93612e4 Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Wed, 14 Oct 2020 10:20:42 +0200 Subject: [PATCH] SWT styling. --- rcp/org.argeo.cms.ui.rcp/bnd.bnd | 1 + .../src/org/argeo/cms/ui/rcp/CmsRcpApp.java | 46 ++++++++++++++++++- .../ui/specific/EclipseUiConstants.java | 7 +++ 3 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 rcp/org.argeo.eclipse.ui.rcp/src/org/argeo/eclipse/ui/specific/EclipseUiConstants.java diff --git a/rcp/org.argeo.cms.ui.rcp/bnd.bnd b/rcp/org.argeo.cms.ui.rcp/bnd.bnd index 8e906757a..c3704d8bf 100644 --- a/rcp/org.argeo.cms.ui.rcp/bnd.bnd +++ b/rcp/org.argeo.cms.ui.rcp/bnd.bnd @@ -6,4 +6,5 @@ org.argeo.api,\ org.argeo.cms.auth,\ org.eclipse.swt,\ org.eclipse.swt.graphics,\ +org.w3c.css.sac,\ * diff --git a/rcp/org.argeo.cms.ui.rcp/src/org/argeo/cms/ui/rcp/CmsRcpApp.java b/rcp/org.argeo.cms.ui.rcp/src/org/argeo/cms/ui/rcp/CmsRcpApp.java index 4ce89789d..aa843c459 100644 --- a/rcp/org.argeo.cms.ui.rcp/src/org/argeo/cms/ui/rcp/CmsRcpApp.java +++ b/rcp/org.argeo.cms.ui.rcp/src/org/argeo/cms/ui/rcp/CmsRcpApp.java @@ -1,5 +1,7 @@ package org.argeo.cms.ui.rcp; +import java.io.IOException; +import java.io.InputStream; import java.security.PrivilegedAction; import java.util.HashMap; import java.util.Map; @@ -9,12 +11,18 @@ import javax.security.auth.Subject; import javax.security.auth.login.LoginContext; import javax.security.auth.login.LoginException; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.argeo.api.NodeConstants; import org.argeo.cms.ui.CmsApp; import org.argeo.cms.ui.CmsImageManager; +import org.argeo.cms.ui.CmsTheme; import org.argeo.cms.ui.CmsView; import org.argeo.cms.ui.UxContext; import org.argeo.cms.ui.util.CmsUiUtils; +import org.eclipse.e4.ui.css.core.engine.CSSEngine; +import org.eclipse.e4.ui.css.core.engine.CSSErrorHandler; +import org.eclipse.e4.ui.css.swt.engine.CSSSWTEngineImpl; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; @@ -23,7 +31,10 @@ import org.osgi.service.event.Event; import org.osgi.service.event.EventAdmin; /** Runs a {@link CmsApp} as an SWT desktop application. */ +@SuppressWarnings("restriction") public class CmsRcpApp implements CmsView { + private final static Log log = LogFactory.getLog(CmsRcpApp.class); + private Display display; private Shell shell; private CmsApp cmsApp; @@ -32,14 +43,21 @@ public class CmsRcpApp implements CmsView { // CMS View private String uid; private LoginContext loginContext; - + private EventAdmin eventAdmin; + private CSSEngine cssEngine; + public CmsRcpApp() { uid = UUID.randomUUID().toString(); } public void init(Map properties) { + try { + Thread.sleep(5000); + } catch (InterruptedException e) { + // silent + } uiThread = new CmsUiThread(); uiThread.start(); @@ -96,6 +114,26 @@ public class CmsRcpApp implements CmsView { // ui.setData(CmsApp.UI_NAME_PROPERTY, uiName); ui.setLayoutData(CmsUiUtils.fillAll()); + // Styling + CmsTheme theme = CmsTheme.getCmsTheme(ui); + if (theme != null) { + cssEngine = new CSSSWTEngineImpl(display); + for (String path : theme.getSwtCssPaths()) { + try (InputStream in = theme.loadPath(path)) { + cssEngine.parseStyleSheet(in); + } catch (IOException e) { + throw new IllegalStateException("Cannot load stylesheet " + path, e); + } + } + cssEngine.setErrorHandler(new CSSErrorHandler() { + public void error(Exception e) { + log.error("SWT styling error: ", e); + } + }); + applyStyles(shell); + } + shell.layout(true, true); + shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) @@ -159,6 +197,12 @@ public class CmsRcpApp implements CmsView { return false; } + @Override + public void applyStyles(Object node) { + if (cssEngine != null) + cssEngine.applyStyles(node, true); + } + @Override public void sendEvent(String topic, Map properties) { if (properties == null) diff --git a/rcp/org.argeo.eclipse.ui.rcp/src/org/argeo/eclipse/ui/specific/EclipseUiConstants.java b/rcp/org.argeo.eclipse.ui.rcp/src/org/argeo/eclipse/ui/specific/EclipseUiConstants.java new file mode 100644 index 000000000..ac862d794 --- /dev/null +++ b/rcp/org.argeo.eclipse.ui.rcp/src/org/argeo/eclipse/ui/specific/EclipseUiConstants.java @@ -0,0 +1,7 @@ +package org.argeo.eclipse.ui.specific; + +/** Constants which are specific to RWT.*/ +public interface EclipseUiConstants { + final static String CSS_CLASS = "org.eclipse.e4.ui.css.CssClassName"; + final static String MARKUP_SUPPORT = null; +} -- 2.39.5