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.browser.context.ValueContext;
37 import info.magnolia.ui.framework.UiFrameworkView;
38 import info.magnolia.ui.framework.datasource.DatasourceComponent;
39 import info.magnolia.ui.framework.datasource.components.ItemDescriber;
40 import info.magnolia.ui.framework.datasource.components.SelectedItems;
41
42 import javax.inject.Inject;
43
44 import com.vaadin.ui.Alignment;
45 import com.vaadin.ui.HorizontalLayout;
46 import com.vaadin.ui.Label;
47
48
49
50
51
52 public class StatusBar<T> extends HorizontalLayout implements UiFrameworkView {
53
54 public static final String STYLE_NAME = "statusbar";
55
56 private final ItemDescriber<T> itemDescriber;
57
58 private final Label statusText = new Label();
59
60 @Inject
61 public StatusBar(
62 ValueContext<T> valueContext,
63 @DatasourceComponent ItemDescriber<T> itemDescriber) {
64 this.itemDescriber = itemDescriber;
65
66 this.addStyleName(STYLE_NAME);
67 this.setDefaultComponentAlignment(Alignment.TOP_LEFT);
68 this.addComponentsAndExpand(statusText);
69 this.setSpacing(true);
70 this.setMargin(false);
71 this.setWidth(100, Unit.PERCENTAGE);
72
73 valueContext.observeNullable(this::describe);
74 statusText.setValue(itemDescriber.describe(SelectedItems.empty()));
75 }
76
77 protected void describe(SelectedItems<T> selectedItems) {
78 this.statusText.setValue(selectedItems == null ? "" : itemDescriber.describe(selectedItems));
79 }
80 }