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%2FArgeoSuiteApp.java;h=3f1a8cebbc8bbf4eb1b362e518b58918292854fe;hp=da86e5b6c336bd13bb3a2693ff8e976407634d87;hb=ff73a753e98016467d44c3a0beac79d590874520;hpb=95138f2cf31dfe8fe34c5697371e1f6365dfc35f diff --git a/org.argeo.suite.ui/src/org/argeo/suite/ui/ArgeoSuiteApp.java b/org.argeo.suite.ui/src/org/argeo/suite/ui/ArgeoSuiteApp.java index da86e5b..3f1a8ce 100644 --- a/org.argeo.suite.ui/src/org/argeo/suite/ui/ArgeoSuiteApp.java +++ b/org.argeo.suite.ui/src/org/argeo/suite/ui/ArgeoSuiteApp.java @@ -1,9 +1,10 @@ package org.argeo.suite.ui; -import java.util.ArrayList; +import static org.argeo.cms.ui.CmsView.CMS_VIEW_UID_PROPERTY; + import java.util.Collections; +import java.util.HashMap; import java.util.HashSet; -import java.util.List; import java.util.Map; import java.util.Set; import java.util.SortedMap; @@ -25,9 +26,11 @@ import org.argeo.jcr.JcrUtils; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; +import org.osgi.service.event.Event; +import org.osgi.service.event.EventHandler; /** The Argeo Suite App. */ -public class ArgeoSuiteApp extends AbstractCmsApp { +public class ArgeoSuiteApp extends AbstractCmsApp implements EventHandler { private final static Log log = LogFactory.getLog(ArgeoSuiteApp.class); public final static String PID_PREFIX = "argeo.suite.ui."; @@ -43,7 +46,7 @@ public class ArgeoSuiteApp extends AbstractCmsApp { private SortedMap uiProviders = Collections.synchronizedSortedMap(new TreeMap<>()); // TODO make more optimal or via CmsSession/CmsView - private List knownUis = new ArrayList<>(); + private Map managedUis = new HashMap<>(); // private CmsUiProvider headerPart = null; @@ -53,7 +56,7 @@ public class ArgeoSuiteApp extends AbstractCmsApp { } public void destroy(Map properties) { - for (ArgeoSuiteUi ui : knownUis) + for (ArgeoSuiteUi ui : managedUis.values()) if (!ui.isDisposed()) ui.dispose(); if (log.isDebugEnabled()) @@ -71,11 +74,18 @@ public class ArgeoSuiteApp extends AbstractCmsApp { @Override public Composite initUi(Composite parent) { String uiName = parent.getData(UI_NAME_PROPERTY) != null ? parent.getData(UI_NAME_PROPERTY).toString() : null; + CmsView cmsView = CmsView.getCmsView(parent); CmsTheme theme = getTheme(uiName); if (theme != null) CmsTheme.registerCmsTheme(parent.getShell(), theme); ArgeoSuiteUi argeoSuiteUi = new ArgeoSuiteUi(parent, SWT.NONE); - knownUis.add(argeoSuiteUi); + String uid = cmsView.getUid(); + managedUis.put(uid, argeoSuiteUi); + argeoSuiteUi.addDisposeListener((e) -> { + managedUis.remove(uid); + if (log.isDebugEnabled()) + log.debug("Suite UI " + uid + " has been disposed."); + }); refreshUi(argeoSuiteUi, null); return argeoSuiteUi; } @@ -215,6 +225,23 @@ public class ArgeoSuiteApp extends AbstractCmsApp { } + @Override + public void handleEvent(Event event) { + if (event.getTopic().equals(SuiteEvent.switchLayer.topic())) { + String layer = get(event, SuiteEvent.LAYER_PARAM); + managedUis.get(get(event, CMS_VIEW_UID_PROPERTY)).switchToLayer(layer); + } + + } + + private static String get(Event event, String key) { + Object value = event.getProperty(key); + if (value == null) + throw new IllegalArgumentException("Property " + key + " must be set"); + return value.toString(); + + } + // public void setHeaderPart(CmsUiProvider headerPart) { // this.headerPart = headerPart; // if (log.isDebugEnabled())