X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=swt%2Forg.argeo.app.ui%2Fsrc%2Forg%2Fargeo%2Fapp%2Fui%2FDefaultHeader.java;fp=swt%2Forg.argeo.app.ui%2Fsrc%2Forg%2Fargeo%2Fapp%2Fui%2FDefaultHeader.java;h=b8d78c982eaf3689eedc1eefa1b75f1d2c7585a6;hb=d917d2b10162a29cddaf8c81c362efa37abcaab9;hp=0000000000000000000000000000000000000000;hpb=f1b87af2e0de38f1f49ab8fe68f9988018914811;p=gpl%2Fargeo-suite.git diff --git a/swt/org.argeo.app.ui/src/org/argeo/app/ui/DefaultHeader.java b/swt/org.argeo.app.ui/src/org/argeo/app/ui/DefaultHeader.java new file mode 100644 index 0000000..b8d78c9 --- /dev/null +++ b/swt/org.argeo.app.ui/src/org/argeo/app/ui/DefaultHeader.java @@ -0,0 +1,129 @@ +package org.argeo.app.ui; + +import java.util.Map; + +import org.argeo.api.acr.Content; +import org.argeo.api.cms.ux.CmsView; +import org.argeo.cms.Localized; +import org.argeo.cms.auth.CurrentUser; +import org.argeo.cms.swt.CmsSwtTheme; +import org.argeo.cms.swt.CmsSwtUtils; +import org.argeo.cms.ui.CmsUiProvider; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.MouseAdapter; +import org.eclipse.swt.events.MouseEvent; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +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.BundleContext; +import org.osgi.framework.wiring.BundleWiring; + +/** Header of a standard Argeo Suite application. */ +public class DefaultHeader implements CmsUiProvider { + public final static String TITLE_PROPERTY = "argeo.suite.ui.header.title"; + private Localized title = null; + + @Override + public Control createUiPart(Composite parent, Content context) { + CmsView cmsView = CmsSwtUtils.getCmsView(parent); + CmsSwtTheme theme = CmsSwtUtils.getCmsTheme(parent); + + parent.setLayout(CmsSwtUtils.noSpaceGridLayout(new GridLayout(3, true))); + + // TODO right to left + Composite lead = new Composite(parent, SWT.NONE); + CmsSwtUtils.style(lead, SuiteStyle.header); + 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); +// // TODO expose the localized +// lbl.setText(LocaleUtils.isLocaleKey(title) ? LocaleUtils.local(title, getClass().getClassLoader()).toString() +// : title); + lbl.setText(title.lead()); + CmsSwtUtils.style(lbl, SuiteStyle.headerTitle); + lbl.setLayoutData(CmsSwtUtils.fillWidth()); + + Composite middle = new Composite(parent, SWT.NONE); + CmsSwtUtils.style(middle, SuiteStyle.header); + middle.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, false)); + middle.setLayout(new GridLayout()); + + Composite end = new Composite(parent, SWT.NONE); + CmsSwtUtils.style(end, SuiteStyle.header); + end.setLayoutData(new GridData(SWT.END, SWT.CENTER, true, false)); + + if (!cmsView.isAnonymous()) { + end.setLayout(new GridLayout(2, false)); + Label userL = new Label(end, SWT.NONE); + CmsSwtUtils.style(userL, SuiteStyle.header); + userL.setText(CurrentUser.getDisplayName()); +// Button logoutB = new Button(end, SWT.FLAT); +// logoutB.setImage(theme.getSmallIcon(SuiteIcon.logout)); +// logoutB.addSelectionListener(new SelectionAdapter() { +// private static final long serialVersionUID = 7116760083964201233L; +// +// @Override +// public void widgetSelected(SelectionEvent e) { +// cmsView.logout(); +// } +// +// }); + Label logOutL = new Label(end, 0); + logOutL.setImage(theme.getSmallIcon(SuiteIcon.openUserMenu)); + logOutL.addMouseListener(new MouseAdapter() { + private static final long serialVersionUID = 6908266850511460799L; + + @Override + public void mouseDown(MouseEvent e) { + cmsView.logout(); + } + + }); + } else { + end.setLayout(new GridLayout(1, false)); + // required in order to avoid wrong height after logout + new Label(end, SWT.NONE).setText(""); + + } + return lbl; + } + + public void init(BundleContext bundleContext, Map 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(BundleContext bundleContext, Map properties) { + + } + + public Localized getTitle() { + return title; + } + +}