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.templating.editor.client.model.focus;
35
36 import info.magnolia.templating.editor.client.dom.MgnlElement;
37 import info.magnolia.templating.editor.client.model.ModelStorage;
38
39 import java.util.List;
40
41 import com.google.gwt.dom.client.Element;
42 import com.google.gwt.dom.client.Style.Unit;
43
44
45
46
47 public class FocusModelImpl3 implements FocusModel {
48
49 private ModelStorage storage;
50
51 public FocusModelImpl3(ModelStorage storage) {
52 super();
53 this.storage = storage;
54 }
55
56 @Override
57 public void handleClick(MgnlElement mgnlElement) {
58
59 }
60
61 @Override
62 public void handleClick(Element element) {
63
64 MgnlElement mgnlElement = storage.getMgnlElement(element);
65
66 if (mgnlElement == null) {
67 reset();
68 return;
69 }
70 if (mgnlElement == storage.getSelectedMgnlElement()) {
71 return;
72 }
73
74 hideRoot();
75 if (storage.getSelectedMgnlElement() != null) {
76 deSelect(storage.getSelectedMgnlElement());
77 }
78
79 select(mgnlElement);
80
81 storage.setSelectedMgnlElement(mgnlElement);
82 }
83
84 @Override
85 public void reset() {
86 deSelect();
87 showRoot();
88 computeOverlay();
89 }
90
91 protected void select(MgnlElement mgnlElement) {
92
93 if (mgnlElement != null) {
94 MgnlElement parentArea = mgnlElement.getParentArea();
95
96 if (parentArea != null) {
97
98 if (storage.getEditBar(parentArea) != null) {
99 storage.getEditBar(parentArea).setVisible(true);
100 }
101
102 for (MgnlElement component : parentArea.getComponents()) {
103
104 if (storage.getEditBar(component) != null) {
105 storage.getEditBar(component).setVisible(true);
106 }
107
108 }
109 computeOverlay();
110 }
111 }
112 }
113
114 public void deSelect() {
115 if (storage.getSelectedMgnlElement() != null) {
116 deSelect(storage.getSelectedMgnlElement());
117 }
118 }
119
120 public void deSelect(MgnlElement mgnlElement) {
121 mgnlElement = mgnlElement.getRoot();
122 if (mgnlElement != null) {
123
124 for (MgnlElement descendant : mgnlElement.getDescendants()) {
125
126 if (storage.getEditBar(descendant) != null) {
127 storage.getEditBar(descendant).setVisible(false);
128 }
129
130 }
131 computeOverlay();
132
133 }
134 }
135
136 public void showRoot() {
137 for (MgnlElement root : storage.getRootElements()) {
138 if (storage.getEditBar(root) != null) {
139 storage.getEditBar(root).setVisible(true);
140 }
141 }
142 }
143 public void hideRoot() {
144 for (MgnlElement root : storage.getRootElements()) {
145 if (storage.getEditBar(root) != null) {
146 storage.getEditBar(root).setVisible(false);
147
148 }
149 }
150 }
151
152 public void computeOverlay () {
153 for (MgnlElement root : storage.getRootElements()) {
154 List<MgnlElement> mgnlElements = root.getDescendants();
155 mgnlElements.add(root);
156 for (MgnlElement mgnlElement : mgnlElements) {
157
158 if (storage.getOverlay(mgnlElement) == null) {
159 continue;
160 }
161
162 Element firstElement = mgnlElement.getFirstElement();
163 if (firstElement == null) {
164 continue;
165 }
166 storage.getOverlay(mgnlElement).getElement().getStyle().setTop(firstElement.getAbsoluteTop(), Unit.PX);
167 storage.getOverlay(mgnlElement).getElement().getStyle().setLeft(firstElement.getAbsoluteLeft(), Unit.PX);
168 storage.getOverlay(mgnlElement).getElement().getStyle().setWidth(firstElement.getAbsoluteRight() - firstElement.getAbsoluteLeft(), Unit.PX);
169
170 Element lastElement = mgnlElement.getLastElement();
171 if (lastElement != null) {
172 storage.getOverlay(mgnlElement).getElement().getStyle().setHeight(lastElement.getAbsoluteBottom() - storage.getOverlay(mgnlElement).getElement().getAbsoluteTop(), Unit.PX);
173 }
174 }
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200 }
201 }
202
203 }