]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.cms.ui/src/org/argeo/cms/util/UserMenuLink.java
[maven-release-plugin] prepare for next development iteration
[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.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());
32 return link.getParent();
33 }
34
35 protected UserMenu createUserMenu(Control source) {
36 return new UserMenu(source.getParent());
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 //
46 // MOUSE LISTENER
47 //
48 @Override
49 public void mouseDown(MouseEvent e) {
50 if (e.button == 1) {
51 Control source = (Control) e.getSource();
52 if (userMenu == null) {
53 long durationSinceLastDispose = System.currentTimeMillis() - lastDisposeTS;
54 // avoid to reopen the menu, if one has clicked gain
55 if (durationSinceLastDispose > 200) {
56 userMenu = createUserMenu(source);
57 userMenu.getShell().addDisposeListener(this);
58 }
59 }
60 }
61 }
62
63 @Override
64 public void mouseDoubleClick(MouseEvent e) {
65 }
66
67 @Override
68 public void mouseUp(MouseEvent e) {
69 }
70
71 @Override
72 public void widgetDisposed(DisposeEvent event) {
73 userMenu = null;
74 lastDisposeTS = System.currentTimeMillis();
75 }
76 }
77 }