]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.cms.ui/src/org/argeo/cms/util/UserMenuLink.java
[maven-release-plugin] prepare release argeo-commons-2.1.84
[lgpl/argeo-commons.git] / org.argeo.cms.ui / src / org / argeo / cms / util / UserMenuLink.java
1 package org.argeo.cms.util;
2
3 import javax.jcr.Node;
4
5 import org.argeo.cms.CmsMsg;
6 import org.argeo.cms.auth.CurrentUser;
7 import org.argeo.cms.ui.CmsStyles;
8 import org.argeo.cms.widgets.auth.CmsLoginShell;
9 import org.eclipse.swt.events.DisposeEvent;
10 import org.eclipse.swt.events.DisposeListener;
11 import org.eclipse.swt.events.MouseEvent;
12 import org.eclipse.swt.events.MouseListener;
13 import org.eclipse.swt.widgets.Composite;
14 import org.eclipse.swt.widgets.Control;
15 import org.eclipse.swt.widgets.Label;
16
17 /** Open the user menu when clicked */
18 public class UserMenuLink extends MenuLink {
19
20 public UserMenuLink() {
21 setCustom(CmsStyles.CMS_USER_MENU_LINK);
22 }
23
24 @Override
25 public Control createUi(Composite parent, Node context) {
26 if (CurrentUser.isAnonymous())
27 setLabel(CmsMsg.login.lead());
28 else {
29 setLabel(CurrentUser.getDisplayName());
30 }
31 Label link = (Label) ((Composite) super.createUi(parent, context)).getChildren()[0];
32 link.addMouseListener(new UserMenuLinkController(context));
33 return link.getParent();
34 }
35
36 protected CmsLoginShell createUserMenu(Control source, Node context) {
37 return new UserMenu(source.getParent(), context);
38 }
39
40 private class UserMenuLinkController implements MouseListener, DisposeListener {
41 private static final long serialVersionUID = 3634864186295639792L;
42
43 private CmsLoginShell userMenu = null;
44 private long lastDisposeTS = 0l;
45
46 private final Node context;
47
48 public UserMenuLinkController(Node context) {
49 this.context = context;
50 }
51
52 //
53 // MOUSE LISTENER
54 //
55 @Override
56 public void mouseDown(MouseEvent e) {
57 if (e.button == 1) {
58 Control source = (Control) e.getSource();
59 if (userMenu == null) {
60 long durationSinceLastDispose = System.currentTimeMillis() - lastDisposeTS;
61 // avoid to reopen the menu, if one has clicked gain
62 if (durationSinceLastDispose > 200) {
63 userMenu = createUserMenu(source, context);
64 userMenu.getShell().addDisposeListener(this);
65 }
66 }
67 }
68 }
69
70 @Override
71 public void mouseDoubleClick(MouseEvent e) {
72 }
73
74 @Override
75 public void mouseUp(MouseEvent e) {
76 }
77
78 @Override
79 public void widgetDisposed(DisposeEvent event) {
80 userMenu = null;
81 lastDisposeTS = System.currentTimeMillis();
82 }
83 }
84 }