1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.ui.admincentral.usermenu;
35
36 import info.magnolia.ui.vaadin.actionbar.ActionPopup;
37 import info.magnolia.ui.vaadin.usermenu.UserMenu;
38
39 import org.vaadin.peter.contextmenu.ContextMenu;
40 import org.vaadin.peter.contextmenu.ContextMenu.ContextMenuClosedEvent;
41 import org.vaadin.peter.contextmenu.ContextMenu.ContextMenuClosedListener;
42
43 import com.vaadin.server.ExternalResource;
44 import com.vaadin.ui.Button.ClickEvent;
45 import com.vaadin.ui.Button.ClickListener;
46 import com.vaadin.ui.Component;
47 import com.vaadin.ui.NativeButton;
48
49
50
51
52 public class UserMenuViewImpl implements UserMenuView {
53
54 private final NativeButton button = new NativeButton();
55 private final UserMenu menu = new UserMenu();
56 private UserMenuView.Listener listener;
57 private String caption;
58
59 public UserMenuViewImpl() {
60 button.setStyleName("user-menu");
61 button.setHtmlContentAllowed(true);
62
63 menu.setAsContextMenuOf(button);
64
65 button.addClickListener(new ClickListener() {
66 @Override
67 public void buttonClick(ClickEvent event) {
68 menu.open();
69 updateButton(caption, true);
70 }
71 });
72
73 menu.addContextMenuCloseListener(new ContextMenuClosedListener() {
74
75 @Override
76 public void onContextMenuClosed(ContextMenuClosedEvent event) {
77 updateButton(caption, false);
78 }
79 });
80 }
81
82 @Override
83 public void setCaption(String caption) {
84 updateButton(caption, false);
85 this.caption = caption;
86 }
87
88 private void updateButton(String caption, boolean open) {
89 String text = caption + ((open) ? "<span class=\"icon-arrow2_n\"></span>" : "<span class=\"icon-arrow2_s\"></span>");
90 button.setCaption(text);
91 }
92
93 @Override
94 public void setListener(UserMenuView.Listener listener) {
95 this.listener = listener;
96 }
97
98 @Override
99 @Deprecated
100 public void addAction(String actionName, String label) {
101 addAction(actionName, label, "");
102 }
103
104 @Override
105 public void addAction(final String actionName, String label, String icon) {
106 String iconFontCode = ActionPopup.ICON_FONT_CODE + icon;
107 ExternalResource iconFontResource = new ExternalResource(iconFontCode);
108
109 menu.addItem(label, iconFontResource).addItemClickListener(new ContextMenu.ContextMenuItemClickListener() {
110 @Override
111 public void contextMenuItemClicked(ContextMenu.ContextMenuItemClickEvent event) {
112 listener.onAction(actionName);
113 }
114 });
115 }
116
117 @Override
118 public Component asVaadinComponent() {
119 return button;
120 }
121 }