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.editor.dom.MgnlArea;
37 import info.magnolia.ui.vaadin.gwt.client.widget.controlbar.eventmanager.ControlBarEventHandler;
38 import info.magnolia.ui.vaadin.gwt.client.widget.controlbar.eventmanager.ControlBarEventManager;
39
40 import com.google.gwt.core.client.GWT;
41 import com.google.gwt.dom.client.NativeEvent;
42 import com.google.gwt.user.client.DOM;
43 import com.google.gwt.user.client.Element;
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 private final MgnlArea listener;
57
58 private PlaceHolderBar placeHolderBar;
59
60 public ComponentPlaceHolder(MgnlArea area) throws IllegalArgumentException {
61
62 this.listener = area;
63 this.placeHolderBar = new PlaceHolderBar(area);
64 setStyleName(AbstractBar.EDITOR_CLASS_NAME);
65 addStyleName(PLACEHOLDER_CLASS_NAME);
66
67 setVisible(false);
68 initLayout();
69 }
70
71 protected void initLayout() {
72 add(placeHolderBar);
73 if (listener.isBoxPlaceHolder()) {
74
75 Element element = DOM.createDiv();
76 element.addClassName(AbstractBar.EDITOR_CLASS_NAME);
77 element.addClassName(PLACEHOLDER_ELEMENT_BOX_CLASS_NAME);
78 getElement().appendChild(element);
79 }
80 }
81
82 @Override
83 public void setVisible(boolean visible) {
84 super.setVisible(visible);
85 placeHolderBar.setVisible(visible);
86 }
87
88 @Override
89 public void onAttach() {
90 super.onAttach();
91 }
92
93
94
95
96 private class PlaceHolderBar extends AbstractBar {
97
98 private final MgnlArea listener;
99
100 private ControlBarEventManager impl = GWT.create(ControlBarEventManager.class);
101
102 public PlaceHolderBar(MgnlArea area) {
103 super(area);
104 this.listener = area;
105
106 addStyleName(COMPONENT_CLASS_NAME);
107
108 initLayout();
109 }
110
111 @Override
112 protected String getLabel() {
113 return listener.getPlaceHolderLabel();
114 }
115
116 @Override
117 protected void createControls() {
118
119 if (listener.hasAddComponentButton()) {
120 final Label add = new Label();
121 add.setStyleName(ICON_CLASS_NAME);
122 add.addStyleName(ADD_CLASS_NAME);
123 impl.addClickOrTouchHandler(this, new ControlBarEventHandler() {
124 @Override
125 public void handle(NativeEvent event) {
126 listener.createNewComponent();
127 }
128 });
129 addButton(add);
130 }
131 }
132 }
133 }