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.incub;
35
36 import com.vaadin.ui.Button;
37 import com.vaadin.ui.Component;
38 import com.vaadin.ui.VerticalLayout;
39
40
41
42
43 public class CollapsibleCompositeField extends CompositeField {
44
45 private String toggleButtonLabel;
46 private Component content;
47
48 public CollapsibleCompositeField(String toggleButtonLabel, boolean isHorizontal, Component... components) {
49 super(isHorizontal, components);
50 this.toggleButtonLabel = toggleButtonLabel;
51 }
52
53 @Override
54 protected Component initContent() {
55 content = super.initContent();
56 addStyleName("collapsible-compositefield");
57
58 VerticalLayout layout = new VerticalLayout();
59 layout.setMargin(false);
60 final Button toggleButton = new Button(toggleButtonLabel);
61 toggleButton.setCaptionAsHtml(true);
62 toggleButton.setPrimaryStyleName("icon-arrow2_n");
63 toggleButton.addStyleName("toggle-button");
64 toggleButton.addClickListener(event -> {
65 if (content == null) {
66 throw new IllegalStateException("Content is null - it probably has not been initialized yet");
67 }
68 toggleButton.setPrimaryStyleName(content.isVisible() ? "icon-arrow2_s" : "icon-arrow2_n");
69 content.setVisible(!content.isVisible());
70 layout.setStyleName("collapsed", !content.isVisible());
71 });
72 layout.addComponents(toggleButton, content);
73 return layout;
74 }
75
76 @Override
77 protected void doSetValue(Object value) {
78
79 }
80
81 @Override
82 public Object getValue() {
83 return null;
84 }
85 }