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.contentapp.browser;
35
36 import info.magnolia.ui.contentapp.Datasource;
37
38 import java.util.function.BiPredicate;
39 import java.util.function.Predicate;
40
41 import com.vaadin.data.PropertySet;
42 import com.vaadin.data.provider.HierarchicalDataCommunicator;
43 import com.vaadin.shared.ui.grid.GridClientRpc;
44 import com.vaadin.shared.ui.grid.ScrollDestination;
45 import com.vaadin.ui.TreeGrid;
46 import com.vaadin.ui.components.grid.Editor;
47 import com.vaadin.ui.components.grid.GridSelectionModel;
48
49
50
51
52
53 public class MagnoliaTreeGrid<T> extends TreeGrid<T> {
54
55 private final BiPredicate<Column, T> cellEditingAvailability;
56
57 public MagnoliaTreeGrid(PropertySet<T> propertySet,
58 Predicate<T> itemInteractionAvailability,
59 BiPredicate<Column, T> cellEditingAvailability,
60 Datasource<T> datasource) {
61 super(propertySet, new HierarchicalDataCommunicator<>());
62 this.cellEditingAvailability = cellEditingAvailability;
63 setPropertySet(propertySet);
64 MagnoliaGridDecoration.addCommonConfiguration(this, itemInteractionAvailability, datasource);
65 }
66
67 @Override
68 protected Editor<T> createEditor() {
69 return new EditableCellFilteringEditor<>(getPropertySet(), this, cellEditingAvailability);
70 }
71
72 @Override
73 public void scrollTo(int row, ScrollDestination destination) {
74 getRpcProxy(GridClientRpc.class).scrollToRow(row, destination);
75 }
76
77 @Override
78 public GridSelectionModel<T> setSelectionMode(SelectionMode selectionMode) {
79 final GridSelectionModel<T> model = selectionMode == SelectionMode.MULTI ? new MagnoliaGridDecoration.MultiSelectionModel<>() : new MagnoliaGridDecoration.SingleSelectionModel<>();
80 super.setSelectionModel(model);
81 return model;
82 }
83
84 }