]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.cms.ui/src/org/argeo/cms/util/UserMenuLink.java
Clean user management
[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.node.NodeConstants;
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))
32 .getChildren()[0];
33 link.addMouseListener(new UserMenuLinkController());
34 return link.getParent();
35 }
36
37 protected UserMenu createUserMenu(Control source) {
38 return new UserMenu(source.getParent());
39 }
40
41 private class UserMenuLinkController implements MouseListener,
42 DisposeListener {
43 private static final long serialVersionUID = 3634864186295639792L;
44
45 private UserMenu userMenu = null;
46 private long lastDisposeTS = 0l;
47
48 //
49 // MOUSE LISTENER
50 //
51 @Override
52 public void mouseDown(MouseEvent e) {
53 if (e.button == 1) {
54 Control source = (Control) e.getSource();
55 if (userMenu == null) {
56 long durationSinceLastDispose = System.currentTimeMillis()
57 - lastDisposeTS;
58 // avoid to reopen the menu, if one has clicked gain
59 if (durationSinceLastDispose > 200) {
60 userMenu = createUserMenu(source);
61 userMenu.getShell().addDisposeListener(this);
62 }
63 }
64 }
65 }
66
67 @Override
68 public void mouseDoubleClick(MouseEvent e) {
69 }
70
71 @Override
72 public void mouseUp(MouseEvent e) {
73 }
74
75 @Override
76 public void widgetDisposed(DisposeEvent event) {
77 userMenu = null;
78 lastDisposeTS = System.currentTimeMillis();
79 }
80 }
81 }