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