loleaflet/src/layer/marker/DivOverlay.js  |    8 ++
 loleaflet/src/layer/tile/CalcTileLayer.js |  105 ++++++++++++++++++++----------
 2 files changed, 79 insertions(+), 34 deletions(-)

New commits:
commit 63c766250875a2f2a069ea6171b0119107ed98c8
Author: Henry Castro <hcas...@collabora.com>
Date:   Wed Mar 15 23:22:56 2017 -0400

    loleaflet: fix annotations of each sheet
    
    Change-Id: Ie3169a051523ea99a9d1108b5d921fd6c045ed3d

diff --git a/loleaflet/src/layer/marker/DivOverlay.js 
b/loleaflet/src/layer/marker/DivOverlay.js
index c2b3623..a562d72 100644
--- a/loleaflet/src/layer/marker/DivOverlay.js
+++ b/loleaflet/src/layer/marker/DivOverlay.js
@@ -19,7 +19,6 @@ L.DivOverlay = L.Layer.extend({
 
        onRemove: function (map) {
                map.removeLayer(this._annotation);
-               this.unbindAnnotation();
                map._panes.overlayPane.removeChild(this._container);
        },
 
@@ -59,6 +58,13 @@ L.DivOverlay = L.Layer.extend({
                }
        },
 
+       closePopup: function () {
+               if (this._map && this._annotation) {
+                       this._annotation.show();
+                       this._map.removeLayer(this._annotation);
+               }
+       },
+
        closeAnnotation: function (e) {
                if (this._map && this._annotation && 
this._map.hasLayer(this._annotation) &&
                    !this._annotation.isEdit() &&
diff --git a/loleaflet/src/layer/tile/CalcTileLayer.js 
b/loleaflet/src/layer/tile/CalcTileLayer.js
index 4fbf4d1..35877c6 100644
--- a/loleaflet/src/layer/tile/CalcTileLayer.js
+++ b/loleaflet/src/layer/tile/CalcTileLayer.js
@@ -13,27 +13,29 @@ L.CalcTileLayer = L.TileLayer.extend({
        },
 
        newAnnotation: function (comment) {
+               var annotations = 
this._annotations[this._partNames[this._selectedPart]];
                var annotation;
-               for (var key in this._annotations) {
-                       if 
(this._cellCursor.contains(this._annotations[key]._annotation._data.cellPos)) {
-                               annotation = this._annotations[key];
+               for (var key in annotations) {
+                       if 
(this._cellCursor.contains(annotations[key]._annotation._data.cellPos)) {
+                               annotation = annotations[key];
                                break;
                        }
                }
 
-               if (annotation) {
-                       annotation.editAnnotation();
-               } else {
+               if (!annotation) {
                        comment.cellPos = this._cellCursor;
-                       this.addAnnotation(comment).editAnnotation();
+                       annotation = this.createAnnotation(comment);
+                       annotation._annotation._tag = annotation;
+                       this.showAnnotation(annotation);
                }
+               annotation.editAnnotation();
        },
 
-       addAnnotation: function (comment) {
+       createAnnotation: function (comment) {
                var annotation = 
L.divOverlay(comment.cellPos).bindAnnotation(L.annotation(L.latLng(0, 0), 
comment));
                annotation.mark = L.marker(comment.cellPos.getNorthEast(), {
                        draggable: false,
-                       clickable:false,
+                       clickable: false,
                        keyboard: false,
                        icon: L.divIcon({
                                iconSize: L.point(2, 2),
@@ -41,23 +43,22 @@ L.CalcTileLayer = L.TileLayer.extend({
                                className: 'loleaflet-cell-annotation'
                        })
                });
-               this._map.addLayer(annotation);
-               this._map.addLayer(annotation.mark);
-               this._annotations[comment.id] = annotation;
                return annotation;
        },
 
        beforeAdd: function (map) {
                map._addZoomLimit(this);
                map.on('zoomend', this._onZoomRowColumns, this);
+               map.on('updateparts', this._onUpdateParts, this);
                map.on('AnnotationCancel', this._onAnnotationCancel, this);
                map.on('AnnotationSave', this._onAnnotationSave, this);
        },
 
        clearAnnotations: function () {
-               for (var key in this._annotations) {
-                       this._map.removeLayer(this._annotations[key].mark);
-                       this._map.removeLayer(this._annotations[key]);
+               for (var tab in this._annotations) {
+                       for (var key in this._annotations[tab]) {
+                               
this.hideAnnotation(this._annotations[tab][key]);
+                       }
                }
                this._annotations = {};
        },
@@ -79,21 +80,41 @@ L.CalcTileLayer = L.TileLayer.extend({
                                value: id
                        }
                };
-               this._map.sendUnoCommand('.uno:DeleteComment', comment);
-               this.removeAnnotation(id);
+               var tab = id.substring(0, id.indexOf('.'));
+               this._map.sendUnoCommand('.uno:DeleteNote', comment);
+               this._annotations[tab][id].closePopup();
                this._map.focus();
        },
 
-       removeAnnotation: function (id) {
-               var annotation = this._annotations[id];
+       showAnnotation: function (annotation) {
+               this._map.addLayer(annotation.mark);
+               this._map.addLayer(annotation);
+       },
+
+       hideAnnotation: function (annotation) {
                this._map.removeLayer(annotation.mark);
                this._map.removeLayer(annotation);
-               delete this._annotations[id];
+       },
+
+       showAnnotations: function () {
+               var annotations = 
this._annotations[this._partNames[this._selectedPart]];
+               for (var key in annotations) {
+                       this.showAnnotation(annotations[key]);
+               }
+       },
+
+       hideAnnotations: function (part) {
+               var annotations = this._annotations[this._partNames[part]];
+               for (var key in annotations) {
+                       this.hideAnnotation(annotations[key]);
+               }
        },
 
        _onAnnotationCancel: function (e) {
                if (e.annotation._data.id === 'new') {
-                       this.removeAnnotation(e.annotation._data.id);
+                       this.hideAnnotation(e.annotation._tag);
+               } else {
+                       
this._annotations[e.annotation._data.tab][e.annotation._data.id].closePopup();
                }
                this._map.focus();
        },
@@ -112,6 +133,7 @@ L.CalcTileLayer = L.TileLayer.extend({
                                }
                        };
                        this._map.sendUnoCommand('.uno:InsertAnnotation', 
comment);
+                       this.hideAnnotation(e.annotation._tag);
                } else {
                        comment = {
                                Id: {
@@ -124,30 +146,41 @@ L.CalcTileLayer = L.TileLayer.extend({
                                }
                        };
                        this._map.sendUnoCommand('.uno:EditAnnotation', 
comment);
+                       
this._annotations[e.annotation._data.tab][e.annotation._data.id].closePopup();
                }
                this._map.focus();
        },
 
+       _onUpdateParts: function (e) {
+               if (typeof this._prevSelectedPart === 'number' && !e.source) {
+                       this.hideAnnotations(this._prevSelectedPart);
+                       this.showAnnotations();
+               }
+       },
+
        _onMessage: function (textMsg, img) {
                if (textMsg.startsWith('comment:')) {
                        var obj = 
JSON.parse(textMsg.substring('comment:'.length + 1));
+                       obj.comment.tab = obj.comment.id.substring(0, 
obj.comment.id.indexOf('.'));
                        obj.comment.cellPos = 
L.LOUtil.stringToBounds(obj.comment.cellPos);
                        obj.comment.cellPos = 
L.latLngBounds(this._twipsToLatLng(obj.comment.cellPos.getBottomLeft()),
                                
this._twipsToLatLng(obj.comment.cellPos.getTopRight()));
                        if (obj.comment.action === 'Add') {
-                               var added = this._annotations['new'];
-                               if (added) {
-                                       added._annotation._data = obj.comment;
-                                       
added.setLatLngBounds(obj.comment.cellPos);
-                               } else {
-                                       this.addAnnotation(obj.comment);
+                               if (!this._annotations[obj.comment.tab]) {
+                                       this._annotations[obj.comment.tab] = {};
+                               }
+                               
this._annotations[obj.comment.tab][obj.comment.id] = 
this.createAnnotation(obj.comment);
+                               if (obj.comment.tab === 
this._partNames[this._selectedPart]) {
+                                       
this.showAnnotation(this._annotations[obj.comment.tab][obj.comment.id]);
                                }
                        } else if (obj.comment.action === 'Remove') {
-                               if (this._annotations[obj.comment.id]) {
-                                       this.removeAnnotation(obj.comment.id);
+                               var removed = 
this._annotations[obj.comment.tab][obj.comment.id];
+                               if (removed) {
+                                       this.hideAnnotation(removed);
+                                       delete 
annotations[obj.comment.tab][obj.comment.id];
                                }
                        } else if (obj.comment.action === 'Modify') {
-                               var modified = 
this._annotations[obj.comment.id];
+                               var modified = 
this._annotations[obj.comment.tab][obj.comment.id];
                                if (modified) {
                                        modified._annotation._data = 
obj.comment;
                                        
modified.setLatLngBounds(obj.comment.cellPos);
@@ -342,12 +375,13 @@ L.CalcTileLayer = L.TileLayer.extend({
                        this._documentInfo = textMsg;
                        var partNames = textMsg.match(/[^\r\n]+/g);
                        // only get the last matches
-                       partNames = partNames.slice(partNames.length - 
this._parts);
+                       this._partNames = partNames.slice(partNames.length - 
this._parts);
                        this._map.fire('updateparts', {
                                selectedPart: this._selectedPart,
                                parts: this._parts,
                                docType: this._docType,
-                               partNames: partNames
+                               partNames: this._partNames,
+                               source: 'status'
                        });
                        this._resetPreFetching(true);
                        this._update();
@@ -377,11 +411,16 @@ L.CalcTileLayer = L.TileLayer.extend({
                        this.clearAnnotations();
                        for (var index in values.comments) {
                                comment = values.comments[index];
+                               comment.tab = comment.id.substring(0, 
comment.id.indexOf('.'));
                                comment.cellPos = 
L.LOUtil.stringToBounds(comment.cellPos);
                                comment.cellPos = 
L.latLngBounds(this._twipsToLatLng(comment.cellPos.getBottomLeft()),
                                        
this._twipsToLatLng(comment.cellPos.getTopRight()));
-                               this.addAnnotation(comment);
+                               if (!this._annotations[comment.tab]) {
+                                       this._annotations[comment.tab] = {};
+                               }
+                               this._annotations[comment.tab][comment.id] = 
this.createAnnotation(comment);
                        }
+                       this.showAnnotations();
                }
                else {
                        L.TileLayer.prototype._onCommandValuesMsg.call(this, 
textMsg);
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to