source: gs3-extensions/map-editor/DrawingManager/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.3 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 cloneMarker(marker) {
192 var position = marker.getPosition();
193 var anchorPoint = marker.anchorPoint;
194 var clone_marker = new google.maps.Marker({
195 anchorPoint: anchorPoint,
196 position : position,
197 clickable: true,
198 draggable: true,
199 editable: false
200 })
201 clone_marker.type = google.maps.drawing.OverlayType.MARKER;
202
203 return clone_marker;
204}
205
206function cloneShape(shape) {
207 if (shape.type === google.maps.drawing.OverlayType.POLYLINE) {
208 var clone_polyline = clonePolyline(shape);
209 return clone_polyline;
210 } else if (shape.type === google.maps.drawing.OverlayType.POLYGON) {
211 var clone_polygon = clonePolygon(shape);
212 return clone_polygon;
213 } else if (shape.type === google.maps.drawing.OverlayType.RECTANGLE) {
214 var clone_rect = cloneRectangle(shape);
215 return clone_rect;
216
217 } else if (shape.type === google.maps.drawing.OverlayType.CIRCLE) {
218 var clone_circ = cloneCircle(shape);
219 return clone_circ;
220
221 } else {
222 var clone_marker = cloneMarker(shape);
223 return clone_marker;
224 }
225 console.log(cloneShape);
226}
227
228function overlayItemIsShape(overlay_item) {
229 var type = overlay_item.type;
230
231 is_shape = (type === google.maps.drawing.OverlayType.POLYLINE)
232 || (type === google.maps.drawing.OverlayType.POLYGON)
233 || (type === google.maps.drawing.OverlayType.RECTANGLE)
234 || (type === google.maps.drawing.OverlayType.CIRCLE);
235
236 return is_shape;
237}
238
239function historyOverlayPush() {
240 undoneOverlays = [];
241 var overlays_copy = [];
242 for (var i = 0; i < overlays.length; i++) {
243
244 var clone_shape = cloneShape(overlays[i]);
245 if (overlayItemIsShape(clone_shape)) {
246 addShapeListeners(clone_shape, null); // don't have an overlay event!
247 } else {
248 addMarkerListeners(clone_shape, null); // don't have an overlay event!
249 }
250 overlays_copy[i] = clone_shape;
251 }
252
253 prevOverlays.push(overlays_copy);
254
255}
256
257function presentOverlayPush() {
258 if (resizeEntry) {
259 prevOverlays.push(presentOverlays[0]);
260 }
261 presentOverlays = [];
262 var overlays_copy = [];
263 for (var i = 0; i < overlays.length; i++) {
264 var clone_shape = cloneShape(overlays[i]);
265 if (overlayItemIsShape(clone_shape)) {
266 addShapeListeners(clone_shape, null); // don't have an overlay event!
267 } else {
268 addMarkerListeners(clone_shape, null); // don't have an overlay event!
269 }
270 overlays_copy[i] = clone_shape;
271 }
272 presentOverlays.push(overlays_copy);
273}
274
275function undoneOverlaysPush() {
276 var conditionUndone = presentOverlays[presentOverlays.length - 1] !== undefined;
277
278 if (conditionUndone) {
279 undoneOverlays.push(presentOverlays[0]);
280 }
281 presentOverlays = [];
282 var conditionPresent = prevOverlays[prevOverlays.length - 1] !== undefined;
283
284 if (conditionPresent) {
285 presentOverlays.push(prevOverlays[prevOverlays.length - 1]);
286
287 }
288}
Note: See TracBrowser for help on using the repository browser.