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
35 package info.magnolia.ui.contentapp.browser.actions;
36
37 import info.magnolia.icons.MagnoliaIcons;
38 import info.magnolia.ui.vaadin.actionbar.ActionPopup;
39
40 import javax.inject.Inject;
41
42 import com.vaadin.ui.AbstractComponent;
43
44
45
46
47
48
49
50 public class ContextAwareActionPopup<T> implements ShortcutActionsExecutor {
51 private final AbstractComponent component;
52 private final ActionbarPresenter<T> actionbarPresenter;
53 private ActionPopup actionPopup;
54 private String lastGroup;
55
56 @Inject
57 ContextAwareActionPopup(AbstractComponent component, ActionbarPresenter<T> actionbarPresenter) {
58 this.component = component;
59 this.actionbarPresenter = actionbarPresenter;
60
61 component.addContextClickListener(event -> {
62 this.update();
63 this.actionPopup.open(event.getClientX(), event.getClientY());
64 });
65 }
66
67 private void update() {
68
69 this.actionPopup = new ActionPopup(component, false);
70 lastGroup = null;
71 actionbarPresenter.getAvailableActions().forEach(actionbarItem -> {
72 if (lastGroup != null && !actionbarItem.getGroupName().equals(lastGroup)) {
73 actionPopup.addSeparator();
74 }
75 lastGroup = actionbarItem.getGroupName();
76 MagnoliaIcons icon = MagnoliaIcons.forCssClass(actionbarItem.getIconFontId()).orElse(MagnoliaIcons.ACTION);
77 actionPopup.addItem(actionbarItem.getLabel(), icon, item -> actionbarPresenter.fireAction(actionbarItem.getName()))
78 .setEnabled(actionbarPresenter.isEnabledAction(actionbarItem.getName()));
79 });
80 }
81
82 @Override
83 public void fireDefaultAction() {
84 actionbarPresenter.fireDefaultAction();
85 }
86
87 @Override
88 public void fireDeleteAction() {
89 actionbarPresenter.fireDeleteAction();
90 }
91 }