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.CmsUiUtils;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.wiring.BundleWiring;
/** An app layer based on an entry area and an editor area. */
public class DefaultEditionLayer implements SuiteLayer {
private CmsUiProvider workArea;
private List<String> weights = new ArrayList<>();
private boolean startMaximized = false;
+ private Localized title = null;
@Override
public Control createUi(Composite parent, Node context) throws RepositoryException {
tabbedArea.open(uiProvider, context);
}
- public void init(Map<String, Object> properties) {
+ @Override
+ public Localized getTitle() {
+ return title;
+ }
+
+ public void init(BundleContext bundleContext, Map<String, Object> properties) {
weights = LangUtils.toStringList(properties.get(Property.weights.name()));
startMaximized = properties.containsKey(Property.startMaximized.name())
&& "true".equals(properties.get(Property.startMaximized.name()));
+
+ String titleStr = (String) properties.get(SuiteLayer.Property.title.name());
+ 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() {
+
+ }
+
public void setEntryArea(CmsUiProvider entryArea) {
this.entryArea = entryArea;
}
import javax.jcr.Node;
import javax.jcr.RepositoryException;
-import org.argeo.cms.LocaleUtils;
+import org.argeo.cms.Localized;
import org.argeo.cms.auth.CurrentUser;
import org.argeo.cms.ui.CmsTheme;
import org.argeo.cms.ui.CmsUiProvider;
import org.osgi.service.cm.ConfigurationException;
import org.osgi.service.cm.ManagedService;
-/** HEader of a standard Argeo Suite applicaiton. */
+/** HEader of a standard Argeo Suite application. */
public class DefaultHeader implements CmsUiProvider, ManagedService {
public final static String TITLE_PROPERTY = "argeo.suite.ui.header.title";
private Map<String, String> properties;
+ private Localized title = null;
+
@Override
public Control createUi(Composite parent, Node context) throws RepositoryException {
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
lead.setLayoutData(new GridData(SWT.LEAD, SWT.CENTER, true, false));
lead.setLayout(new GridLayout());
Label lbl = new Label(lead, SWT.NONE);
- String title = properties.get(TITLE_PROPERTY);
- lbl.setText(LocaleUtils.isLocaleKey(title) ? LocaleUtils.local(title, getClass().getClassLoader()).toString()
- : title);
+// String title = properties.get(TITLE_PROPERTY);
+// // TODO expose the localized
+// lbl.setText(LocaleUtils.isLocaleKey(title) ? LocaleUtils.local(title, getClass().getClassLoader()).toString()
+// : title);
+ lbl.setText(title.lead());
CmsUiUtils.style(lbl, SuiteStyle.headerTitle);
lbl.setLayoutData(CmsUiUtils.fillWidth());
}
RankedObject<SuiteLayer> layerObj = layers.get(layerId);
- // TODO deal with i10n
- String titleStr = (String) layerObj.getProperties().get(SuiteLayer.Property.title.name());
Localized title = null;
- if (titleStr != null) {
- if (titleStr.startsWith("%")) {
- // LocaleUtils.local(titleStr, getClass().getClassLoader());
- title = () -> titleStr;
- } else {
- title = new Localized.Untranslated(titleStr);
+ if (!adminLayers.contains(layerId)) {
+ String titleStr = (String) layerObj.getProperties().get(SuiteLayer.Property.title.name());
+ if (titleStr != null) {
+ if (titleStr.startsWith("%")) {
+ // LocaleUtils.local(titleStr, getClass().getClassLoader());
+ title = () -> titleStr;
+ } else {
+ title = new Localized.Untranslated(titleStr);
+ }
}
}
if (msg != null) {
Label lbl = new Label(parent, SWT.CENTER);
CmsUiUtils.style(lbl, SuiteStyle.leadPane);
- //CmsUiUtils.markup(lbl);
+ // CmsUiUtils.markup(lbl);
ClassLoader l10nClassLoader = getClass().getClassLoader();
String txt = LocaleUtils.lead(msg, l10nClassLoader);
// String txt = msg.lead();
import org.argeo.api.NodeUtils;
import org.argeo.cms.CmsUserManager;
import org.argeo.cms.LocaleUtils;
+import org.argeo.cms.Localized;
import org.argeo.cms.auth.CmsSession;
import org.argeo.cms.ui.AbstractCmsApp;
import org.argeo.cms.ui.CmsTheme;
private String headerPid;
private String leadPanePid;
private String loginScreenPid;
-// private String DASHBOARD_PID = pidPrefix + "dashboard";
+
+ private String defaultLayerPid = "argeo.suite.ui.dashboardLayer";
// private String RECENT_ITEMS_PID = pidPrefix + "recentItems";
private String defaultUiName = "app";
// TODO make more optimal or via CmsSession/CmsView
private Map<String, SuiteUi> managedUis = new HashMap<>();
-// private CmsUiProvider headerPart = null;
+// private Localized defaultTitle;
+//// private CmsUiProvider headerPart = null;
public void init(Map<String, Object> properties) {
if (log.isDebugEnabled())
Node context = null;
SuiteUi ui = (SuiteUi) parent;
CmsView cmsView = CmsView.getCmsView(parent);
+ CmsUiProvider headerUiProvider = findUiProvider(headerPid);
+// if (headerUiProvider instanceof Localized) {
+// defaultTitle = (Localized) headerUiProvider;
+// }
if (cmsView.isAnonymous() && publicBasePath == null) {// internal app, must login
ui.logout();
- refreshPart(findUiProvider(headerPid), ui.getHeader(), context);
+ refreshPart(headerUiProvider, ui.getHeader(), context);
ui.refreshBelowHeader(false);
refreshPart(findUiProvider(loginScreenPid), ui.getBelowHeader(), context);
ui.layout(true, true);
if (context == null)
context = ui.getUserDir();
- refreshPart(findUiProvider(headerPid), ui.getHeader(), context);
+ refreshPart(headerUiProvider, ui.getHeader(), context);
ui.refreshBelowHeader(true);
for (String key : layersByPid.keySet()) {
SuiteLayer layer = layersByPid.get(key).get();
}
refreshPart(findUiProvider(leadPanePid), ui.getLeadPane(), context);
ui.layout(true, true);
- setState(parent, state);
+ setState(parent, state != null ? state : defaultLayerPid);
}
} catch (Exception e) {
CmsFeedback.show("Unexpected exception", e);
return uiProvidersByPid.get(pid).get();
}
+ private SuiteLayer findLayer(String pid) {
+ if (!layersByPid.containsKey(pid))
+ throw new IllegalArgumentException("No UI provider registered as " + pid);
+ return layersByPid.get(pid).get();
+ }
+
private <T> T findByType(Map<String, RankedObject<T>> byType, Node context) {
if (context == null)
throw new IllegalArgumentException("A node should be provided");
String layerId = get(event, SuiteEvent.LAYER);
if (layerId != null) {
// ui.switchToLayer(layerId, ui.getUserDir());
+ SuiteLayer suiteLayer = findLayer(layerId);
+ Localized layerTitle = suiteLayer.getTitle();
ui.getCmsView().runAs(() -> ui.switchToLayer(layerId, ui.getUserDir()));
- ui.getCmsView().navigateTo(layerId);
+ String title = null;
+ if (layerTitle != null)
+ title = layerTitle.lead();
+ ui.getCmsView().stateChanged(layerId, title);
} else {
Node node = getNode(ui, event);
if (node != null) {
import javax.jcr.Node;
+import org.argeo.cms.Localized;
import org.argeo.cms.ui.CmsUiProvider;
import org.eclipse.swt.widgets.Composite;
default void open(CmsUiProvider uiProvider, Composite workArea, Node context) {
view(uiProvider, workArea, context);
}
+
+ default Localized getTitle() {
+ return null;
+ }
}