]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.cms/src/org/argeo/cms/util/UserMenuLink.java
Remove unused directory
[lgpl/argeo-commons.git] / org.argeo.cms / 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.CmsStyles;
7 import org.argeo.cms.auth.AuthConstants;
8 import org.argeo.cms.auth.CurrentUser;
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 String username = CurrentUser.getUsername(CmsUtils.getCmsView()
27 .getSubject());
28 if (username.equalsIgnoreCase(AuthConstants.ROLE_ANONYMOUS))
29 setLabel(CmsMsg.login.lead());
30 else {
31 setLabel(CurrentUser.getDisplayName(CmsUtils.getCmsView()
32 .getSubject()));
33 }
34 Label link = (Label) ((Composite) super.createUi(parent, context))
35 .getChildren()[0];
36 link.addMouseListener(new UserMenuLinkController());
37 return link.getParent();
38 }
39
40 protected UserMenu createUserMenu(Control source) {
41 return new UserMenu(source.getParent());
42 }
43
44 private class UserMenuLinkController implements MouseListener,
45 DisposeListener {
46 private static final long serialVersionUID = 3634864186295639792L;
47
48 private UserMenu userMenu = null;
49 private long lastDisposeTS = 0l;
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()
60 - lastDisposeTS;
61 // avoid to reopen the menu, if one has clicked gain
62 if (durationSinceLastDispose > 200) {
63 userMenu = createUserMenu(source);
64 userMenu.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 }