Improve Argeo Suite theming.
authorMathieu Baudier <mbaudier@argeo.org>
Sun, 4 Oct 2020 10:43:53 +0000 (12:43 +0200)
committerMathieu Baudier <mbaudier@argeo.org>
Sun, 4 Oct 2020 10:43:53 +0000 (12:43 +0200)
52 files changed:
org.argeo.suite.theme.default/.project
org.argeo.suite.theme.default/OSGI-INF/cmsTheme.xml [new file with mode: 0644]
org.argeo.suite.theme.default/bnd.bnd
org.argeo.suite.theme.default/build.properties
org.argeo.suite.theme.default/icons/types/16/add.png [new file with mode: 0644]
org.argeo.suite.theme.default/icons/types/16/dashboard.png [new file with mode: 0644]
org.argeo.suite.theme.default/icons/types/16/delete.png [new file with mode: 0644]
org.argeo.suite.theme.default/icons/types/16/document.png [new file with mode: 0644]
org.argeo.suite.theme.default/icons/types/16/documents.png [new file with mode: 0644]
org.argeo.suite.theme.default/icons/types/16/folder.png [new file with mode: 0644]
org.argeo.suite.theme.default/icons/types/16/logout.png [new file with mode: 0644]
org.argeo.suite.theme.default/icons/types/16/organisation.png [new file with mode: 0644]
org.argeo.suite.theme.default/icons/types/16/people.png [new file with mode: 0644]
org.argeo.suite.theme.default/icons/types/16/person.png [new file with mode: 0644]
org.argeo.suite.theme.default/icons/types/16/refresh.png [new file with mode: 0644]
org.argeo.suite.theme.default/icons/types/16/save.png [new file with mode: 0644]
org.argeo.suite.theme.default/icons/types/16/search.png [new file with mode: 0644]
org.argeo.suite.theme.default/icons/types/16/tag.png [new file with mode: 0644]
org.argeo.suite.theme.default/icons/types/16/task.png [new file with mode: 0644]
org.argeo.suite.theme.default/icons/types/32/add.png [new file with mode: 0644]
org.argeo.suite.theme.default/icons/types/32/dashboard.png [new file with mode: 0644]
org.argeo.suite.theme.default/icons/types/32/delete.png [new file with mode: 0644]
org.argeo.suite.theme.default/icons/types/32/document.png [new file with mode: 0644]
org.argeo.suite.theme.default/icons/types/32/documents.png [new file with mode: 0644]
org.argeo.suite.theme.default/icons/types/32/folder.png [new file with mode: 0644]
org.argeo.suite.theme.default/icons/types/32/logout.png [new file with mode: 0644]
org.argeo.suite.theme.default/icons/types/32/organisation.png [new file with mode: 0644]
org.argeo.suite.theme.default/icons/types/32/people.png [new file with mode: 0644]
org.argeo.suite.theme.default/icons/types/32/person.png [new file with mode: 0644]
org.argeo.suite.theme.default/icons/types/32/save.png [new file with mode: 0644]
org.argeo.suite.theme.default/icons/types/32/search.png [new file with mode: 0644]
org.argeo.suite.theme.default/icons/types/32/tag.png [new file with mode: 0644]
org.argeo.suite.theme.default/icons/types/32/task.png [new file with mode: 0644]
org.argeo.suite.theme.default/rap/work.css
org.argeo.suite.ui.rap/OSGI-INF/argeoSuiteWebApp.xml [deleted file]
org.argeo.suite.ui.rap/OSGI-INF/cmsWebApp.xml [new file with mode: 0644]
org.argeo.suite.ui.rap/bnd.bnd
org.argeo.suite.ui.rap/build.properties
org.argeo.suite.ui/OSGI-INF/argeoSuiteApp.xml [deleted file]
org.argeo.suite.ui/OSGI-INF/cmsApp.xml [new file with mode: 0644]
org.argeo.suite.ui/OSGI-INF/l10n/bundle.properties
org.argeo.suite.ui/OSGI-INF/leadPane.xml
org.argeo.suite.ui/OSGI-INF/workHeader.xml
org.argeo.suite.ui/bnd.bnd
org.argeo.suite.ui/build.properties
org.argeo.suite.ui/src/org/argeo/suite/ui/ArgeoSuiteApp.java
org.argeo.suite.ui/src/org/argeo/suite/ui/ArgeoSuiteIcon.java [new file with mode: 0644]
org.argeo.suite.ui/src/org/argeo/suite/ui/ArgeoSuiteUi.java
org.argeo.suite.ui/src/org/argeo/suite/ui/DefaultLeadPane.java
org.argeo.suite.ui/src/org/argeo/suite/ui/RecentItems.java [new file with mode: 0644]
org.argeo.suite.ui/src/org/argeo/suite/ui/WorkMsg.java
sdk/argeo-suite-rap.properties

index 5453bb16ee3f2844ebae0dc6cc806500f932912e..d1571557a502f4ff5b0f56dd34cc8d019201c6ea 100644 (file)
                        <arguments>
                        </arguments>
                </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.pde.ds.core.builder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
        </buildSpec>
        <natures>
                <nature>org.eclipse.pde.PluginNature</nature>
diff --git a/org.argeo.suite.theme.default/OSGI-INF/cmsTheme.xml b/org.argeo.suite.theme.default/OSGI-INF/cmsTheme.xml
new file mode 100644 (file)
index 0000000..66b8c44
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" activate="init" deactivate="destroy" name="Argeo Suite Default Theme">
+   <implementation class="org.argeo.cms.ui.util.BundleCmsTheme"/>
+   <service>
+      <provide interface="org.argeo.cms.ui.CmsTheme"/>
+   </service>
+</scr:component>
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..6c4a97c1560899d6ed25fc587ee6b246d98a431f 100644 (file)
@@ -0,0 +1,6 @@
+Service-Component:\
+OSGI-INF/cmsTheme.xml
+
+Import-Package:\
+org.argeo.cms.ui.util,\
+*
\ No newline at end of file
index 5f22cdd4480f64cd4765eb82177bb9257920cc0b..bf450caba0a31366535499160a0d7dbbf1cbd160 100644 (file)
@@ -1 +1,2 @@
-bin.includes = META-INF/
+bin.includes = META-INF/,\
+               OSGI-INF/cmsTheme.xml
diff --git a/org.argeo.suite.theme.default/icons/types/16/add.png b/org.argeo.suite.theme.default/icons/types/16/add.png
new file mode 100644 (file)
index 0000000..5c06bf0
Binary files /dev/null and b/org.argeo.suite.theme.default/icons/types/16/add.png differ
diff --git a/org.argeo.suite.theme.default/icons/types/16/dashboard.png b/org.argeo.suite.theme.default/icons/types/16/dashboard.png
new file mode 100644 (file)
index 0000000..1235592
Binary files /dev/null and b/org.argeo.suite.theme.default/icons/types/16/dashboard.png differ
diff --git a/org.argeo.suite.theme.default/icons/types/16/delete.png b/org.argeo.suite.theme.default/icons/types/16/delete.png
new file mode 100644 (file)
index 0000000..676a39d
Binary files /dev/null and b/org.argeo.suite.theme.default/icons/types/16/delete.png differ
diff --git a/org.argeo.suite.theme.default/icons/types/16/document.png b/org.argeo.suite.theme.default/icons/types/16/document.png
new file mode 100644 (file)
index 0000000..b168263
Binary files /dev/null and b/org.argeo.suite.theme.default/icons/types/16/document.png differ
diff --git a/org.argeo.suite.theme.default/icons/types/16/documents.png b/org.argeo.suite.theme.default/icons/types/16/documents.png
new file mode 100644 (file)
index 0000000..56deec5
Binary files /dev/null and b/org.argeo.suite.theme.default/icons/types/16/documents.png differ
diff --git a/org.argeo.suite.theme.default/icons/types/16/folder.png b/org.argeo.suite.theme.default/icons/types/16/folder.png
new file mode 100644 (file)
index 0000000..fefbb40
Binary files /dev/null and b/org.argeo.suite.theme.default/icons/types/16/folder.png differ
diff --git a/org.argeo.suite.theme.default/icons/types/16/logout.png b/org.argeo.suite.theme.default/icons/types/16/logout.png
new file mode 100644 (file)
index 0000000..f685ea9
Binary files /dev/null and b/org.argeo.suite.theme.default/icons/types/16/logout.png differ
diff --git a/org.argeo.suite.theme.default/icons/types/16/organisation.png b/org.argeo.suite.theme.default/icons/types/16/organisation.png
new file mode 100644 (file)
index 0000000..2e81a6c
Binary files /dev/null and b/org.argeo.suite.theme.default/icons/types/16/organisation.png differ
diff --git a/org.argeo.suite.theme.default/icons/types/16/people.png b/org.argeo.suite.theme.default/icons/types/16/people.png
new file mode 100644 (file)
index 0000000..925d571
Binary files /dev/null and b/org.argeo.suite.theme.default/icons/types/16/people.png differ
diff --git a/org.argeo.suite.theme.default/icons/types/16/person.png b/org.argeo.suite.theme.default/icons/types/16/person.png
new file mode 100644 (file)
index 0000000..8f518e1
Binary files /dev/null and b/org.argeo.suite.theme.default/icons/types/16/person.png differ
diff --git a/org.argeo.suite.theme.default/icons/types/16/refresh.png b/org.argeo.suite.theme.default/icons/types/16/refresh.png
new file mode 100644 (file)
index 0000000..0d39107
Binary files /dev/null and b/org.argeo.suite.theme.default/icons/types/16/refresh.png differ
diff --git a/org.argeo.suite.theme.default/icons/types/16/save.png b/org.argeo.suite.theme.default/icons/types/16/save.png
new file mode 100644 (file)
index 0000000..1c58ada
Binary files /dev/null and b/org.argeo.suite.theme.default/icons/types/16/save.png differ
diff --git a/org.argeo.suite.theme.default/icons/types/16/search.png b/org.argeo.suite.theme.default/icons/types/16/search.png
new file mode 100644 (file)
index 0000000..d32874b
Binary files /dev/null and b/org.argeo.suite.theme.default/icons/types/16/search.png differ
diff --git a/org.argeo.suite.theme.default/icons/types/16/tag.png b/org.argeo.suite.theme.default/icons/types/16/tag.png
new file mode 100644 (file)
index 0000000..cefdbb9
Binary files /dev/null and b/org.argeo.suite.theme.default/icons/types/16/tag.png differ
diff --git a/org.argeo.suite.theme.default/icons/types/16/task.png b/org.argeo.suite.theme.default/icons/types/16/task.png
new file mode 100644 (file)
index 0000000..eeb7e01
Binary files /dev/null and b/org.argeo.suite.theme.default/icons/types/16/task.png differ
diff --git a/org.argeo.suite.theme.default/icons/types/32/add.png b/org.argeo.suite.theme.default/icons/types/32/add.png
new file mode 100644 (file)
index 0000000..15feb20
Binary files /dev/null and b/org.argeo.suite.theme.default/icons/types/32/add.png differ
diff --git a/org.argeo.suite.theme.default/icons/types/32/dashboard.png b/org.argeo.suite.theme.default/icons/types/32/dashboard.png
new file mode 100644 (file)
index 0000000..4c24f43
Binary files /dev/null and b/org.argeo.suite.theme.default/icons/types/32/dashboard.png differ
diff --git a/org.argeo.suite.theme.default/icons/types/32/delete.png b/org.argeo.suite.theme.default/icons/types/32/delete.png
new file mode 100644 (file)
index 0000000..c74ad1a
Binary files /dev/null and b/org.argeo.suite.theme.default/icons/types/32/delete.png differ
diff --git a/org.argeo.suite.theme.default/icons/types/32/document.png b/org.argeo.suite.theme.default/icons/types/32/document.png
new file mode 100644 (file)
index 0000000..a4653fa
Binary files /dev/null and b/org.argeo.suite.theme.default/icons/types/32/document.png differ
diff --git a/org.argeo.suite.theme.default/icons/types/32/documents.png b/org.argeo.suite.theme.default/icons/types/32/documents.png
new file mode 100644 (file)
index 0000000..29db972
Binary files /dev/null and b/org.argeo.suite.theme.default/icons/types/32/documents.png differ
diff --git a/org.argeo.suite.theme.default/icons/types/32/folder.png b/org.argeo.suite.theme.default/icons/types/32/folder.png
new file mode 100644 (file)
index 0000000..b98fc84
Binary files /dev/null and b/org.argeo.suite.theme.default/icons/types/32/folder.png differ
diff --git a/org.argeo.suite.theme.default/icons/types/32/logout.png b/org.argeo.suite.theme.default/icons/types/32/logout.png
new file mode 100644 (file)
index 0000000..2d8024f
Binary files /dev/null and b/org.argeo.suite.theme.default/icons/types/32/logout.png differ
diff --git a/org.argeo.suite.theme.default/icons/types/32/organisation.png b/org.argeo.suite.theme.default/icons/types/32/organisation.png
new file mode 100644 (file)
index 0000000..62890c2
Binary files /dev/null and b/org.argeo.suite.theme.default/icons/types/32/organisation.png differ
diff --git a/org.argeo.suite.theme.default/icons/types/32/people.png b/org.argeo.suite.theme.default/icons/types/32/people.png
new file mode 100644 (file)
index 0000000..5f53288
Binary files /dev/null and b/org.argeo.suite.theme.default/icons/types/32/people.png differ
diff --git a/org.argeo.suite.theme.default/icons/types/32/person.png b/org.argeo.suite.theme.default/icons/types/32/person.png
new file mode 100644 (file)
index 0000000..a6c5f1d
Binary files /dev/null and b/org.argeo.suite.theme.default/icons/types/32/person.png differ
diff --git a/org.argeo.suite.theme.default/icons/types/32/save.png b/org.argeo.suite.theme.default/icons/types/32/save.png
new file mode 100644 (file)
index 0000000..d7597d1
Binary files /dev/null and b/org.argeo.suite.theme.default/icons/types/32/save.png differ
diff --git a/org.argeo.suite.theme.default/icons/types/32/search.png b/org.argeo.suite.theme.default/icons/types/32/search.png
new file mode 100644 (file)
index 0000000..8d89a4a
Binary files /dev/null and b/org.argeo.suite.theme.default/icons/types/32/search.png differ
diff --git a/org.argeo.suite.theme.default/icons/types/32/tag.png b/org.argeo.suite.theme.default/icons/types/32/tag.png
new file mode 100644 (file)
index 0000000..907e216
Binary files /dev/null and b/org.argeo.suite.theme.default/icons/types/32/tag.png differ
diff --git a/org.argeo.suite.theme.default/icons/types/32/task.png b/org.argeo.suite.theme.default/icons/types/32/task.png
new file mode 100644 (file)
index 0000000..b6bd243
Binary files /dev/null and b/org.argeo.suite.theme.default/icons/types/32/task.png differ
index 07589dac10c1561dc5a7ae6a1c273fd0edeefab0..ab6bafdd8baca7e59671a89e8e14267f9e316c23 100644 (file)
@@ -8,4 +8,10 @@
        font: bold 14px sans-serif;
        color: white;
        background-color: #204a87;
+}
+
+Button.argeo-work-leadPane {
+       font: bold 14px sans-serif;
+       color: white;
+       background-color: white;
 }
\ No newline at end of file
diff --git a/org.argeo.suite.ui.rap/OSGI-INF/argeoSuiteWebApp.xml b/org.argeo.suite.ui.rap/OSGI-INF/argeoSuiteWebApp.xml
deleted file mode 100644 (file)
index 9d316f4..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" activate="init" deactivate="destroy" name="Argeo Suite Web App">
-   <implementation class="org.argeo.cms.web.CmsWebApp"/>
-   <property name="contextName" type="String" value="argeo"/>
-   <property name="argeo.cms.theme.bundle" type="String" value="org.argeo.suite.theme.default"/>
-   <service>
-      <provide interface="org.eclipse.rap.rwt.application.ApplicationConfiguration"/>
-   </service>
-   <reference bind="setCmsApp" cardinality="1..1" interface="org.argeo.cms.ui.CmsApp" name="CmsApp" policy="static" target="(contextName=argeo)"/>
-</scr:component>
diff --git a/org.argeo.suite.ui.rap/OSGI-INF/cmsWebApp.xml b/org.argeo.suite.ui.rap/OSGI-INF/cmsWebApp.xml
new file mode 100644 (file)
index 0000000..1d13e20
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" activate="init" deactivate="destroy" name="Argeo Suite Web App">
+   <implementation class="org.argeo.cms.web.CmsWebApp"/>
+   <property name="contextName" type="String" value="argeo"/>
+   <reference bind="setCmsApp" cardinality="1..1" interface="org.argeo.cms.ui.CmsApp" name="CmsApp" policy="dynamic" target="(contextName=argeo)" unbind="unsetCmsApp"/>
+</scr:component>
index 121f1abe6b7f543032513d0bd16af39d0c4d2274..35b671bafa59bd412e66fdeb353d40848de6f129 100644 (file)
@@ -1,4 +1,4 @@
-Service-Component: OSGI-INF/argeoSuiteWebApp.xml
+Service-Component: OSGI-INF/cmsWebApp.xml
 
 Import-Package:\
 org.argeo.cms.web,\
index 8d783b3e83cff62e56c213b137e674682175cd45..6210e849b591d26fa9e17057ad3e8d09511917b6 100644 (file)
@@ -1,5 +1,5 @@
 output.. = bin/
 bin.includes = META-INF/,\
                .,\
-               OSGI-INF/argeoSuiteWebApp.xml
+               OSGI-INF/
 source.. = src/
diff --git a/org.argeo.suite.ui/OSGI-INF/argeoSuiteApp.xml b/org.argeo.suite.ui/OSGI-INF/argeoSuiteApp.xml
deleted file mode 100644 (file)
index d046f6b..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="Argeo Suite App">
-   <implementation class="org.argeo.suite.ui.ArgeoSuiteApp"/>
-   <property name="contextName" type="String" value="argeo"/>
-   <service>
-      <provide interface="org.argeo.cms.ui.CmsApp"/>
-   </service>
-   <reference bind="addUiProvider" cardinality="1..n" interface="org.argeo.cms.ui.CmsUiProvider" name="CmsUiProvider" policy="static" unbind="removeUiProvider"/>
-</scr:component>
diff --git a/org.argeo.suite.ui/OSGI-INF/cmsApp.xml b/org.argeo.suite.ui/OSGI-INF/cmsApp.xml
new file mode 100644 (file)
index 0000000..ab3a0b7
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" activate="init" deactivate="destroy" name="Argeo Suite App">
+   <implementation class="org.argeo.suite.ui.ArgeoSuiteApp"/>
+   <property name="contextName" type="String" value="argeo"/>
+   <service>
+      <provide interface="org.argeo.cms.ui.CmsApp"/>
+   </service>
+   <reference bind="addUiProvider" cardinality="0..n" interface="org.argeo.cms.ui.CmsUiProvider" name="CmsUiProvider" policy="dynamic" unbind="removeUiProvider"/>
+   <reference bind="addTheme" cardinality="0..n" interface="org.argeo.cms.ui.CmsTheme" name="CmsTheme" policy="dynamic" unbind="removeTheme"/>
+</scr:component>
index 0b114306f4a1c173ba361d15312adf4e572b95d9..cec63ab36db1a345aff3cebd9c6da94a8699dca7 100644 (file)
@@ -1,3 +1,5 @@
 dashboard=dashboard
+people=contacts management
+documents=documents
 
 defaultWorkAppTitle=Argeo Suite
\ No newline at end of file
index bf492a3e182b0db22a526080b81532a240d6f00b..cf0f469b6a530e42359a9f9ce09cd5f210211975 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="Default Lead Pane">
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" activate="init" immediate="false" name="Default Lead Pane">
    <implementation class="org.argeo.suite.ui.DefaultLeadPane"/>
    <service>
       <provide interface="org.argeo.cms.ui.CmsUiProvider"/>
index 3339b477a1d5706d4f002a7a26de2406735bb052..f4167509d4e45ff8ffa425699fab60620198dd2d 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" activate="init" name="Default Work Header">
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" activate="init" immediate="false" name="Default Work Header">
    <implementation class="org.argeo.suite.ui.DefaultHeader"/>
    <service>
       <provide interface="org.argeo.cms.ui.CmsUiProvider"/>
index 8fd262a1c944be9f1211fbff0518730f6f3ed20d..ecf6fe8db0c965cd5671dc6ae4f8faed2d104bfd 100644 (file)
@@ -1,5 +1,5 @@
 Service-Component:\
-OSGI-INF/argeoSuiteApp.xml,\
+OSGI-INF/cmsApp.xml,\
 OSGI-INF/workHeader.xml,\
 OSGI-INF/leadPane.xml
 
index 2e0c968aa7d8cca709b01eac0b16f1fceb1a3e52..6210e849b591d26fa9e17057ad3e8d09511917b6 100644 (file)
@@ -1,7 +1,5 @@
 output.. = bin/
 bin.includes = META-INF/,\
                .,\
-               OSGI-INF/argeoSuiteApp.xml,\
-               OSGI-INF/workHeader.xml,\
-               OSGI-INF/leadPane.xml
+               OSGI-INF/
 source.. = src/
index 7aebdc20fde6a1df5918009f31acb2610746b6a1..b669d45aa7078563f56065741428f986466381b4 100644 (file)
@@ -9,24 +9,39 @@ import javax.jcr.Node;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.argeo.cms.ui.CmsApp;
+import org.argeo.cms.ui.AbstractCmsApp;
+import org.argeo.cms.ui.CmsTheme;
 import org.argeo.cms.ui.CmsUiProvider;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Composite;
 import org.osgi.framework.Constants;
 
-public class ArgeoSuiteApp implements CmsApp {
+/** The Argeo Suite App. */
+public class ArgeoSuiteApp extends AbstractCmsApp {
        private final static Log log = LogFactory.getLog(ArgeoSuiteApp.class);
+
        public final static String PID_PREFIX = "argeo.work.";
        public final static String HEADER_PID = PID_PREFIX + "header";
        public final static String LEAD_PANE_PID = PID_PREFIX + "leadPane";
 
        private final static String DEFAULT_UI_NAME = "work";
+       private final static String DEFAULT_THEME_ID = "org.argeo.suite.theme.default";
 
        private ArgeoSuiteUi argeoSuiteUi;
 
        private Map<String, CmsUiProvider> uiProviders = new TreeMap<>();
 
+       public void init(Map<String, String> properties) {
+               if (log.isDebugEnabled())
+                       log.info("Argeo Suite App started");
+       }
+
+       public void destroy(Map<String, String> properties) {
+               if (log.isDebugEnabled())
+                       log.info("Argeo Suite App stopped");
+
+       }
+
        @Override
        public Set<String> getUiNames() {
                HashSet<String> uiNames = new HashSet<>();
@@ -37,12 +52,21 @@ public class ArgeoSuiteApp implements CmsApp {
        @Override
        public void initUi(String uiName, Composite parent) {
                if (DEFAULT_UI_NAME.equals(uiName)) {
+                       CmsTheme theme = getTheme(uiName);
+                       if (theme != null)
+                               CmsTheme.registerCmsTheme(parent.getShell(), theme);
                        argeoSuiteUi = new ArgeoSuiteUi(parent, SWT.NONE);
                        refresh(uiName);
                }
 
        }
 
+       @Override
+       public String getThemeId(String uiName) {
+               // TODO make it configurable
+               return DEFAULT_THEME_ID;
+       }
+
        public void refresh(String uiName) {
                if (DEFAULT_UI_NAME.equals(uiName)) {
                        Node context = null;
@@ -57,6 +81,8 @@ public class ArgeoSuiteApp implements CmsApp {
                        log.error("No service pid found for " + uiProvider.getClass() + ", " + properties);
                } else {
                        uiProviders.put(servicePid, uiProvider);
+                       if (log.isDebugEnabled())
+                               log.debug("Added UI provider " + servicePid + " to CMS app.");
                }
 
        }
diff --git a/org.argeo.suite.ui/src/org/argeo/suite/ui/ArgeoSuiteIcon.java b/org.argeo.suite.ui/src/org/argeo/suite/ui/ArgeoSuiteIcon.java
new file mode 100644 (file)
index 0000000..220e879
--- /dev/null
@@ -0,0 +1,14 @@
+package org.argeo.suite.ui;
+
+import org.argeo.cms.ui.util.CmsIcon;
+
+/** Icon names used by Argeo Suite. */
+public enum ArgeoSuiteIcon implements CmsIcon {
+       add, save, search, delete, logout, dashboard,
+       // people
+       people, person, organisation,
+       // library
+       documents, document, folder,
+       // misc
+       task, tag;
+}
index 2505c4596e60185c96ccd3e272b723b01a95f718..a2caa15b17138118df01e78c53044a96b5f5e9af 100644 (file)
@@ -1,10 +1,14 @@
 package org.argeo.suite.ui;
 
+import static org.argeo.suite.ui.ArgeoSuiteIcon.dashboard;
+
+import org.argeo.cms.ui.CmsTheme;
 import org.argeo.cms.ui.util.CmsUiUtils;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.CTabFolder;
 import org.eclipse.swt.custom.CTabItem;
 import org.eclipse.swt.custom.SashForm;
+import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.layout.RowLayout;
 import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
@@ -17,11 +21,15 @@ public class ArgeoSuiteUi {
 
        private SashForm dynamicArea;
        private Composite entryArea;
-       private CTabFolder editorArea;
+       private Composite editorArea;
+       private CTabFolder editorTabFolder;
 
        private Composite defaultBody;
 
+       private CmsTheme theme;
+
        public ArgeoSuiteUi(Composite parent, int style) {
+               theme = CmsTheme.getCmsTheme(parent);
                this.parent = parent;
                parent.setLayout(CmsUiUtils.noSpaceGridLayout());
 
@@ -45,25 +53,39 @@ public class ArgeoSuiteUi {
                dynamicArea.setLayoutData(CmsUiUtils.fillAll());
 
                if (SWT.RIGHT_TO_LEFT == (style & SWT.RIGHT_TO_LEFT)) {// arabic, hebrew, etc.
-                       editorArea = new CTabFolder(dynamicArea, SWT.NONE);
-                       entryArea = new Composite(dynamicArea, SWT.NONE);
+                       editorArea = new Composite(dynamicArea, SWT.BORDER);
+                       entryArea = new Composite(dynamicArea, SWT.BORDER);
                } else {
                        entryArea = new Composite(dynamicArea, SWT.NONE);
-                       editorArea = new CTabFolder(dynamicArea, SWT.NONE);
+                       editorArea = new Composite(dynamicArea, SWT.NONE);
                }
                int[] weights = new int[] { 2000, 8000 };
                dynamicArea.setWeights(weights);
-
-               Composite buttons = new Composite(editorArea, SWT.NONE);
-               buttons.setLayout(new RowLayout(SWT.HORIZONTAL));
-               Button delete = new Button(buttons, SWT.PUSH);
-               delete.setText("Delete");
-               editorArea.setTopRight(buttons);
-
-               CTabItem defaultTab = new CTabItem(editorArea, SWT.NONE);
-               defaultTab.setText("Home");
-               defaultBody = new Composite(editorArea, SWT.NONE);
+               editorArea.setLayout(new GridLayout());
+
+               // TODO make it dynamic
+               RecentItems recentItems = new RecentItems();
+               recentItems.createUiPart(entryArea);
+
+               editorTabFolder = new CTabFolder(editorArea, SWT.NONE);
+               editorTabFolder.setLayoutData(CmsUiUtils.fillAll());
+               Composite buttons = new Composite(editorTabFolder, SWT.NONE);
+               RowLayout buttonsLayout = new RowLayout(SWT.HORIZONTAL);
+               buttonsLayout.pack = false;
+               buttons.setLayout(buttonsLayout);
+               Button delete = new Button(buttons, SWT.FLAT);
+               delete.setImage(ArgeoSuiteIcon.delete.getSmallIcon(theme));
+               // int size = ArgeoSuiteIcon.delete.getSmallIconSize();
+               // delete.setBounds(delete.getBounds().x,delete.getBounds().y,size,size);
+               // delete.setSize(size, size);
+               editorTabFolder.setTopRight(buttons);
+
+               CTabItem defaultTab = new CTabItem(editorTabFolder, SWT.NONE);
+               // defaultTab.setText("Home");
+               defaultTab.setImage(dashboard.getSmallIcon(theme));
+               defaultBody = new Composite(editorTabFolder, SWT.NONE);
                defaultTab.setControl(defaultBody);
+               editorTabFolder.setSelection(defaultTab);
 
                // editorArea.setSingle(true);
        }
@@ -88,8 +110,8 @@ public class ArgeoSuiteUi {
                return entryArea;
        }
 
-       CTabFolder getEditorArea() {
-               return editorArea;
+       CTabFolder getEditorTabFolder() {
+               return editorTabFolder;
        }
 
        Composite getDefaultBody() {
index 73b81b0248105b4788ca99195b1745e652fdccde..d84f69d5dd7b2a682ccd845c2c4fe1b857e5d655 100644 (file)
@@ -1,30 +1,50 @@
 package org.argeo.suite.ui;
 
 import java.util.Dictionary;
+import java.util.Map;
 
 import javax.jcr.Node;
 import javax.jcr.RepositoryException;
 
+import org.argeo.cms.Localized;
+import org.argeo.cms.ui.CmsTheme;
 import org.argeo.cms.ui.CmsUiProvider;
+import org.argeo.cms.ui.util.CmsIcon;
 import org.argeo.cms.ui.util.CmsUiUtils;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Label;
 import org.osgi.service.cm.ConfigurationException;
 import org.osgi.service.cm.ManagedService;
 
+/** Side pane listing various perspectives. */
 public class DefaultLeadPane implements CmsUiProvider, ManagedService {
+       private CmsTheme theme;
 
        @Override
-       public Control createUi(Composite parent, Node context) throws RepositoryException {
-               parent.setLayout(new GridLayout());
+       public Control createUi(Composite parent, Node node) throws RepositoryException {
+               theme = CmsTheme.getCmsTheme(parent);
+               GridLayout layout = new GridLayout();
+               layout.verticalSpacing = 10;
+               layout.marginTop = 10;
+               layout.marginLeft = 10;
+               layout.marginRight = 10;
+               parent.setLayout(layout);
+
+               Button dashboardB = createButton(parent, WorkMsg.dashboard, ArgeoSuiteIcon.dashboard);
+               createButton(parent, WorkMsg.people, ArgeoSuiteIcon.people);
+               createButton(parent, WorkMsg.documents, ArgeoSuiteIcon.documents);
+               return dashboardB;
+       }
 
-               Label dashboard = new Label(parent, SWT.NONE);
-               CmsUiUtils.style(dashboard, WorkStyles.leadPane);
-               dashboard.setText(WorkMsg.dashboard.lead());
-               return dashboard;
+       protected Button createButton(Composite parent, Localized msg, CmsIcon icon) {
+               Button button = new Button(parent, SWT.FLAT);
+               CmsUiUtils.style(button, WorkStyles.leadPane);
+               button.setToolTipText(msg.lead());
+               button.setImage(icon.getBigIcon(theme));
+               return button;
        }
 
        @Override
@@ -33,4 +53,7 @@ public class DefaultLeadPane implements CmsUiProvider, ManagedService {
 
        }
 
+       public void init(Map<String, String> properties) {
+
+       }
 }
diff --git a/org.argeo.suite.ui/src/org/argeo/suite/ui/RecentItems.java b/org.argeo.suite.ui/src/org/argeo/suite/ui/RecentItems.java
new file mode 100644 (file)
index 0000000..230a0da
--- /dev/null
@@ -0,0 +1,41 @@
+package org.argeo.suite.ui;
+
+import javax.jcr.Node;
+import javax.jcr.RepositoryException;
+
+import org.argeo.cms.ui.CmsTheme;
+import org.argeo.cms.ui.CmsUiProvider;
+import org.argeo.cms.ui.util.CmsUiUtils;
+import org.argeo.connect.ui.widgets.DelayedText;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+
+/** List recent items. */
+public class RecentItems implements CmsUiProvider {
+       int SEARCH_TEXT_DELAY = 800;
+       private CmsTheme theme;
+
+       @Override
+       public Control createUi(Composite parent, Node context) throws RepositoryException {
+               theme = CmsTheme.getCmsTheme(parent);
+               parent.setLayout(new GridLayout());
+
+               Composite top = new Composite(parent, SWT.NONE);
+               top.setLayoutData(CmsUiUtils.fillWidth());
+               top.setLayout(new GridLayout(2, false));
+
+               Label search = new Label(top, SWT.NONE);
+               search.setImage(ArgeoSuiteIcon.search.getSmallIcon(theme));
+               DelayedText delayedText = new DelayedText(top, SWT.SINGLE | SWT.BORDER, SEARCH_TEXT_DELAY);
+               delayedText.getText().setLayoutData(CmsUiUtils.fillWidth());
+
+               TableViewer viewer = new TableViewer(parent);
+               viewer.getTable().setLayoutData(CmsUiUtils.fillAll());
+               return delayedText.getText();
+       }
+
+}
index 679ad5072820eefefdd0d75a71bc52e5e22d562c..f651d9f1bcd456c04546615eccb185df90159405 100644 (file)
@@ -4,5 +4,5 @@ import org.argeo.cms.Localized;
 
 /** Localized messages. */
 public enum WorkMsg implements Localized {
-       dashboard;
+       dashboard,people,documents;
 }
index 4c98fc0fca1101e4088d8d76a671e9670a77237b..34153a89215ae8d62ce6ffa167a4c3160085c63a 100644 (file)
@@ -13,6 +13,7 @@ org.argeo.cms
 argeo.osgi.start.5.suite=\
 org.argeo.suite.cms,\
 org.argeo.suite.ui,\
+org.argeo.suite.theme.default,\
 org.argeo.suite.ui.rap
 
 # Local