From af8fd089f42ba4848edac72cc0de937e94f24420 Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Thu, 11 Feb 2021 09:22:15 +0100 Subject: [PATCH] Make l10n more generic and extensible. --- core/org.argeo.suite.ui/OSGI-INF/leadPane.xml | 2 +- .../argeo/suite/ui/DefaultEditionLayer.java | 2 +- .../src/org/argeo/suite/ui/DefaultHeader.java | 2 +- .../org/argeo/suite/ui/DefaultLeadPane.java | 63 ++++++++++--------- .../src/org/argeo/suite/ui/SuiteUiUtils.java | 24 +++++++ 5 files changed, 62 insertions(+), 31 deletions(-) diff --git a/core/org.argeo.suite.ui/OSGI-INF/leadPane.xml b/core/org.argeo.suite.ui/OSGI-INF/leadPane.xml index 9d3f2dd..0775c57 100644 --- a/core/org.argeo.suite.ui/OSGI-INF/leadPane.xml +++ b/core/org.argeo.suite.ui/OSGI-INF/leadPane.xml @@ -1,5 +1,5 @@ - + diff --git a/core/org.argeo.suite.ui/src/org/argeo/suite/ui/DefaultEditionLayer.java b/core/org.argeo.suite.ui/src/org/argeo/suite/ui/DefaultEditionLayer.java index 9c2ad47..ac5559f 100644 --- a/core/org.argeo.suite.ui/src/org/argeo/suite/ui/DefaultEditionLayer.java +++ b/core/org.argeo.suite.ui/src/org/argeo/suite/ui/DefaultEditionLayer.java @@ -101,7 +101,7 @@ public class DefaultEditionLayer implements SuiteLayer { } } - public void destroy() { + public void destroy(BundleContext bundleContext, Map properties) { } 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 080bac2..84a5ebd 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 @@ -116,7 +116,7 @@ public class DefaultHeader implements CmsUiProvider, ManagedService { } } - public void destroy() { + public void destroy(BundleContext bundleContext, Map properties) { } 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 6e4ea4c..b2ebcb2 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 @@ -14,13 +14,10 @@ import javax.jcr.RepositoryException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -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.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.argeo.suite.SuiteUtils; @@ -30,8 +27,9 @@ 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.BundleContext; import org.osgi.framework.Constants; +import org.osgi.framework.wiring.BundleWiring; /** Side pane listing various perspectives. */ public class DefaultLeadPane implements CmsUiProvider { @@ -43,7 +41,9 @@ public class DefaultLeadPane implements CmsUiProvider { private Map> layers = Collections.synchronizedSortedMap(new TreeMap<>()); private List defaultLayers; - private List adminLayers= new ArrayList<>(); + private List adminLayers = new ArrayList<>(); + + private ClassLoader l10nClassLoader; @Override public Control createUi(Composite parent, Node node) throws RepositoryException { @@ -111,7 +111,7 @@ public class DefaultLeadPane implements CmsUiProvider { buttonParent = adminLayersC; else buttonParent = appLayersC; - Button b = createLayerButton(buttonParent, layerId, title, icon); + Button b = SuiteUiUtils.createLayerButton(buttonParent, layerId, title, icon, l10nClassLoader); if (first == null) first = b; } @@ -119,7 +119,10 @@ public class DefaultLeadPane implements CmsUiProvider { return first; } - public void init(Map properties) { + public void init(BundleContext bundleContext, Map properties) { + l10nClassLoader = bundleContext != null ? bundleContext.getBundle().adapt(BundleWiring.class).getClassLoader() + : getClass().getClassLoader(); + String[] defaultLayers = (String[]) properties.get(Property.defaultLayers.toString()); if (defaultLayers == null) throw new IllegalArgumentException("Default layers must be set."); @@ -134,6 +137,10 @@ public class DefaultLeadPane implements CmsUiProvider { } } + public void destroy(BundleContext bundleContext, Map properties) { + + } + public void addLayer(SuiteLayer layer, Map properties) { if (properties.containsKey(Constants.SERVICE_PID)) { String pid = (String) properties.get(Constants.SERVICE_PID); @@ -152,25 +159,25 @@ public class DefaultLeadPane implements CmsUiProvider { } } - protected Button createLayerButton(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.CENTER); - CmsUiUtils.style(lbl, SuiteStyle.leadPane); - // CmsUiUtils.markup(lbl); - ClassLoader l10nClassLoader = getClass().getClassLoader(); - String txt = LocaleUtils.lead(msg, l10nClassLoader); -// String txt = msg.lead(); - lbl.setText(txt); - lbl.setLayoutData(new GridData(SWT.CENTER, SWT.TOP, true, false)); - } - CmsUiUtils.sendEventOnSelect(button, SuiteEvent.switchLayer.topic(), SuiteEvent.LAYER, layer); - return button; - } +// protected Button createLayerButton(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.CENTER); +// CmsUiUtils.style(lbl, SuiteStyle.leadPane); +// // CmsUiUtils.markup(lbl); +// ClassLoader l10nClassLoader = getClass().getClassLoader(); +// String txt = LocaleUtils.lead(msg, l10nClassLoader); +//// String txt = msg.lead(); +// lbl.setText(txt); +// lbl.setLayoutData(new GridData(SWT.CENTER, SWT.TOP, true, false)); +// } +// CmsUiUtils.sendEventOnSelect(button, SuiteEvent.switchLayer.topic(), SuiteEvent.LAYER, layer); +// return button; +// } } diff --git a/core/org.argeo.suite.ui/src/org/argeo/suite/ui/SuiteUiUtils.java b/core/org.argeo.suite.ui/src/org/argeo/suite/ui/SuiteUiUtils.java index 79edb64..0cfee18 100644 --- a/core/org.argeo.suite.ui/src/org/argeo/suite/ui/SuiteUiUtils.java +++ b/core/org.argeo.suite.ui/src/org/argeo/suite/ui/SuiteUiUtils.java @@ -7,12 +7,15 @@ import javax.jcr.Node; import javax.jcr.RepositoryException; import javax.jcr.Session; +import org.argeo.cms.LocaleUtils; import org.argeo.cms.Localized; import org.argeo.cms.auth.CurrentUser; import org.argeo.cms.ui.CmsEditable; +import org.argeo.cms.ui.CmsTheme; import org.argeo.cms.ui.CmsView; import org.argeo.cms.ui.dialogs.LightweightDialog; import org.argeo.cms.ui.util.CmsEvent; +import org.argeo.cms.ui.util.CmsIcon; import org.argeo.cms.ui.util.CmsUiUtils; import org.argeo.eclipse.ui.EclipseUiUtils; import org.argeo.entity.EntityNames; @@ -324,6 +327,27 @@ public class SuiteUiUtils { return event.getTopic().equals(cmsEvent.topic()); } + public static Button createLayerButton(Composite parent, String layer, Localized msg, CmsIcon icon, + ClassLoader l10nClassLoader) { + 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.CENTER); + CmsUiUtils.style(lbl, SuiteStyle.leadPane); + String txt = LocaleUtils.lead(msg, l10nClassLoader); +// String txt = msg.lead(); + lbl.setText(txt); + lbl.setLayoutData(new GridData(SWT.CENTER, SWT.TOP, true, false)); + } + CmsUiUtils.sendEventOnSelect(button, SuiteEvent.switchLayer.topic(), SuiteEvent.LAYER, layer); + return button; + } + // public static String createAndConfigureEntity(Shell shell, Session referenceSession, String mainMixin, // String... additionnalProps) { // -- 2.30.2