]> git.argeo.org Git - lgpl/argeo-commons.git/blob - UserMenuLink.java
0dbb4ac5adf0429e678a1947f2ca4a339e08056f
[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.CmsStyles;
7 import org.argeo.cms.KernelHeader;
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 // String username = SecurityContextHolder.getContext()
26 // .getAuthentication().getName();
27 String username = CurrentUserUtils.getUsername();
28 if (username.equalsIgnoreCase(KernelHeader.ROLE_ANONYMOUS))
29 setLabel(CmsMsg.login.lead());
30 else
31 setLabel(username);
32 Label link = (Label) ((Composite) super.createUi(parent, context))
33 .getChildren()[0];
34 link.addMouseListener(new UserMenuLinkController());
35 return link.getParent();
36 }
37
38 protected UserMenu createUserMenu(Control source) {
39 return new UserMenu(source.getParent());
40 }
41
42 private class UserMenuLinkController implements MouseListener,
43 DisposeListener {
44 private static final long serialVersionUID = 3634864186295639792L;
45
46 private UserMenu userMenu = null;
47 private long lastDisposeTS = 0l;
48
49 //
50 // MOUSE LISTENER
51 //
52 @Override
53 public void mouseDown(MouseEvent e) {
54 if (e.button == 1) {
55 Control source = (Control) e.getSource();
56 if (userMenu == null) {
57 long durationSinceLastDispose = System.currentTimeMillis()
58 - lastDisposeTS;
59 // avoid to reopen the menu, if one has clicked gain
60 if (durationSinceLastDispose > 200) {
61 userMenu = createUserMenu(source);
62 userMenu.addDisposeListener(this);
63 }
64 }
65 }
66 }
67
68 @Override
69 public void mouseDoubleClick(MouseEvent e) {
70 }
71
72 @Override
73 public void mouseUp(MouseEvent e) {
74 }
75
76 @Override
77 public void widgetDisposed(DisposeEvent event) {
78 userMenu = null;
79 lastDisposeTS = System.currentTimeMillis();
80 }
81 }
82 }