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