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

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

Complete redo and undo and fixed marker drawing bug

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