From: Mathieu Baudier Date: Sun, 7 Feb 2021 11:54:46 +0000 (+0100) Subject: Finalize UI lifecycle. X-Git-Tag: argeo-suite-2.1.19~4^2 X-Git-Url: https://git.argeo.org/?p=gpl%2Fargeo-suite.git;a=commitdiff_plain;h=3523f6ae47201064ca7393ea2f476a81ff4e4728 Finalize UI lifecycle. --- diff --git a/core/org.argeo.suite.ui/src/org/argeo/suite/ui/DefaultHeader.java b/core/org.argeo.suite.ui/src/org/argeo/suite/ui/DefaultHeader.java index d3b4740..080bac2 100644 --- a/core/org.argeo.suite.ui/src/org/argeo/suite/ui/DefaultHeader.java +++ b/core/org.argeo.suite.ui/src/org/argeo/suite/ui/DefaultHeader.java @@ -23,6 +23,8 @@ 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.framework.BundleContext; +import org.osgi.framework.wiring.BundleWiring; import org.osgi.service.cm.ConfigurationException; import org.osgi.service.cm.ManagedService; @@ -38,26 +40,6 @@ public class DefaultHeader implements CmsUiProvider, ManagedService { CmsView cmsView = CmsView.getCmsView(parent); CmsTheme theme = CmsTheme.getCmsTheme(parent); - String titleStr = (String) properties.get(TITLE_PROPERTY); - if (titleStr != null) { - if (titleStr.startsWith("%")) { - title = new Localized() { - - @Override - public String name() { - return titleStr; - } - - @Override - public ClassLoader getL10nClassLoader() { - return getClass().getClassLoader(); - } - }; - } else { - title = new Localized.Untranslated(titleStr); - } - } - parent.setLayout(CmsUiUtils.noSpaceGridLayout(new GridLayout(3, true))); // TODO right to left @@ -109,8 +91,33 @@ public class DefaultHeader implements CmsUiProvider, ManagedService { return lbl; } - public void init(Map properties) { + public void init(BundleContext bundleContext, Map properties) { this.properties = new TreeMap<>(properties); + String titleStr = (String) properties.get(TITLE_PROPERTY); + if (titleStr != null) { + if (titleStr.startsWith("%")) { + title = new Localized() { + + @Override + public String name() { + return titleStr; + } + + @Override + public ClassLoader getL10nClassLoader() { + return bundleContext != null + ? bundleContext.getBundle().adapt(BundleWiring.class).getClassLoader() + : getClass().getClassLoader(); + } + }; + } else { + title = new Localized.Untranslated(titleStr); + } + } + } + + public void destroy() { + } @Override @@ -119,4 +126,8 @@ public class DefaultHeader implements CmsUiProvider, ManagedService { this.properties.putAll(LangUtils.dictToStringMap(properties)); } + public Localized getTitle() { + return title; + } + } diff --git a/core/org.argeo.suite.ui/src/org/argeo/suite/ui/DefaultLeadPane.java b/core/org.argeo.suite.ui/src/org/argeo/suite/ui/DefaultLeadPane.java index e56a676..10d386c 100644 --- a/core/org.argeo.suite.ui/src/org/argeo/suite/ui/DefaultLeadPane.java +++ b/core/org.argeo.suite.ui/src/org/argeo/suite/ui/DefaultLeadPane.java @@ -115,41 +115,9 @@ public class DefaultLeadPane implements CmsUiProvider { first = b; } } - -// if (isAdmin && adminLayers != null) -// for (String layerId : adminLayers) { -// if (layers.containsKey(layerId)) { -// RankedObject layerObj = layers.get(layerId); -// -// String titleStr = (String) layerObj.getProperties().get(SuiteLayer.Property.title.name()); -// Localized title = null; -// if (titleStr != null) -// title = new Localized.Untranslated(titleStr); -// -// String iconName = (String) layerObj.getProperties().get(SuiteLayer.Property.icon.name()); -// SuiteIcon icon = null; -// if (iconName != null) -// icon = SuiteIcon.valueOf(iconName); -// -// Button b = SuiteUiUtils.createLayerButton(parent, layerId, title, icon); -// if (first == null) -// first = b; -// } -// } - -// Button dashboardB = createButton(parent, SuiteMsg.dashboard.name(), SuiteMsg.dashboard, SuiteIcon.dashboard); - if (!cmsView.isAnonymous()) { -// createButton(parent, SuiteMsg.documents.name(), SuiteMsg.documents, SuiteIcon.documents); -// createButton(parent, SuiteMsg.people.name(), SuiteMsg.people, SuiteIcon.people); -// createButton(parent, SuiteMsg.locations.name(), SuiteMsg.locations, SuiteIcon.location); - } return first; } - protected void processLayer(String layerDef) { - - } - public void init(Map properties) { String[] defaultLayers = (String[]) properties.get(Property.defaultLayers.toString()); if (defaultLayers == null) diff --git a/core/org.argeo.suite.ui/src/org/argeo/suite/ui/SuiteApp.java b/core/org.argeo.suite.ui/src/org/argeo/suite/ui/SuiteApp.java index 7087783..e8bfa5f 100644 --- a/core/org.argeo.suite.ui/src/org/argeo/suite/ui/SuiteApp.java +++ b/core/org.argeo.suite.ui/src/org/argeo/suite/ui/SuiteApp.java @@ -54,6 +54,7 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { public final static String PUBLIC_BASE_PATH_PROPERTY = "publicBasePath"; public final static String DEFAULT_UI_NAME_PROPERTY = "defaultUiName"; public final static String DEFAULT_THEME_ID_PROPERTY = "defaultThemeId"; + private final static String LOGIN = "login"; private String publicBasePath = null; @@ -61,9 +62,8 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { private String headerPid; private String leadPanePid; private String loginScreenPid; - + private String defaultLayerPid = "argeo.suite.ui.dashboardLayer"; -// private String RECENT_ITEMS_PID = pidPrefix + "recentItems"; private String defaultUiName = "app"; private String defaultThemeId = "org.argeo.suite.theme.default"; @@ -78,9 +78,6 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { // TODO make more optimal or via CmsSession/CmsView private Map managedUis = new HashMap<>(); -// private Localized defaultTitle; -//// private CmsUiProvider headerPart = null; - public void init(Map properties) { if (log.isDebugEnabled()) log.info("Argeo Suite App started"); @@ -154,15 +151,19 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { SuiteUi ui = (SuiteUi) parent; CmsView cmsView = CmsView.getCmsView(parent); CmsUiProvider headerUiProvider = findUiProvider(headerPid); -// if (headerUiProvider instanceof Localized) { -// defaultTitle = (Localized) headerUiProvider; -// } + Localized appTitle = null; + if (headerUiProvider instanceof DefaultHeader) { + appTitle = ((DefaultHeader) headerUiProvider).getTitle(); + } + ui.setTitle(appTitle); + if (cmsView.isAnonymous() && publicBasePath == null) {// internal app, must login ui.logout(); refreshPart(headerUiProvider, ui.getHeader(), context); ui.refreshBelowHeader(false); refreshPart(findUiProvider(loginScreenPid), ui.getBelowHeader(), context); ui.layout(true, true); + setState(ui, LOGIN); } else { CmsSession cmsSession = cmsView.getCmsSession(); if (ui.getUserDir() == null) { @@ -281,11 +282,18 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { @Override public void setState(Composite parent, String state) { - if (state == null || state.equals("~")) + if (state == null) return; - if (!state.startsWith("/") && !state.equals("~")) { + if (!state.startsWith("/")) { if (parent instanceof SuiteUi) { SuiteUi ui = (SuiteUi) parent; + if (LOGIN.equals(state) || state.equals("~")) { + String appTitle = ""; + if (ui.getTitle() != null) + appTitle = ui.getTitle().lead(); + ui.getCmsView().stateChanged(state, appTitle); + return; + } String currentLayerId = ui.getCurrentLayerId(); if (state.equals(currentLayerId)) return; // does nothing @@ -355,6 +363,10 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { if (ui == null) return; try { + String appTitle = ""; + if (ui.getTitle() != null) + appTitle = ui.getTitle().lead() + " - "; + // String currentLayerId = ui.getCurrentLayerId(); // SuiteLayer currentLayer = currentLayerId != null ? layersByPid.get(currentLayerId).get() : null; if (SuiteUiUtils.isTopic(event, SuiteEvent.refreshPart)) { @@ -365,7 +377,7 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { SuiteLayer layer = findByType(layersByType, node); ui.switchToLayer(layer, node); ui.getCmsView().runAs(() -> layer.view(uiProvider, ui.getCurrentWorkArea(), node)); - ui.getCmsView().stateChanged(nodeToState(node), Jcr.getTitle(node)); + ui.getCmsView().stateChanged(nodeToState(node), appTitle + Jcr.getTitle(node)); } else if (SuiteUiUtils.isTopic(event, SuiteEvent.openNewPart)) { Node node = getNode(ui, event); if (node == null) @@ -374,7 +386,7 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { SuiteLayer layer = findByType(layersByType, node); ui.switchToLayer(layer, node); ui.getCmsView().runAs(() -> layer.open(uiProvider, ui.getCurrentWorkArea(), node)); - ui.getCmsView().stateChanged(nodeToState(node), Jcr.getTitle(node)); + ui.getCmsView().stateChanged(nodeToState(node), appTitle + Jcr.getTitle(node)); } else if (SuiteUiUtils.isTopic(event, SuiteEvent.switchLayer)) { String layerId = get(event, SuiteEvent.LAYER); if (layerId != null) { @@ -385,7 +397,7 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { String title = null; if (layerTitle != null) title = layerTitle.lead(); - ui.getCmsView().stateChanged(layerId, title); + ui.getCmsView().stateChanged(layerId, appTitle + title); } else { Node node = getNode(ui, event); if (node != null) { diff --git a/core/org.argeo.suite.ui/src/org/argeo/suite/ui/SuiteUi.java b/core/org.argeo.suite.ui/src/org/argeo/suite/ui/SuiteUi.java index b245762..3c4474f 100644 --- a/core/org.argeo.suite.ui/src/org/argeo/suite/ui/SuiteUi.java +++ b/core/org.argeo.suite.ui/src/org/argeo/suite/ui/SuiteUi.java @@ -11,6 +11,7 @@ import javax.jcr.Session; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.argeo.api.NodeConstants; +import org.argeo.cms.Localized; import org.argeo.cms.ui.CmsView; import org.argeo.cms.ui.util.CmsUiUtils; import org.argeo.jcr.Jcr; @@ -22,6 +23,8 @@ import org.eclipse.swt.widgets.Composite; class SuiteUi extends Composite { private static final long serialVersionUID = 6207018859086689108L; private final static Log log = LogFactory.getLog(SuiteUi.class); + + private Localized title; private Composite header; private Composite belowHeader; private Composite leadPane; @@ -223,4 +226,12 @@ class SuiteUi extends Composite { return cmsView; } + public Localized getTitle() { + return title; + } + + public void setTitle(Localized title) { + this.title = title; + } + }