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
38 import com.google.gwt.user.client.DOM;
39 import com.google.gwt.user.client.Element;
40 import com.google.gwt.user.client.ui.FlowPanel;
41 import com.google.gwt.user.client.ui.Label;
42 import com.googlecode.mgwt.dom.client.event.touch.TouchEndEvent;
43 import com.googlecode.mgwt.dom.client.event.touch.TouchEndHandler;
44 import com.googlecode.mgwt.ui.client.widget.touch.TouchDelegate;
45
46
47
48
49
50 public class ComponentPlaceHolder extends FlowPanel {
51
52 private final static String PLACEHOLDER_CLASS_NAME = "mgnlPlaceholder";
53 private final static String PLACEHOLDER_ELEMENT_BOX_CLASS_NAME = "mgnlPlaceholderBox";
54
55 private final MgnlArea listener;
56
57 private PlaceHolderBar placeHolderBar;
58
59 public ComponentPlaceHolder(MgnlArea area) throws IllegalArgumentException {
60
61 this.listener = area;
62 this.placeHolderBar = new PlaceHolderBar(area);
63 setStyleName(AbstractBar.EDITOR_CLASS_NAME);
64 addStyleName(PLACEHOLDER_CLASS_NAME);
65
66 setVisible(false);
67 initLayout();
68 }
69
70 protected void initLayout() {
71 add(placeHolderBar);
72 if (listener.isBoxPlaceHolder()) {
73
74 Element element = DOM.createDiv();
75 element.addClassName(AbstractBar.EDITOR_CLASS_NAME);
76 element.addClassName(PLACEHOLDER_ELEMENT_BOX_CLASS_NAME);
77 getElement().appendChild(element);
78 }
79 }
80
81 @Override
82 public void setVisible(boolean visible) {
83 super.setVisible(visible);
84 placeHolderBar.setVisible(visible);
85 }
86
87 @Override
88 public void onAttach() {
89 super.onAttach();
90 }
91
92
93
94
95 private class PlaceHolderBar extends AbstractBar {
96
97 private final MgnlArea listener;
98
99 public PlaceHolderBar(MgnlArea area) {
100 super(area);
101 this.listener = area;
102
103 addStyleName(COMPONENT_CLASS_NAME);
104
105 initLayout();
106 }
107
108 @Override
109 protected String getLabel() {
110 return listener.getPlaceHolderLabel();
111 }
112
113 @Override
114 protected void createControls() {
115
116 if (listener.hasAddComponentButton()) {
117 final Label add = new Label();
118 add.setStyleName(ICON_CLASS_NAME);
119 add.addStyleName(ADD_CLASS_NAME);
120
121 TouchDelegate td = new TouchDelegate(add);
122 td.addTouchEndHandler(new TouchEndHandler() {
123 @Override
124 public void onTouchEnd(TouchEndEvent touchEndEvent) {
125 listener.createNewComponent();
126 }
127 });
128
129 addButton(add);
130 }
131 }
132 }
133 }