package org.argeo.cms.util;
+import javax.jcr.Node;
+
import org.argeo.cms.CmsException;
import org.argeo.cms.widgets.auth.CmsLoginShell;
import org.eclipse.swt.SWT;
/** The site-related user menu */
public class UserMenu extends CmsLoginShell {
private final Control source;
+ private final Node context;
- public UserMenu(Control source) {
+ public UserMenu(Control source, Node context) {
super(CmsUtils.getCmsView());
+ this.context = context;
createUi();
if (source == null)
throw new CmsException("Source control cannot be null.");
@Override
protected Shell createShell() {
- return new Shell(Display.getCurrent(), SWT.NO_TRIM | SWT.BORDER
- | SWT.ON_TOP);
+ return new Shell(Display.getCurrent(), SWT.NO_TRIM | SWT.BORDER | SWT.ON_TOP);
}
@Override
Shell shell = getShell();
shell.pack();
shell.layout();
- shell.setLocation(source.toDisplay(source.getSize().x
- - shell.getSize().x, source.getSize().y));
+ shell.setLocation(source.toDisplay(source.getSize().x - shell.getSize().x, source.getSize().y));
shell.addShellListener(new ShellAdapter() {
private static final long serialVersionUID = 5178980294808435833L;
super.open();
}
+ protected Node getContext() {
+ return context;
+ }
+
}
setLabel(CurrentUser.getDisplayName());
}
Label link = (Label) ((Composite) super.createUi(parent, context)).getChildren()[0];
- link.addMouseListener(new UserMenuLinkController());
+ link.addMouseListener(new UserMenuLinkController(context));
return link.getParent();
}
- protected UserMenu createUserMenu(Control source) {
- return new UserMenu(source.getParent());
+ protected UserMenu createUserMenu(Control source,Node context) {
+ return new UserMenu(source.getParent(),context);
}
private class UserMenuLinkController implements MouseListener, DisposeListener {
private UserMenu userMenu = null;
private long lastDisposeTS = 0l;
+ private final Node context;
+
+ public UserMenuLinkController(Node context) {
+ this.context = context;
+ }
+
//
// MOUSE LISTENER
//
long durationSinceLastDispose = System.currentTimeMillis() - lastDisposeTS;
// avoid to reopen the menu, if one has clicked gain
if (durationSinceLastDispose > 200) {
- userMenu = createUserMenu(source);
+ userMenu = createUserMenu(source,context);
userMenu.getShell().addDisposeListener(this);
}
}