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