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.PageEditor;
37 import info.magnolia.templating.editor.client.dom.MgnlElement;
38 import info.magnolia.templating.editor.client.model.ModelStorage;
39
40 import com.google.gwt.dom.client.Element;
41 import com.google.gwt.user.client.Cookies;
42
43
44
45
46 public class FocusModelImpl3 implements FocusModel {
47
48 private ModelStorage model;
49 private boolean rootSelected = false;
50
51 public FocusModelImpl3(ModelStorage model) {
52 super();
53 this.model = model;
54 }
55
56 @Override
57 public void onMouseUp(Element element) {
58
59 MgnlElement mgnlElement = model.getMgnlElement(element);
60
61 if (mgnlElement == null) {
62 reset();
63 }
64
65 else if (mgnlElement.getParentArea() != null) {
66 MgnlElement area = mgnlElement.getParentArea();
67 if (area != model.getSelectedMgnlElement()) {
68 deSelect();
69 hideRoot();
70 toggleSelection(area, true);
71 }
72 }
73 }
74
75 @Override
76 public void onLoadSelect(MgnlElement selectedMgnlElement) {
77 model.setSelectedMgnlElement(selectedMgnlElement);
78 toggleRootAreaBar(false);
79 showRootPlaceHolder();
80 toggleSelection(selectedMgnlElement, true);
81 }
82 @Override
83 public void reset() {
84 deSelect();
85 toggleRootAreaBar(true);
86 showRootPlaceHolder();
87 }
88
89 private void toggleSelection(MgnlElement mgnlElement, boolean visible) {
90 String contentId = mgnlElement.getAttribute("content");
91 Cookies.setCookie(PageEditor.getEditorContentIdUniqueCookieName(), contentId);
92
93 if (model.getEditBar(mgnlElement) != null) {
94 model.getEditBar(mgnlElement).setVisible(visible);
95 }
96 if (model.getAreaEndBar(mgnlElement) != null) {
97 model.getAreaEndBar(mgnlElement).setVisible(visible);
98 }
99
100
101 for (MgnlElement area : mgnlElement.getAreas()) {
102
103 if (model.getAreaPlaceHolder(area) != null) {
104 model.getAreaPlaceHolder(area).setVisible(visible);
105 }
106 }
107
108 for (MgnlElement component : mgnlElement.getComponents()) {
109
110
111 if (model.getEditBar(component) != null) {
112 model.getEditBar(component).setVisible(visible);
113 }
114
115 for (MgnlElement area : component.getAreas()) {
116
117 if (model.getAreaPlaceHolder(area) != null) {
118 model.getAreaPlaceHolder(area).setVisible(visible);
119 }
120 }
121 }
122
123 if (model.getAreaPlaceHolder(mgnlElement)!= null) {
124 if (mgnlElement.getParent() != null) {
125 model.getAreaPlaceHolder(mgnlElement).setVisible(visible);
126 }
127 model.getAreaPlaceHolder(mgnlElement).setActive(visible);
128 }
129
130 if (model.getComponentPlaceHolder(mgnlElement) != null) {
131 model.getComponentPlaceHolder(mgnlElement).setVisible(visible);
132 }
133 model.setSelectedMgnlElement(mgnlElement);
134
135 }
136
137 private void deSelect() {
138 if (model.getSelectedMgnlElement() != null && model.getSelectedMgnlElement().getParentArea() != null) {
139 toggleSelection(model.getSelectedMgnlElement().getParentArea(), false);
140 model.setSelectedMgnlElement(null);
141 }
142 }
143
144 @Override
145 public void toggleRootAreaBar(boolean visible) {
146 deSelect();
147
148 this.rootSelected = !this.rootSelected;
149 for (MgnlElement root : model.getRootElements()) {
150 if (model.getEditBar(root) != null) {
151 model.getEditBar(root).setVisible(visible);
152 }
153 if (model.getAreaEndBar(root) != null) {
154 model.getAreaEndBar(root).setVisible(visible);
155 }
156 if (model.getAreaPlaceHolder(root) != null) {
157 model.getAreaPlaceHolder(root).setVisible(visible);
158 }
159 }
160 }
161
162 private void showRootPlaceHolder() {
163 for (MgnlElement root : model.getRootElements()) {
164 if (model.getAreaPlaceHolder(root) != null) {
165 model.getAreaPlaceHolder(root).setVisible(true);
166 model.getAreaPlaceHolder(root).setActive(false);
167 }
168 }
169 }
170
171 private void hideRoot() {
172 for (MgnlElement root : model.getRootElements()) {
173 if (model.getEditBar(root) != null) {
174 model.getEditBar(root).setVisible(false);
175 }
176 if (model.getAreaEndBar(root) != null) {
177 model.getAreaEndBar(root).setVisible(false);
178 }
179 if (model.getComponentPlaceHolder(root) != null) {
180 model.getComponentPlaceHolder(root).setVisible(false);
181 }
182 if (model.getAreaPlaceHolder(root) != null) {
183 model.getAreaPlaceHolder(root).addStyleName("inactive");
184 }
185 }
186 }
187 }