X-Git-Url: https://git.argeo.org/?p=gpl%2Fargeo-suite.git;a=blobdiff_plain;f=org.argeo.suite.ui%2Fsrc%2Forg%2Fargeo%2Fsuite%2Fui%2FDefaultLeadPane.java;h=a207e7a7453da85272bd20a88efedb183256d111;hp=ed7f9aaf54f75a6737202753787a74334acc9f94;hb=f709e4a3ae06e51f767eee8152b393eb1df97df4;hpb=f21589b7f2a19a79edcc213b867c47130faa76cd diff --git a/org.argeo.suite.ui/src/org/argeo/suite/ui/DefaultLeadPane.java b/org.argeo.suite.ui/src/org/argeo/suite/ui/DefaultLeadPane.java index ed7f9aa..a207e7a 100644 --- a/org.argeo.suite.ui/src/org/argeo/suite/ui/DefaultLeadPane.java +++ b/org.argeo.suite.ui/src/org/argeo/suite/ui/DefaultLeadPane.java @@ -1,5 +1,6 @@ package org.argeo.suite.ui; +import java.util.Arrays; import java.util.Collections; import java.util.Map; import java.util.TreeMap; @@ -9,20 +10,16 @@ import javax.jcr.RepositoryException; 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.CmsTheme; +import org.argeo.cms.auth.CurrentUser; import org.argeo.cms.ui.CmsUiProvider; import org.argeo.cms.ui.CmsView; -import org.argeo.cms.ui.util.CmsIcon; -import org.argeo.cms.ui.util.CmsUiUtils; import org.argeo.suite.RankedObject; -import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.GridData; 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.framework.Constants; /** Side pane listing various perspectives. */ @@ -30,11 +27,12 @@ public class DefaultLeadPane implements CmsUiProvider { private final static Log log = LogFactory.getLog(DefaultLeadPane.class); public static enum Property { - defaultLayers; + defaultLayers, adminLayers; } private Map> layers = Collections.synchronizedSortedMap(new TreeMap<>()); private String[] defaultLayers; + private String[] adminLayers; @Override public Control createUi(Composite parent, Node node) throws RepositoryException { @@ -62,12 +60,36 @@ public class DefaultLeadPane implements CmsUiProvider { if (iconName != null) icon = SuiteIcon.valueOf(iconName); - Button b = createButton(parent, layerId, title, icon); + Button b = SuiteUiUtils.createLayerButton(parent, layerId, title, icon); if (first == null) first = b; } } + // TODO factorise + boolean isAdmin = cmsView.doAs(() -> CurrentUser.isInRole(NodeConstants.ROLE_USER_ADMIN)); + if (isAdmin && adminLayers != null) + for (String layerId : adminLayers) { + if (layers.containsKey(layerId)) { + RankedObject layerObj = layers.get(layerId); + + // TODO deal with i10n + 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); @@ -77,30 +99,15 @@ public class DefaultLeadPane implements CmsUiProvider { return first; } - protected Button createButton(Composite parent, String layer, Localized msg, CmsIcon icon) { - CmsTheme theme = CmsTheme.getCmsTheme(parent); - Button button = new Button(parent, SWT.PUSH); - CmsUiUtils.style(button, SuiteStyle.leadPane); - if (icon != null) - button.setImage(icon.getBigIcon(theme)); - button.setLayoutData(new GridData(SWT.CENTER, SWT.BOTTOM, true, false)); - // button.setToolTipText(msg.lead()); - if (msg != null) { - Label lbl = new Label(parent, SWT.NONE); - CmsUiUtils.style(lbl, SuiteStyle.leadPane); - lbl.setText(msg.lead()); - lbl.setLayoutData(new GridData(SWT.CENTER, SWT.TOP, true, false)); - } - CmsUiUtils.sendEventOnSelect(button, SuiteEvent.switchLayer.topic(), SuiteEvent.LAYER, layer); - return button; - } - public void init(Map properties) { defaultLayers = (String[]) properties.get(Property.defaultLayers.toString()); if (defaultLayers == null) throw new IllegalArgumentException("Default layers must be set."); if (log.isDebugEnabled()) - log.debug("Default layers: " + defaultLayers); + log.debug("Default layers: " + Arrays.asList(defaultLayers)); + adminLayers = (String[]) properties.get(Property.adminLayers.toString()); + if (log.isDebugEnabled() && adminLayers != null) + log.debug("Admin layers: " + Arrays.asList(adminLayers)); } public void addLayer(SuiteLayer layer, Map properties) { @@ -110,4 +117,14 @@ public class DefaultLeadPane implements CmsUiProvider { } } + public void removeLayer(SuiteLayer layer, Map properties) { + if (properties.containsKey(Constants.SERVICE_PID)) { + String pid = (String) properties.get(Constants.SERVICE_PID); + if (layers.containsKey(pid)) { + if (layers.get(pid).equals(new RankedObject(layer, properties))) { + layers.remove(pid); + } + } + } + } }