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.Grid;
43
44
45
46
47
48
49
50 public class ActionManager<T> {
51 private final Grid grid;
52 private final ActionbarPresenter<T> actionbarPresenter;
53 private ActionPopup actionPopup;
54 private String lastGroup;
55
56 @Inject
57 ActionManager(Grid<T> grid, ActionbarPresenter actionbarPresenter) {
58 this.grid = grid;
59 this.actionbarPresenter = actionbarPresenter;
60
61 grid.addContextClickListener(event -> {
62 T item = ((Grid.GridContextClickEvent<T>) event).getItem();
63 if (item != null) {
64 if (!grid.getSelectedItems().contains(item)) {
65 grid.deselectAll();
66 }
67 grid.select(item);
68 } else {
69 grid.deselectAll();
70 }
71
72 this.update();
73 this.actionPopup.open(event.getClientX(), event.getClientY());
74 });
75 }
76
77 private void update() {
78
79 this.actionPopup = new ActionPopup(grid, false);
80 lastGroup = null;
81 actionbarPresenter.getAvailableActions().forEach(actionbarItem -> {
82 if (lastGroup != null && !actionbarItem.getGroupName().equals(lastGroup)) {
83 actionPopup.addSeparator();
84 }
85 lastGroup = actionbarItem.getGroupName();
86 actionPopup.addItem(actionbarItem.getLabel(), MagnoliaIcons.forCssClass(actionbarItem.getIconFontId()).orElse(MagnoliaIcons.ACTION), item ->
87 actionbarPresenter.fireAction(actionbarItem.getName()))
88 .setEnabled(actionbarPresenter.isEnableAction(actionbarItem.getName()));
89 });
90 }
91
92 public void fireDefaultAction() {
93 if (!grid.getEditor().isEnabled()) {
94 actionbarPresenter.fireDefaultAction();
95 }
96 }
97 }