--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" activate="init" deactivate="destroy" immediate="false" name="Default Suite Footer">
+ <implementation class="org.argeo.suite.ui.DefaultFooter"/>
+ <service>
+ <provide interface="org.argeo.cms.ui.CmsUiProvider"/>
+ </service>
+ <properties entry="config/footer.properties"/>
+</scr:component>
<?xml version="1.0" encoding="UTF-8"?>
-<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" activate="init" immediate="false" name="Default Work Header">
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" activate="init" deactivate="destroy" immediate="false" name="Default Suite Header">
<implementation class="org.argeo.suite.ui.DefaultHeader"/>
<service>
<provide interface="org.argeo.cms.ui.CmsUiProvider"/>
- <provide interface="org.osgi.service.cm.ManagedService"/>
</service>
<properties entry="config/header.properties"/>
</scr:component>
Service-Component:\
OSGI-INF/cmsApp.xml,\
OSGI-INF/header.xml,\
+OSGI-INF/footer.xml,\
OSGI-INF/leadPane.xml,\
OSGI-INF/loginScreen.xml,\
OSGI-INF/recentItems.xml,\
--- /dev/null
+service.pid=argeo.suite.ui.footer
--- /dev/null
+package org.argeo.suite.ui;
+
+import java.util.Map;
+
+import javax.jcr.Node;
+import javax.jcr.RepositoryException;
+
+import org.argeo.cms.ui.CmsUiProvider;
+import org.argeo.cms.ui.util.CmsUiUtils;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.osgi.framework.BundleContext;
+
+/** Footer of a standard Argeo Suite application. */
+public class DefaultFooter implements CmsUiProvider {
+ @Override
+ public Control createUi(Composite parent, Node context) throws RepositoryException {
+ parent.setLayout(CmsUiUtils.noSpaceGridLayout());
+ Composite content = new Composite(parent, SWT.NONE);
+ Control contentControl = createContent(content, context);
+
+ // TODO support and guarantee
+
+ return contentControl;
+ }
+
+ protected Control createContent(Composite parent, Node context) throws RepositoryException {
+ return parent;
+ }
+
+ public void init(BundleContext bundleContext, Map<String, String> properties) {
+ }
+
+ public void destroy(BundleContext bundleContext, Map<String, String> properties) {
+
+ }
+}
package org.argeo.suite.ui;
-import java.util.Dictionary;
import java.util.Map;
-import java.util.TreeMap;
import javax.jcr.Node;
import javax.jcr.RepositoryException;
import org.argeo.cms.ui.CmsUiProvider;
import org.argeo.cms.ui.CmsView;
import org.argeo.cms.ui.util.CmsUiUtils;
-import org.argeo.util.LangUtils;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Label;
import org.osgi.framework.BundleContext;
import org.osgi.framework.wiring.BundleWiring;
-import org.osgi.service.cm.ConfigurationException;
-import org.osgi.service.cm.ManagedService;
-/** HEader of a standard Argeo Suite application. */
-public class DefaultHeader implements CmsUiProvider, ManagedService {
+/** Header of a standard Argeo Suite application. */
+public class DefaultHeader implements CmsUiProvider {
public final static String TITLE_PROPERTY = "argeo.suite.ui.header.title";
- private Map<String, String> properties;
-
private Localized title = null;
@Override
}
public void init(BundleContext bundleContext, Map<String, String> properties) {
- this.properties = new TreeMap<>(properties);
String titleStr = (String) properties.get(TITLE_PROPERTY);
if (titleStr != null) {
if (titleStr.startsWith("%")) {
}
- @Override
- public void updated(Dictionary<String, ?> properties) throws ConfigurationException {
- if (properties != null)
- this.properties.putAll(LangUtils.dictToStringMap(properties));
- }
-
public Localized getTitle() {
return title;
}
private String pidPrefix;
private String headerPid;
+ private String footerPid;
private String leadPanePid;
private String loginScreenPid;
throw new IllegalArgumentException("PID prefix must be set.");
headerPid = pidPrefix + "header";
+ footerPid = pidPrefix + "footer";
leadPanePid = pidPrefix + "leadPane";
loginScreenPid = pidPrefix + "loginScreen";
}
SuiteUi ui = (SuiteUi) parent;
CmsView cmsView = CmsView.getCmsView(parent);
CmsUiProvider headerUiProvider = findUiProvider(headerPid);
+ CmsUiProvider footerUiProvider = findUiProvider(footerPid);
Localized appTitle = null;
if (headerUiProvider instanceof DefaultHeader) {
appTitle = ((DefaultHeader) headerUiProvider).getTitle();
if (cmsView.isAnonymous() && publicBasePath == null) {// internal app, must login
ui.logout();
- refreshPart(headerUiProvider, ui.getHeader(), context);
+ if (headerUiProvider != null)
+ refreshPart(headerUiProvider, ui.getHeader(), context);
ui.refreshBelowHeader(false);
refreshPart(findUiProvider(loginScreenPid), ui.getBelowHeader(), context);
+ if (footerUiProvider != null)
+ refreshPart(footerUiProvider, ui.getFooter(), context);
ui.layout(true, true);
setState(ui, LOGIN);
} else {
if (context == null)
context = ui.getUserDir();
- refreshPart(headerUiProvider, ui.getHeader(), context);
+ if (headerUiProvider != null)
+ refreshPart(headerUiProvider, ui.getHeader(), context);
ui.refreshBelowHeader(true);
for (String key : layersByPid.keySet()) {
SuiteLayer layer = layersByPid.get(key).get();
ui.addLayer(key, layer);
}
refreshPart(findUiProvider(leadPanePid), ui.getLeadPane(), context);
+ if (footerUiProvider != null)
+ refreshPart(footerUiProvider, ui.getFooter(), context);
ui.layout(true, true);
setState(parent, state != null ? state : defaultLayerPid);
}
private CmsUiProvider findUiProvider(String pid) {
if (!uiProvidersByPid.containsKey(pid))
- throw new IllegalArgumentException("No UI provider registered as " + pid);
+ return null;
return uiProvidersByPid.get(pid).get();
}
private SuiteLayer findLayer(String pid) {
if (!layersByPid.containsKey(pid))
- throw new IllegalArgumentException("No UI provider registered as " + pid);
+ return null;
return layersByPid.get(pid).get();
}
/** Styles used by Argeo Suite work UI. */
public enum SuiteStyle implements CmsStyle {
- // Header
+ // header
header, headerTitle, headerMenu, headerMenuItem,
- // Recent items
+ // footer
+ footer,
+ // recent items
recentItems,
- // Lead pane
+ // lead pane
leadPane, leadPaneItem, leadPaneSectionTitle, leadPaneSubSectionTitle,
- // Group composite
+ // group composite
titleContainer, titleLabel, subTitleLabel, formLine, formColumn, navigationBar, navigationTitle, navigationButton,
- // Forms elements
+ // forms elements
simpleLabel, simpleText, simpleInput,
// table
titleCell,
workArea,
// tabbed area
mainTabBody, mainTabSelected, mainTab,
- // Buttons
+ // buttons
inlineButton;
@Override
private Localized title;
private Composite header;
+ private Composite footer;
private Composite belowHeader;
private Composite leadPane;
private Composite dynamicArea;
belowHeader = new Composite(this, SWT.NONE);
belowHeader.setLayoutData(CmsUiUtils.fillAll());
+
+ footer = new Composite(this, SWT.NONE);
+ footer.setLayout(CmsUiUtils.noSpaceGridLayout());
+ CmsUiUtils.style(header, SuiteStyle.header);
+ footer.setLayoutData(CmsUiUtils.fillWidth());
}
public void refreshBelowHeader(boolean initApp) {
return header;
}
+ Composite getFooter() {
+ return footer;
+ }
+
Composite getLeadPane() {
return leadPane;
}