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.vaadin.gwt.client.widget.controlbar;
35
36 import info.magnolia.ui.vaadin.gwt.client.widget.controlbar.eventmanager.ControlBarEventHandler;
37 import info.magnolia.ui.vaadin.gwt.client.widget.controlbar.eventmanager.ControlBarEventManager;
38 import info.magnolia.ui.vaadin.gwt.client.widget.controlbar.listener.AreaListener;
39
40 import com.google.gwt.core.client.GWT;
41 import com.google.gwt.dom.client.Element;
42 import com.google.gwt.dom.client.NativeEvent;
43 import com.google.gwt.user.client.DOM;
44 import com.google.gwt.user.client.ui.FlowPanel;
45 import com.google.gwt.user.client.ui.Label;
46
47
48
49
50
51 public class ComponentPlaceHolder extends FlowPanel {
52
53 private final static String PLACEHOLDER_CLASS_NAME = "mgnlPlaceholder";
54 private final static String PLACEHOLDER_ELEMENT_BOX_CLASS_NAME = "mgnlPlaceholderBox";
55
56 protected AreaListener listener;
57 protected PlaceHolderBar placeHolderBar = new PlaceHolderBar();
58 private boolean boxed;
59 private boolean addable;
60
61 public ComponentPlaceHolder() {
62 setStyleName(SimpleBar.EDITOR_CLASS_NAME);
63 addStyleName(PLACEHOLDER_CLASS_NAME);
64 }
65
66 protected void initLayout() {
67 placeHolderBar.initLayout();
68 add(placeHolderBar);
69
70 if (addable) {
71 placeHolderBar.createAddButton(listener);
72 }
73
74 if (boxed) {
75 Element element = DOM.createDiv();
76 element.addClassName(SimpleBar.EDITOR_CLASS_NAME);
77 element.addClassName(PLACEHOLDER_ELEMENT_BOX_CLASS_NAME);
78 getElement().appendChild(element);
79 }
80 }
81
82 protected void addLabel(String label, int level) {
83 placeHolderBar.addLabel(label, level);
84 }
85
86 @Override
87 public void setVisible(boolean visible) {
88 super.setVisible(visible);
89 placeHolderBar.setVisible(visible);
90 }
91
92 @Override
93 public void onAttach() {
94 super.onAttach();
95 }
96
97
98
99
100 private static class PlaceHolderBar extends AbstractBar {
101
102 private ControlBarEventManager impl = GWT.create(ControlBarEventManager.class);
103
104 public PlaceHolderBar() {
105 addStyleName(COMPONENT_CLASS_NAME);
106 }
107
108 private void createAddButton(final AreaListener listener) {
109 final Label add = new Label();
110 add.setStyleName(ICON_CLASS_NAME);
111 add.addStyleName(ADD_CLASS_NAME);
112 impl.addClickOrTouchHandler(this, new ControlBarEventHandler() {
113 @Override
114 public void handle(NativeEvent event) {
115 listener.createNewComponent();
116 }
117 });
118 addButton(add);
119 }
120
121 }
122
123
124
125
126 public static class Builder {
127
128 private AreaListener listener;
129 private boolean boxed;
130 private boolean addable;
131 private String label;
132
133 public Builder withListener(AreaListener listener) {
134 this.listener = listener;
135 return this;
136 }
137
138 public Builder withType(boolean isBox) {
139 this.boxed = isBox;
140 return this;
141 }
142
143 public Builder withAddButton(boolean isAdd) {
144 this.addable = isAdd;
145 return this;
146 }
147
148 public Builder withLabel(String label) {
149 this.label = label;
150 return this;
151 }
152
153 public ComponentPlaceHolder build() {
154 ComponentPlaceHolder placeHolder = GWT.create(ComponentPlaceHolder.class);
155 placeHolder.listener = listener;
156 placeHolder.addable = addable;
157 placeHolder.boxed = boxed;
158
159 placeHolder.initLayout();
160 placeHolder.addLabel(label, 0);
161 placeHolder.setVisible(false);
162 return placeHolder;
163 }
164 }
165 }