source: gs3-extensions/map-editor/DrawingManager/historyManager.js@ 32732

Last change on this file since 32732 was 32732, checked in by ak19, 5 years ago

Work to eliminate a undo history bug, and fixed the selection issue.

File size: 8.3 KB
Line 
1var prevOverlays = [];
2var presentOverlays = [];
3var undoneOverlays = [];
4var cycleComplete = true;
5
6function undo() {
7
8 for (var i = 0; i < overlays.length; i++) {
9 overlays[i].setMap(null);
10 }
11 if (prevOverlays.length != 0) {
12 selectedShapes = [];
13 overlays = [];
14 undoneOverlaysPush();
15 var prev_overlay = prevOverlays.pop();
16
17 if (prev_overlay.length > 0) {
18 for (var i = 0; i < prev_overlay.length; i++) {
19 overlays[i] = prev_overlay[i];
20 overlays[i].setMap(map);
21 overlays[i].draggable = draggableState;
22 }
23 }
24 }
25}
26
27function redo() {
28
29 if (undoneOverlays.length != 0) {
30 selectedShapes = [];
31 for (var i = 0; i < overlays.length; i++) {
32 overlays[i].setMap(null);
33 }
34
35 overlays = [];
36 var lastEntry = undoneOverlays[undoneOverlays.length - 1];
37 for (var i = 0; i < lastEntry.length; i++) {
38 overlays[i] = lastEntry[i];
39 overlays[i].setMap(map);
40 overlays[i].draggable = draggableState;
41 }
42
43 var conditionPrevious = presentOverlays[0];
44 if (conditionPrevious !== undefined) {
45 if (conditionPrevious.length == 0) {
46 prevOverlays.push(presentOverlays[0]);
47 } else {
48 var overlays_copy = [];
49 for (var i = 0; i < presentOverlays[0].length; i++) {
50 var clone_shape = cloneShape(presentOverlays[0][i]);
51 if (overlayItemIsShape(clone_shape)) {
52 addShapeListeners(clone_shape, null);
53 } else {
54 addMarkerListeners(clone_shape, null);
55 }
56 overlays_copy[i] = clone_shape;
57 }
58 prevOverlays.push(overlays_copy);
59 }
60 }
61 presentOverlays = [];
62 presentOverlays.push(undoneOverlays[undoneOverlays.length - 1]);
63 undoneOverlays.pop();
64 }
65}
66
67function clonePath(path) {
68 var clone_path = [];
69
70 for (var i = 0; i < path.length; i++) {
71 var lati = path.getAt(i).lat();
72 var lngi = path.getAt(i).lng();
73 clone_lat_lng = {
74 lat: lati,
75 lng: lngi
76 };
77 clone_path.push(clone_lat_lng);
78 }
79
80 return clone_path;
81}
82
83function clonePolyline(polyline) {
84 var path = polyline.getPath();
85 var geodesic = polyline.geodesic;
86 var strokeColor = polyline.strokeColor;
87 var strokeOpacity = polyline.strokeOpacity;
88 var strokeWeight = polyline.strokeWeight;
89 var clone_path = clonePath(path);
90 //var editable = rect.editable;
91
92 var clone_polyline = new google.maps.Polyline({
93 geodesic: geodesic,
94 strokeColor: strokeColor,
95 strokeOpacity: strokeOpacity,
96 strokeWeight: strokeWeight,
97 path: clone_path,
98 draggable: draggableState,
99 editable: false
100 });
101
102 clone_polyline.type = google.maps.drawing.OverlayType.POLYLINE;
103
104 return clone_polyline;
105}
106
107function clonePolygon(polygon) {
108 var path = polygon.getPath();
109 var geodesic = polygon.geodesic;
110 var strokeColor = polygon.strokeColor;
111 var strokeOpacity = polygon.strokeOpacity;
112 var strokeWeight = polygon.strokeWeight;
113 var fillColor = polygon.fillColor;
114 var fillOpacity = polygon.fillOpacity;
115 var clone_path = clonePath(path);
116 //var editable = rect.editable;
117
118 var clone_polygon = new google.maps.Polygon({
119 geodesic: geodesic,
120 strokeColor: strokeColor,
121 strokeOpacity: strokeOpacity,
122 strokeWeight: strokeWeight,
123 fillColor: fillColor,
124 fillOpacity: fillOpacity,
125 path: clone_path,
126 draggable: draggableState,
127 editable: false
128 });
129
130 clone_polygon.type = google.maps.drawing.OverlayType.POLYGON;
131
132 return clone_polygon;
133}
134
135function cloneRectangle(rect) {
136 var strokeColor = rect.strokeColor;
137 var strokeOpacity = rect.strokeOpacity;
138 var strokeWeight = rect.strokeWeight;
139 var fillColor = rect.fillColor;
140 var fillOpacity = rect.fillOpacity;
141 var bounds = rect.getBounds();
142 var type = rect.type;
143 //var editable = rect.editable;
144
145 var clone_rect = new google.maps.Rectangle({
146 strokeColor: strokeColor,
147 strokeOpacity: strokeOpacity,
148 strokeWeight: strokeWeight,
149 fillColor: fillColor,
150 fillOpacity: fillOpacity,
151 bounds: bounds,
152 draggable: draggableState,
153 editable: false,
154 type: type
155 });
156
157 clone_rect.type = google.maps.drawing.OverlayType.RECTANGLE;
158
159 return clone_rect;
160}
161
162function cloneCircle(circ) {
163 var strokeColor = circ.strokeColor;
164 var strokeOpacity = circ.strokeOpacity;
165 var strokeWeight = circ.strokeWeight;
166 var fillColor = circ.fillColor;
167 var fillOpacity = circ.fillOpacity;
168 var center = circ.center;
169 var radius = circ.radius;
170 //var editable = rect.editable;
171
172 var clone_circ = new google.maps.Circle({
173 strokeColor: strokeColor,
174 strokeOpacity: strokeOpacity,
175 strokeWeight: strokeWeight,
176 fillColor: fillColor,
177 fillOpacity: fillOpacity,
178 center: center,
179 radius: radius,
180 draggable: draggableState,
181 editable: false
182 });
183
184 clone_circ.type = google.maps.drawing.OverlayType.CIRCLE;
185
186 return clone_circ;
187}
188
189function cloneMarker(marker) {
190 var position = marker.getPosition();
191 var anchorPoint = marker.anchorPoint;
192 var clone_marker = new google.maps.Marker({
193 anchorPoint: anchorPoint,
194 position: position,
195 clickable: true,
196 draggable: draggableState,
197 editable: false
198 })
199 clone_marker.type = google.maps.drawing.OverlayType.MARKER;
200
201 return clone_marker;
202}
203
204function cloneShape(shape) {
205 if (shape.type === google.maps.drawing.OverlayType.POLYLINE) {
206 var clone_polyline = clonePolyline(shape);
207 return clone_polyline;
208 } else if (shape.type === google.maps.drawing.OverlayType.POLYGON) {
209 var clone_polygon = clonePolygon(shape);
210 return clone_polygon;
211 } else if (shape.type === google.maps.drawing.OverlayType.RECTANGLE) {
212 var clone_rect = cloneRectangle(shape);
213 return clone_rect;
214
215 } else if (shape.type === google.maps.drawing.OverlayType.CIRCLE) {
216 var clone_circ = cloneCircle(shape);
217 return clone_circ;
218
219 } else {
220 var clone_marker = cloneMarker(shape);
221 return clone_marker;
222 }
223}
224
225function overlayItemIsShape(overlay_item) {
226 var type = overlay_item.type;
227
228 is_shape = (type === google.maps.drawing.OverlayType.POLYLINE)
229 || (type === google.maps.drawing.OverlayType.POLYGON)
230 || (type === google.maps.drawing.OverlayType.RECTANGLE)
231 || (type === google.maps.drawing.OverlayType.CIRCLE);
232
233 return is_shape;
234}
235
236function historyOverlayPush() {
237 if (cycleComplete) {
238 var overlays_copy = [];
239 for (var i = 0; i < overlays.length; i++) {
240 var clone_shape = cloneShape(overlays[i]);
241
242 if (overlayItemIsShape(clone_shape)) {
243 addShapeListeners(clone_shape, null); // don't have an overlay event!
244 } else {
245 addMarkerListeners(clone_shape, null); // don't have an overlay event!
246 }
247 overlays_copy[i] = clone_shape;
248 }
249 undoneOverlays = [];
250 prevOverlays.push(overlays_copy);
251 }
252
253 cycleComplete = false;
254}
255function presentOverlayPush() {
256
257 OVbeforeClearing = overlays;
258 PObeforeClearing = presentOverlays;
259 presentOverlays = [];
260 var overlays_copy = [];
261 for (var i = 0; i < overlays.length; i++) {
262 var clone_shape = cloneShape(overlays[i]);
263 if (overlayItemIsShape(clone_shape)) {
264 addShapeListeners(clone_shape, null); // don't have an overlay event!
265 } else {
266 addMarkerListeners(clone_shape, null); // don't have an overlay event!
267 }
268 overlays_copy[i] = clone_shape;
269 }
270 presentOverlays.push(overlays_copy);
271 cycleComplete = true;
272
273}
274
275function undoneOverlaysPush() {
276
277 var conditionUndone = presentOverlays[presentOverlays.length - 1] !== undefined;
278
279 if (conditionUndone) {
280 var overlays_copy = [];
281 for (var i = 0; i < presentOverlays[0].length; i++) {
282 var clone_shape = cloneShape(presentOverlays[0][i]);
283 if (overlayItemIsShape(clone_shape)) {
284 addShapeListeners(clone_shape, null); // don't have an overlay event!
285 } else {
286 addMarkerListeners(clone_shape, null); // don't have an overlay event!
287 }
288 overlays_copy[i] = clone_shape;
289 }
290 undoneOverlays.push(overlays_copy);
291 }
292
293 var conditionPresent = prevOverlays[prevOverlays.length - 1] !== undefined;
294
295 if (conditionPresent) {
296 presentOverlays = [];
297 var overlays_copy = [];
298 for (var i = 0; i < prevOverlays[prevOverlays.length - 1].length; i++) {
299 var clone_shape = cloneShape(prevOverlays[prevOverlays.length - 1][i]);
300 if (overlayItemIsShape(clone_shape)) {
301 addShapeListeners(clone_shape, null); // don't have an overlay event!
302 } else {
303 addMarkerListeners(clone_shape, null); // don't have an overlay event!
304 }
305 overlays_copy[i] = clone_shape;
306 }
307 presentOverlays.push(overlays_copy);
308 }
309}
Note: See TracBrowser for help on using the repository browser.