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.actions.ContextAwareActionPopup;
37 import info.magnolia.ui.ValueContext;
38 import info.magnolia.ui.contentapp.browser.preview.PreviewProvider;
39 import info.magnolia.ui.contentapp.configuration.ThumbnailViewDefinition;
40 import info.magnolia.ui.vaadin.layout.LazyThumbnailLayout;
41
42 import java.util.Optional;
43
44 import javax.inject.Inject;
45
46 import com.vaadin.ui.Composite;
47 import com.vaadin.ui.IconGenerator;
48 import com.vaadin.ui.ItemCaptionGenerator;
49
50
51
52
53
54 public class ThumbnailView<T> extends Composite implements ContentView {
55
56 private ContextAwareActionPopup<T> actionPopup;
57
58
59
60
61 @Deprecated
62 public ThumbnailView(ValueContext<T> valueContext, PreviewProvider<T> previewProvider) {
63 this(valueContext, previewProvider, new ThumbnailViewDefinition<>());
64 }
65
66 @Inject
67 public ThumbnailView(ValueContext<T> valueContext, PreviewProvider<T> previewProvider, ThumbnailViewDefinition<T> definition) {
68 ThumbnailPresenter<T> presenter = create(ThumbnailPresenter.class);
69
70 LazyThumbnailLayout<T> thumbnailLayout = new LazyThumbnailLayout<T>(presenter.dataProvider()) {
71
72 @Override
73 protected ItemCaptionGenerator<T> getItemCaptionGenerator() {
74 return presenter::getCaption;
75 }
76
77 @Override
78 protected IconGenerator<T> getItemResourceGenerator() {
79 return item -> previewProvider.getResource(item).orElse(null);
80 }
81 };
82 thumbnailLayout.addStyleName("mgnl-workbench-thumbnail-view");
83 setCompositionRoot(thumbnailLayout);
84 setSizeFull();
85
86 thumbnailLayout.setElementSize(150, 120);
87
88 if (!definition.isReadOnly()) {
89 actionPopup = create(ContextAwareActionPopup.class, thumbnailLayout);
90 }
91 thumbnailLayout.refresh();
92
93 valueContext.get().findFirst().ifPresent(thumbnailLayout::setSelectedItem);
94 thumbnailLayout.addRightClickListener((item, clickX, clickY) -> valueContext.set(item));
95 thumbnailLayout.addElementSelectionListener(valueContext::set);
96 thumbnailLayout.addDoubleClickListener(item -> {
97 valueContext.set(item);
98 Optional.ofNullable(actionPopup).ifPresent(ContextAwareActionPopup::fireDefaultAction);
99 });
100 }
101 }