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
RevLine 
[32710]1var prevOverlays = [];
[32722]2var presentOverlays = [];
3var undoneOverlays = [];
[32723]4var enableSelectionFeature = false;
[32710]5
[32721]6function undo() {
[32722]7
[32710]8 for (var i = 0; i < overlays.length; i++) {
9 overlays[i].setMap(null);
10
11 }
[32722]12 if (prevOverlays.length != 0) {
13 selectedShapes = [];
[32721]14 overlays = [];
[32722]15 undoneOverlaysPush();
[32721]16 var prev_overlay = prevOverlays.pop();
17
[32722]18 if(prev_overlay.length > 0) {
19 for (var i = 0; i < prev_overlay.length; i++) {
[32721]20 overlays[i] = prev_overlay[i];
21 overlays[i].setMap(map);
[32722]22 }
[32721]23 }
24
[32722]25
[32721]26 }
[32722]27
[32721]28 //Deactivated at the moment
[32722]29 if (enableSelectionFeature) {
[32721]30 selectedShapes = [];
31 var i = 0;
[32722]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++) {
[32721]36 selectedShapes.push(prevOverlays)
37 console.log("comes here");
38 }
[32722]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 }
[32723]56 var conditionPrevious = presentOverlays[presentOverlays.length - 1] !== undefined ;
[32721]57
[32722]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
[32721]67 }
[32722]68
[32710]69}
70
[32722]71function clonePath(path) {
[32710]72 var clone_path = [];
[32722]73
[32710]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 }
[32722]83
[32710]84 return clone_path;
85}
86
[32722]87function clonePolyline(polyline) {
88 var path = polyline.getPath();
89 var geodesic = polyline.geodesic;
90 var strokeColor = polyline.strokeColor;
[32710]91 var strokeOpacity = polyline.strokeOpacity;
[32722]92 var strokeWeight = polyline.strokeWeight;
93 var clone_path = clonePath(path);
[32721]94 //var editable = rect.editable;
[32722]95
[32710]96 var clone_polyline = new google.maps.Polyline({
[32722]97 geodesic: geodesic,
98 strokeColor: strokeColor,
99 strokeOpacity: strokeOpacity,
100 strokeWeight: strokeWeight,
101 path: clone_path,
102 draggable: true,
103 editable: false
104 });
105
[32710]106 clone_polyline.type = google.maps.drawing.OverlayType.POLYLINE;
[32722]107
[32710]108 return clone_polyline;
109}
110
[32722]111function clonePolygon(polygon) {
112 var path = polygon.getPath();
113 var geodesic = polygon.geodesic;
114 var strokeColor = polygon.strokeColor;
[32710]115 var strokeOpacity = polygon.strokeOpacity;
[32722]116 var strokeWeight = polygon.strokeWeight;
117 var fillColor = polygon.fillColor;
118 var fillOpacity = polygon.fillOpacity;
119 var clone_path = clonePath(path);
[32721]120 //var editable = rect.editable;
[32722]121
[32710]122 var clone_polygon = new google.maps.Polygon({
[32722]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
[32710]134 clone_polygon.type = google.maps.drawing.OverlayType.POLYGON;
[32722]135
[32710]136 return clone_polygon;
137}
138
[32722]139function cloneRectangle(rect) {
140 var strokeColor = rect.strokeColor;
[32710]141 var strokeOpacity = rect.strokeOpacity;
[32722]142 var strokeWeight = rect.strokeWeight;
143 var fillColor = rect.fillColor;
144 var fillOpacity = rect.fillOpacity;
145 var bounds = rect.getBounds();
[32721]146 //var editable = rect.editable;
[32722]147
[32710]148 var clone_rect = new google.maps.Rectangle({
[32722]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
[32710]159 clone_rect.type = google.maps.drawing.OverlayType.RECTANGLE;
[32722]160
[32710]161 return clone_rect;
162}
163
[32722]164function cloneCircle(circ) {
165 var strokeColor = circ.strokeColor;
[32710]166 var strokeOpacity = circ.strokeOpacity;
[32722]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;
[32721]172 //var editable = rect.editable;
[32722]173
[32710]174 var clone_circ = new google.maps.Circle({
[32722]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
[32710]186 clone_circ.type = google.maps.drawing.OverlayType.CIRCLE;
[32722]187
[32710]188 return clone_circ;
189}
190
[32723]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
[32722]206function cloneShape(shape) {
[32710]207 if (shape.type === google.maps.drawing.OverlayType.POLYLINE) {
208 var clone_polyline = clonePolyline(shape);
209 return clone_polyline;
[32722]210 } else if (shape.type === google.maps.drawing.OverlayType.POLYGON) {
[32710]211 var clone_polygon = clonePolygon(shape);
212 return clone_polygon;
[32722]213 } else if (shape.type === google.maps.drawing.OverlayType.RECTANGLE) {
[32710]214 var clone_rect = cloneRectangle(shape);
215 return clone_rect;
[32722]216
217 } else if (shape.type === google.maps.drawing.OverlayType.CIRCLE) {
[32710]218 var clone_circ = cloneCircle(shape);
219 return clone_circ;
[32722]220
221 } else {
[32723]222 var clone_marker = cloneMarker(shape);
223 return clone_marker;
[32710]224 }
[32722]225 console.log(cloneShape);
[32710]226}
227
[32722]228function overlayItemIsShape(overlay_item) {
[32721]229 var type = overlay_item.type;
[32722]230
[32721]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);
[32722]235
236 return is_shape;
[32721]237}
238
[32722]239function historyOverlayPush() {
240 undoneOverlays = [];
[32710]241 var overlays_copy = [];
[32722]242 for (var i = 0; i < overlays.length; i++) {
[32723]243
[32710]244 var clone_shape = cloneShape(overlays[i]);
[32721]245 if (overlayItemIsShape(clone_shape)) {
[32722]246 addShapeListeners(clone_shape, null); // don't have an overlay event!
247 } else {
248 addMarkerListeners(clone_shape, null); // don't have an overlay event!
[32721]249 }
[32722]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!
[32721]269 }
[32710]270 overlays_copy[i] = clone_shape;
271 }
[32722]272 presentOverlays.push(overlays_copy);
[32710]273}
[32722]274
275function undoneOverlaysPush() {
[32723]276 var conditionUndone = presentOverlays[presentOverlays.length - 1] !== undefined;
[32722]277
278 if (conditionUndone) {
279 undoneOverlays.push(presentOverlays[0]);
280 }
281 presentOverlays = [];
[32723]282 var conditionPresent = prevOverlays[prevOverlays.length - 1] !== undefined;
[32722]283
284 if (conditionPresent) {
285 presentOverlays.push(prevOverlays[prevOverlays.length - 1]);
286
287 }
288}
Note: See TracBrowser for help on using the repository browser.