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.vaadin.layout.LazyThumbnailLayout;
40
41 import javax.inject.Inject;
42
43 import com.vaadin.ui.Composite;
44 import com.vaadin.ui.IconGenerator;
45 import com.vaadin.ui.ItemCaptionGenerator;
46
47
48
49
50
51
52 public class ThumbnailView<T> extends Composite implements ContentView {
53
54 @Inject
55 public ThumbnailView(ValueContext<T> valueContext, PreviewProvider<T> previewProvider) {
56 ThumbnailPresenter<T> presenter = create(ThumbnailPresenter.class);
57
58 LazyThumbnailLayout<T> thumbnailLayout = new LazyThumbnailLayout<T>(presenter.dataProvider()) {
59
60 @Override
61 protected ItemCaptionGenerator<T> getItemCaptionGenerator() {
62 return presenter::getCaption;
63 }
64
65 @Override
66 protected IconGenerator<T> getItemResourceGenerator() {
67 return item -> previewProvider.getResource(item).orElse(null);
68 }
69 };
70 thumbnailLayout.addStyleName("mgnl-workbench-thumbnail-view");
71 setCompositionRoot(thumbnailLayout);
72 setSizeFull();
73
74 thumbnailLayout.setElementSize(150, 120);
75
76 ContextAwareActionPopup actionPopup = create(ContextAwareActionPopup.class, thumbnailLayout);
77 thumbnailLayout.refresh();
78
79 valueContext.get().findFirst().ifPresent(thumbnailLayout::setSelectedItem);
80 thumbnailLayout.addRightClickListener((item, clickX, clickY) -> valueContext.set(item));
81 thumbnailLayout.addElementSelectionListener(valueContext::set);
82 thumbnailLayout.addDoubleClickListener(item -> {
83 valueContext.set(item);
84 actionPopup.fireDefaultAction();
85 });
86 }
87 }