Introduce body html in theming.
[lgpl/argeo-commons.git] / org.argeo.cms.ui / src / org / argeo / cms / ui / CmsTheme.java
index 37f52a35e5e40722224697f370f1bd2f63231c46..c93991b274e7126bf609284015c01e574fc61a70 100644 (file)
@@ -19,21 +19,36 @@ public interface CmsTheme {
         */
        InputStream getResourceAsStream(String resourceName) throws IOException;
 
+       /** Relative paths to standard web CSS. */
+       Set<String> getWebCssPaths();
+
        /** Relative paths to RAP specific CSS. */
        Set<String> getRapCssPaths();
 
+       /** Relative paths to SWT specific CSS. */
+       Set<String> getSwtCssPaths();
+
        /** Relative paths to images such as icons. */
        Set<String> getImagesPaths();
 
+       /** Relative paths to fonts. */
+       Set<String> getFontsPaths();
+
        /** Tags to be added to the header section of the HTML page. */
        String getHtmlHeaders();
 
+       /** The HTML body to use. */
+       String getBodyHtml();
+
        /** The image registered at this path, or <code>null</code> if not found. */
        Image getImage(String path);
 
        /** The default icon size (typically the smallest). */
        Integer getDefaultIconSize();
 
+       /** Loads one of the relative path provided by the other methods. */
+       InputStream loadPath(String path) throws IOException;
+
        /**
         * And icon with this file name (without the extension), with a best effort to
         * find the appropriate size, or <code>null</code> if not found.
@@ -45,11 +60,16 @@ public interface CmsTheme {
        Image getIcon(String name, Integer preferredSize);
 
        static CmsTheme getCmsTheme(Composite parent) {
-               // find parent shell
-               Shell topShell = parent.getShell();
-               while (topShell.getParent() != null)
-                       topShell = (Shell) topShell.getParent();
-               return (CmsTheme) topShell.getData(CmsTheme.class.getName());
+               CmsTheme theme = (CmsTheme) parent.getData(CmsTheme.class.getName());
+               if (theme == null) {
+                       // find parent shell
+                       Shell topShell = parent.getShell();
+                       while (topShell.getParent() != null)
+                               topShell = (Shell) topShell.getParent();
+                       theme = (CmsTheme) topShell.getData(CmsTheme.class.getName());
+                       parent.setData(CmsTheme.class.getName(), theme);
+               }
+               return theme;
        }
 
        static void registerCmsTheme(Shell shell, CmsTheme theme) {