loleaflet/dist/toolbar/toolbar.js     |   17 ++++++++-
 loleaflet/src/layer/marker/Cursor.js  |   10 +++++
 loleaflet/src/layer/tile/TileLayer.js |   60 +++++++++++++++++++++++++++++++++-
 3 files changed, 84 insertions(+), 3 deletions(-)

New commits:
commit 49f4e696e517b5f278aab465eebccaae9d8cc675
Author: Pranav Kant <pran...@collabora.co.uk>
Date:   Thu Oct 20 17:21:50 2016 +0530

    loleaflet: Click user item to go to its cursor
    
    Change-Id: Iac87da20cfe422000eb9a32ccad50e8483637616

diff --git a/loleaflet/dist/toolbar/toolbar.js 
b/loleaflet/dist/toolbar/toolbar.js
index dc2b8b5..366e3ec 100644
--- a/loleaflet/dist/toolbar/toolbar.js
+++ b/loleaflet/dist/toolbar/toolbar.js
@@ -1308,11 +1308,24 @@ map.on('statusindicator', function (e) {
        }
 });
 
+function onUseritemClicked(e) {
+       var viewId = parseInt(e.currentTarget.id.replace('user-', ''));
+
+       if (map._docLayer) {
+               if (map.getDocType() === 'spreadsheet') {
+                       map._docLayer.goToCellViewCursor(viewId);
+               } else if (map.getDocType() === 'text') {
+                       map._docLayer.goToViewCursor(viewId);
+               }
+       }
+}
+
 function getUserItem(viewId, userName, color) {
-       var html = '<tr class="useritem" id="user-' + viewId + '">' +
+       var html = '<tr class="useritem" id="user-' + viewId + '" 
onclick="onUseritemClicked(event)">' +
                     '<td class=usercolor style="background-color: ' + color  
+';"></td>' +
                     '<td class="username loleaflet-font">' + userName + 
'</td>' +
-                  '</tr>';
+           '</tr>';
+
        return html;
 }
 var nUsers = _('%n users');
diff --git a/loleaflet/src/layer/marker/Cursor.js 
b/loleaflet/src/layer/marker/Cursor.js
index 1335e8e..0a5e622 100644
--- a/loleaflet/src/layer/marker/Cursor.js
+++ b/loleaflet/src/layer/marker/Cursor.js
@@ -64,6 +64,16 @@ L.Cursor = L.Layer.extend({
                }
        },
 
+       showCursorHeader: function() {
+               if (this._cursorHeader) {
+                       L.DomUtil.setStyle(this._cursorHeader, 'visibility', 
'visible');
+
+                       setTimeout(L.bind(function() {
+                               L.DomUtil.setStyle(this._cursorHeader, 
'visibility', 'hidden');
+                       }, this), this.options.headerTimeout);
+               }
+       },
+
        _initLayout: function () {
                this._container = L.DomUtil.create('div', 
'leaflet-cursor-container');
                if (this.options.header) {
diff --git a/loleaflet/src/layer/tile/TileLayer.js 
b/loleaflet/src/layer/tile/TileLayer.js
index d8836d5..8eeb44f 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -701,6 +701,43 @@ L.TileLayer = L.GridLayer.extend({
                }
        },
 
+       goToCellViewCursor: function(viewId) {
+               if (this._cellViewCursors[viewId] && 
!this._isEmptyRectangle(this._cellViewCursors[viewId].bounds)) {
+                       if 
(!this._map.getBounds().contains(this._cellViewCursors[viewId].bounds)) {
+                               var mapBounds = this._map.getBounds();
+                               var scrollX = 0;
+                               var scrollY = 0;
+                               var spacingX = 
Math.abs(this._cellViewCursors[viewId].bounds.getEast() - 
this._cellViewCursors[viewId].bounds.getWest()) / 4.0;
+                               var spacingY = 
Math.abs(this._cellViewCursors[viewId].bounds.getSouth() - 
this._cellViewCursors[viewId].bounds.getNorth()) / 4.0;
+                               if 
(this._cellViewCursors[viewId].bounds.getWest() < mapBounds.getWest()) {
+                                       scrollX = 
this._cellViewCursors[viewId].bounds.getWest() - mapBounds.getWest() - spacingX;
+                               } else if 
(this._cellViewCursors[viewId].bounds.getEast() > mapBounds.getEast()) {
+                                       scrollX = 
this._cellViewCursors[viewId].bounds.getEast() - mapBounds.getEast() + spacingX;
+                               }
+
+                               if 
(this._cellViewCursors[viewId].bounds.getNorth() > mapBounds.getNorth()) {
+                                       scrollY = 
this._cellViewCursors[viewId].bounds.getNorth() - mapBounds.getNorth() + 
spacingY;
+                               } else if 
(this._cellViewCursors[viewId].bounds.getSouth() < mapBounds.getSouth()) {
+                                       scrollY = 
this._cellViewCursors[viewId].bounds.getSouth() - mapBounds.getSouth() - 
spacingY;
+                               }
+
+                               if (scrollX !== 0 || scrollY !== 0) {
+                                       var newCenter = mapBounds.getCenter();
+                                       newCenter.lat += scrollX;
+                                       newCenter.lat += scrollY;
+                                       var center = 
this._map.project(newCenter);
+                                       center = 
center.subtract(this._map.getSize().divideBy(2));
+                                       center.x = Math.round(center.x < 0 ? 0 
: center.x);
+                                       center.y = Math.round(center.y < 0 ? 0 
: center.y);
+                                       this._map.fire('scrollto', {x: 
center.x, y: center.y});
+                               }
+                       }
+
+                       var borderColor = 
L.LOUtil.rgbToHex(this._map.getViewColor(viewId));
+                       
this._cellViewCursors[viewId].marker.bindPopup(this._map.getViewName(viewId), 
{autoClose: false, autoPan: false, borderColor: borderColor});
+               }
+       },
+
        _onViewCursorVisibleMsg: function(textMsg) {
                textMsg = textMsg.substring('viewcursorvisible:'.length + 1);
                var obj = JSON.parse(textMsg);
@@ -1264,6 +1301,27 @@ L.TileLayer = L.GridLayer.extend({
                }
        },
 
+       goToViewCursor: function(viewId) {
+               if (viewId === this._viewId) {
+                       this._onUpdateCursor();
+                       return;
+               }
+
+               if (this._viewCursors[viewId] && 
this._viewCursors[viewId].visible && 
!this._isEmptyRectangle(this._viewCursors[viewId].bounds)) {
+                       if 
(!this._map.getBounds().contains(this._viewCursors[viewId].bounds)) {
+                               var viewCursorPos = 
this._viewCursors[viewId].bounds.getNorthWest();
+                               var center = this._map.project(viewCursorPos);
+                               center = 
center.subtract(this._map.getSize().divideBy(2));
+                               center.x = Math.round(center.x < 0 ? 0 : 
center.x);
+                               center.y = Math.round(center.y < 0 ? 0 : 
center.y);
+
+                               this._map.fire('scrollto', {x: center.x, y: 
center.y});
+                       }
+
+                       this._viewCursors[viewId].marker.showCursorHeader();
+               }
+       },
+
        _onUpdateTextViewSelection: function (viewId) {
                viewId = parseInt(viewId);
                var viewPolygons = this._viewSelections[viewId].polygons;
@@ -1443,7 +1501,7 @@ L.TileLayer = L.GridLayer.extend({
                                        }
                                }
                                else {
-                                       var spacingX = 
Math.abs((this._cellCursor.getEast() - this._cellCursor.getWest())) / 4.0;
+                                       var spacingX = 
Math.abs(this._cellCursor.getEast() - this._cellCursor.getWest()) / 4.0;
                                        var spacingY = 
Math.abs((this._cellCursor.getSouth() - this._cellCursor.getNorth())) / 4.0;
                                        if (horizontalDirection === -1 && 
this._cellCursor.getWest() < mapBounds.getWest()) {
                                                scrollX = 
this._cellCursor.getWest() - mapBounds.getWest() - spacingX;
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to