[Libreoffice-commits] online.git: 5 commits - loleaflet/src loolwsd/bundled loolwsd/LOKitClient.cpp loolwsd/LOOLSession.cpp

Andrzej Hunt andrzej.hunt at collabora.com
Thu Nov 5 04:01:44 PST 2015


 loleaflet/src/layer/tile/TileLayer.js                        |   72 ++++++++++-
 loolwsd/LOKitClient.cpp                                      |    1 
 loolwsd/LOOLSession.cpp                                      |    5 
 loolwsd/bundled/include/LibreOfficeKit/LibreOfficeKitEnums.h |    9 +
 4 files changed, 84 insertions(+), 3 deletions(-)

New commits:
commit 96965bec95370e595eb213ed76e8c10ea5c47556
Author: Andrzej Hunt <andrzej.hunt at collabora.com>
Date:   Thu Nov 5 09:57:29 2015 +0100

    loleaflet: update .uno:CellCursor parameter format
    
    This mirrors the parameter format for .uno:ViewRowColumnHeaders

diff --git a/loleaflet/src/layer/tile/TileLayer.js b/loleaflet/src/layer/tile/TileLayer.js
index 60fadd9..3cdf098 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -943,11 +943,11 @@ L.TileLayer = L.GridLayer.extend({
 	// hence we need to request an updated cell cursor position for this level.
 	_onCellCursorShift: function (bForce) {
 		if (this._cellCursorMarker || bForce) {
-			L.Socket.sendMessage('commandvalues command=.uno:CellCursor:'
-			                     + '' + this._tileSize + ','
-			                     + '' + this._tileSize + ','
-			                     + '' + this._tileWidthTwips + ','
-			                     + '' + this._tileHeightTwips );
+			L.Socket.sendMessage('commandvalues command=.uno:CellCursor'
+			                     + '?outputHeight=' + this._tileSize
+			                     + '&outputWidth=' + this._tileSize
+			                     + '&tileHeight=' + this._tileWidthTwips
+			                     + '&tileWidth=' + this._tileHeightTwips );
 		}
 	},
 
commit d9d0d47514fef09d0606abcf7dc48b6b977c8987
Author: Andrzej Hunt <andrzej.hunt at collabora.com>
Date:   Wed Nov 4 15:44:29 2015 +0100

    loleaflet: tdf#94605 Show cell cursor

diff --git a/loleaflet/src/layer/tile/TileLayer.js b/loleaflet/src/layer/tile/TileLayer.js
index 6dc4d1f..60fadd9 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -66,6 +66,10 @@ L.TileLayer = L.GridLayer.extend({
 		this._graphicSelectionTwips = new L.bounds(new L.point(0, 0), new L.point(0, 0));
 		// Rectangle graphic selection
 		this._graphicSelection = new L.LatLngBounds(new L.LatLng(0, 0), new L.LatLng(0, 0));
+		// Original rectangle of cell cursor in twips
+		this._cellCursorTwips = new L.bounds(new L.point(0, 0), new L.point(0, 0));
+		// Rectangle for cell cursor
+		this._cellCursor = new L.LatLngBounds(new L.LatLng(0, 0), new L.LatLng(0, 0));
 		// Position and size of the selection start (as if there would be a cursor caret there).
 
 		this._lastValidPart = -1;
@@ -110,10 +114,21 @@ L.TileLayer = L.GridLayer.extend({
 		map.on('paste', this._onPaste, this);
 		map.on('zoomend', this._onUpdateCursor, this);
 		map.on('zoomend', this._onUpdatePartPageRectangles, this);
+		map.on('zoomend', this._onCellCursorShift, this);
 		map.on('dragstart', this._onDragStart, this);
 		map.on('requestloksession', this._onRequestLOKSession, this);
 		map.on('error', this._mapOnError, this);
 		map.on('resize', this._fitDocumentHorizontally, this);
+		// Retrieve the initial cell cursor position (as LOK only sends us an
+		// updated cell cursor when the selected cell is changed and not the initial
+		// cell).
+		map.on('statusindicator',
+		       function (e) {
+		         if (e.statusType === 'alltilesloaded') {
+		           this._onCellCursorShift(true);
+		         }
+		       },
+		       this);
 		for (var key in this._selectionHandles) {
 			this._selectionHandles[key].on('drag dragend', this._onSelectionHandleDrag, this);
 		}
@@ -204,6 +219,9 @@ L.TileLayer = L.GridLayer.extend({
 		else if (textMsg.startsWith('graphicselection:')) {
 			this._onGraphicSelectionMsg(textMsg);
 		}
+		else if (textMsg.startsWith('cellcursor:')) {
+			this._onCellCursorMsg(textMsg);
+		}
 		else if (textMsg.startsWith('hyperlinkclicked:')) {
 			this._onHyperlinkClickedMsg(textMsg);
 		}
@@ -264,7 +282,9 @@ L.TileLayer = L.GridLayer.extend({
 
 	_onCommandValuesMsg: function (textMsg) {
 		var obj = JSON.parse(textMsg.substring(textMsg.indexOf('{')));
-		if (this._map.unoToolbarCommands.indexOf(obj.commandName) !== -1) {
+		if (obj.commandName === ".uno:CellCursor") {
+			this._onCellCursorMsg(obj.commandValues);
+		} else if (this._map.unoToolbarCommands.indexOf(obj.commandName) !== -1) {
 			this._toolbarCommandValues[obj.commandName] = obj.commandValues;
 			this._map.fire('updatetoolbarcommandvalues', {
 				commandName: obj.commandName,
@@ -335,6 +355,25 @@ L.TileLayer = L.GridLayer.extend({
 		this._onUpdateGraphicSelection();
 	},
 
+	_onCellCursorMsg: function (textMsg) {
+		if (textMsg.match('EMPTY')) {
+			this._cellCursorTwips = new L.bounds(new L.point(0, 0), new L.point(0, 0));
+			this._cellCursor = new L.LatLngBounds(new L.LatLng(0, 0), new L.LatLng(0, 0));
+		}
+		else {
+			var strTwips = textMsg.match(/\d+/g);
+			var topLeftTwips = new L.Point(parseInt(strTwips[0]), parseInt(strTwips[1]));
+			var offset = new L.Point(parseInt(strTwips[2]), parseInt(strTwips[3]));
+			var bottomRightTwips = topLeftTwips.add(offset);
+			this._cellCursorTwips = new L.bounds(topLeftTwips, bottomRightTwips);
+			this._cellCursor = new L.LatLngBounds(
+							this._twipsToLatLng(topLeftTwips, this._map.getZoom()),
+							this._twipsToLatLng(bottomRightTwips, this._map.getZoom()));
+		}
+
+		this._onUpdateCellCursor();
+	},
+
 	_onHyperlinkClickedMsg: function (textMsg) {
 		var link = textMsg.substring(18);
 		window.open(link, '_blank');
@@ -579,6 +618,8 @@ L.TileLayer = L.GridLayer.extend({
 		// hide the graphic selection
 		this._graphicSelection = null;
 		this._onUpdateGraphicSelection();
+		this._cellCursor = null;
+		this._onUpdateCellCursor();
 	},
 
 	_postMouseEvent: function(type, x, y, count, buttons, modifier) {
@@ -735,6 +776,23 @@ L.TileLayer = L.GridLayer.extend({
 		}
 	},
 
+	_onUpdateCellCursor: function () {
+		if (this._cellCursor && !this._isEmptyRectangle(this._cellCursor)) {
+			if (this._cellCursorMarker) {
+				this._map.removeLayer(this._cellCursorMarker);
+			}
+			this._cellCursorMarker = L.rectangle(this._cellCursor, {fill: false, color: "#000000", weight: 2});
+			if (!this._cellCursorMarker) {
+				this._map.fire('error', {msg: 'Cell Cursor marker initialization'});
+				return;
+			}
+			this._map.addLayer(this._cellCursorMarker);
+		}
+		else if (this._cellCursor) {
+			this._map.removeLayer(this._cellCursorMarker);
+		}
+	},
+
 	// Update text selection handlers.
 	_onUpdateTextSelection: function () {
 		var startMarker, endMarker;
@@ -881,6 +939,18 @@ L.TileLayer = L.GridLayer.extend({
 		}
 	},
 
+	// Cells can change position during changes of zoom level in calc
+	// hence we need to request an updated cell cursor position for this level.
+	_onCellCursorShift: function (bForce) {
+		if (this._cellCursorMarker || bForce) {
+			L.Socket.sendMessage('commandvalues command=.uno:CellCursor:'
+			                     + '' + this._tileSize + ','
+			                     + '' + this._tileSize + ','
+			                     + '' + this._tileWidthTwips + ','
+			                     + '' + this._tileHeightTwips );
+		}
+	},
+
     _invalidatePreviews: function () {
 		if (this._map._docPreviews && this._previewInvalidations.length > 0) {
 			var toInvalidate = {};
commit ab5b41b74017fbea7b135ff41cec8175c8db7eb8
Author: Andrzej Hunt <andrzej.hunt at collabora.com>
Date:   Wed Nov 4 13:38:32 2015 +0100

    loolwsd: use length here too

diff --git a/loolwsd/LOOLSession.cpp b/loolwsd/LOOLSession.cpp
index d1d3d9e..8b6da93 100644
--- a/loolwsd/LOOLSession.cpp
+++ b/loolwsd/LOOLSession.cpp
@@ -234,7 +234,7 @@ bool MasterProcessSession::handleInput(const char *buffer, int length)
             }
             else if (tokens[0] == "commandvalues:")
             {
-                std::string stringMsg(buffer);
+                std::string stringMsg(buffer, length);
                 std::string stringJSON = stringMsg.substr(stringMsg.find_first_of("{"));
                 Parser parser;
                 Var result = parser.parse(stringJSON);
commit 09e823e750a98a5cd7d504c4558016f8ce1b935b
Author: Andrzej Hunt <andrzej.hunt at collabora.com>
Date:   Mon Nov 2 14:09:25 2015 +0100

    loolwsd: tdf#94605 handle LOK_CALLBACK_CELL_CURSOR

diff --git a/loolwsd/LOKitClient.cpp b/loolwsd/LOKitClient.cpp
index 1e912af..481c3be 100644
--- a/loolwsd/LOKitClient.cpp
+++ b/loolwsd/LOKitClient.cpp
@@ -51,6 +51,7 @@ extern "C"
             CASE(TEXT_SELECTION_END);
             CASE(CURSOR_VISIBLE);
             CASE(GRAPHIC_SELECTION);
+            CASE(CELL_CURSOR);
             CASE(HYPERLINK_CLICKED);
             CASE(STATE_CHANGED);
             CASE(STATUS_INDICATOR_START);
diff --git a/loolwsd/LOOLSession.cpp b/loolwsd/LOOLSession.cpp
index 32b4b9f..d1d3d9e 100644
--- a/loolwsd/LOOLSession.cpp
+++ b/loolwsd/LOOLSession.cpp
@@ -868,6 +868,9 @@ extern "C"
         case LOK_CALLBACK_GRAPHIC_SELECTION:
             srv->sendTextFrame("graphicselection: " + std::string(pPayload));
             break;
+        case LOK_CALLBACK_CELL_CURSOR:
+            srv->sendTextFrame("cellcursor: " + std::string(pPayload));
+            break;
         case LOK_CALLBACK_HYPERLINK_CLICKED:
             srv->sendTextFrame("hyperlinkclicked: " + std::string(pPayload));
             break;
commit b46bc1bcf6200c1ce2df7cbadbddc6c28695a101
Author: Andrzej Hunt <andrzej.hunt at collabora.com>
Date:   Mon Nov 2 14:05:29 2015 +0100

    loolwsd: update the bundled headers

diff --git a/loolwsd/bundled/include/LibreOfficeKit/LibreOfficeKitEnums.h b/loolwsd/bundled/include/LibreOfficeKit/LibreOfficeKitEnums.h
index 86d9e6b..bf62675 100644
--- a/loolwsd/bundled/include/LibreOfficeKit/LibreOfficeKitEnums.h
+++ b/loolwsd/bundled/include/LibreOfficeKit/LibreOfficeKitEnums.h
@@ -195,7 +195,14 @@ typedef enum
      *     // TODO "result": "..."  // UNO Any converted to JSON (not implemented yet)
      * }
      */
-    LOK_CALLBACK_UNO_COMMAND_RESULT
+    LOK_CALLBACK_UNO_COMMAND_RESULT,
+
+    /**
+     * The size and/or the position of the cell cursor changed.
+     *
+     * Rectangle format is the same as LOK_CALLBACK_INVALIDATE_TILES.
+     */
+    LOK_CALLBACK_CELL_CURSOR
 }
 LibreOfficeKitCallbackType;
 


More information about the Libreoffice-commits mailing list