[Libreoffice-commits] online.git: bundled/include kit/ChildSession.cpp kit/KitHelper.hpp loleaflet/dist loleaflet/src tools/KitClient.cpp wsd/protocol.txt
Marco Cecchetti
marco.cecchetti at collabora.com
Thu May 11 15:55:42 UTC 2017
bundled/include/LibreOfficeKit/LibreOfficeKitEnums.h | 8 ++++
kit/ChildSession.cpp | 6 +++
kit/KitHelper.hpp | 3 +
loleaflet/dist/toolbar.css | 7 +++-
loleaflet/dist/toolbar/toolbar.js | 31 +++++++++++++++++++
loleaflet/src/layer/tile/TileLayer.js | 8 ++++
tools/KitClient.cpp | 1
wsd/protocol.txt | 5 +++
8 files changed, 66 insertions(+), 3 deletions(-)
New commits:
commit 024e786e8591bbb75b6828ef3aad1a65574b7e97
Author: Marco Cecchetti <marco.cecchetti at collabora.com>
Date: Mon May 8 00:38:13 2017 +0200
calc: added an address input field
Change-Id: Ic030724e392693847a195b5e53866b40ebad7435
Reviewed-on: https://gerrit.libreoffice.org/37359
Reviewed-by: pranavk <pranavk at collabora.co.uk>
Tested-by: pranavk <pranavk at collabora.co.uk>
diff --git a/bundled/include/LibreOfficeKit/LibreOfficeKitEnums.h b/bundled/include/LibreOfficeKit/LibreOfficeKitEnums.h
index dffc728e..0bf35024 100644
--- a/bundled/include/LibreOfficeKit/LibreOfficeKitEnums.h
+++ b/bundled/include/LibreOfficeKit/LibreOfficeKitEnums.h
@@ -500,7 +500,13 @@ typedef enum
*
* The payload says if we are invalidating a row or column header.
*/
- LOK_CALLBACK_INVALIDATE_HEADER = 33
+ LOK_CALLBACK_INVALIDATE_HEADER = 33,
+
+ /**
+ * The text content of the address field in Calc.
+ */
+ LOK_CALLBACK_CELL_ADDRESS = 34
+
}
LibreOfficeKitCallbackType;
diff --git a/kit/ChildSession.cpp b/kit/ChildSession.cpp
index 295f261f..1fbc1944 100644
--- a/kit/ChildSession.cpp
+++ b/kit/ChildSession.cpp
@@ -1000,7 +1000,8 @@ void ChildSession::rememberEventsForInactiveUser(const int type, const std::stri
type == LOK_CALLBACK_CELL_CURSOR ||
type == LOK_CALLBACK_GRAPHIC_SELECTION ||
type == LOK_CALLBACK_DOCUMENT_SIZE_CHANGED ||
- type == LOK_CALLBACK_INVALIDATE_HEADER)
+ type == LOK_CALLBACK_INVALIDATE_HEADER ||
+ type == LOK_CALLBACK_CELL_ADDRESS)
{
auto lock(getLock());
_stateRecorder.recordEvent(type, payload);
@@ -1230,6 +1231,9 @@ void ChildSession::loKitCallback(const int type, const std::string& payload)
case LOK_CALLBACK_INVALIDATE_HEADER:
sendTextFrame("invalidateheader: " + payload);
break;
+ case LOK_CALLBACK_CELL_ADDRESS:
+ sendTextFrame("celladdress: " + payload);
+ break;
default:
LOG_ERR("Unknown callback event (" << type << "): " << payload);
}
diff --git a/kit/KitHelper.hpp b/kit/KitHelper.hpp
index 63040a1e..efb0d5cb 100644
--- a/kit/KitHelper.hpp
+++ b/kit/KitHelper.hpp
@@ -111,6 +111,9 @@ namespace LOKitHelper
return "COMMENT";
case LOK_CALLBACK_INVALIDATE_HEADER:
return "INVALIDATE_HEADER";
+ case LOK_CALLBACK_CELL_ADDRESS:
+ return "CELL_ADDRESS";
+
}
return std::to_string(type);
diff --git a/loleaflet/dist/toolbar.css b/loleaflet/dist/toolbar.css
index a2b5c31f..e8288c68 100644
--- a/loleaflet/dist/toolbar.css
+++ b/loleaflet/dist/toolbar.css
@@ -52,9 +52,14 @@
padding-left: 125px;
}
+#addressInput {
+ height: 29px;
+ width: 100px;
+}
+
#formulaInput {
height: 29px;
- width: 800px;
+ width: 700px;
}
#tb_toolbar-up_item_close {
diff --git a/loleaflet/dist/toolbar/toolbar.js b/loleaflet/dist/toolbar/toolbar.js
index 793bd910..bbd4b81e 100644
--- a/loleaflet/dist/toolbar/toolbar.js
+++ b/loleaflet/dist/toolbar/toolbar.js
@@ -614,6 +614,8 @@ $(function () {
name: 'formulabar',
items: [
{type: 'html', id: 'left'},
+ {type: 'html', id: 'address', html: '<input id="addressInput" type="text">'},
+ {type: 'break'},
{type: 'button', id: 'sum', img: 'autosum', hint: _('Sum')},
{type: 'button', id: 'function', img: 'equal', hint: _('Function')},
{type: 'button', hidden: true, id: 'cancelformula', img: 'cancel', hint: _('Cancel')},
@@ -624,6 +626,7 @@ $(function () {
onClick(e.target);
},
onRefresh: function(e) {
+ $('#addressInput').off('keyup', onAddressInput).on('keyup', onAddressInput);
$('#formulaInput').off('keyup', onFormulaInput).on('keyup', onFormulaInput);
$('#formulaInput').off('blur', onFormulaBarBlur).on('blur', onFormulaBarBlur);
$('#formulaInput').off('focus', onFormulaBarFocus).on('focus', onFormulaBarFocus);
@@ -868,6 +871,25 @@ function onInsertFile() {
return false;
}
+function onAddressInput(e) {
+ if (e.keyCode === 13) {
+ // address control should not have focus anymore
+ map.focus();
+ var value = L.DomUtil.get('addressInput').value;
+ var command = {
+ ToPoint : {
+ type: 'string',
+ value: value
+ }
+
+ };
+ map.sendUnoCommand('.uno:GoToCell', command);
+ } else if (e.keyCode === 27) { // 27 = esc key
+ map.sendUnoCommand('.uno:Cancel');
+ map.focus();
+ }
+}
+
function onFormulaInput(e) {
// keycode = 13 is 'enter'
if (e.keyCode === 13) {
@@ -1407,6 +1429,13 @@ map.on('commandresult', function (e) {
}
});
+map.on('celladdress', function (e) {
+ if (document.activeElement !== L.DomUtil.get('addressInput')) {
+ // if the user is not editing the address field
+ L.DomUtil.get('addressInput').value = e.address;
+ }
+});
+
map.on('cellformula', function (e) {
if (document.activeElement !== L.DomUtil.get('formulaInput')) {
// if the user is not editing the formula bar
@@ -1456,6 +1485,7 @@ map.on('updatepermission', function (e) {
$('.fontsizes-select').prop('disabled', false);
// Enable formula bar
+ $('#addressInput').prop('disabled', false);
$('#formulaInput').prop('disabled', false);
toolbar = w2ui.formulabar;
formulaBarButtons.forEach(function(id) {
@@ -1485,6 +1515,7 @@ map.on('updatepermission', function (e) {
$('.fontsizes-select').prop('disabled', true);
// Disable formula bar
+ $('#addressInput').prop('disabled', true);
$('#formulaInput').prop('disabled', true);
toolbar = w2ui.formulabar;
diff --git a/loleaflet/src/layer/tile/TileLayer.js b/loleaflet/src/layer/tile/TileLayer.js
index 0d2bb93a..8611d3d6 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -364,6 +364,9 @@ L.TileLayer = L.GridLayer.extend({
else if (textMsg.startsWith('cellcursor:')) {
this._onCellCursorMsg(textMsg);
}
+ else if (textMsg.startsWith('celladdress:')) {
+ this._onCellAddressMsg(textMsg);
+ }
else if (textMsg.startsWith('cellformula:')) {
this._onCellFormulaMsg(textMsg);
}
@@ -499,6 +502,11 @@ L.TileLayer = L.GridLayer.extend({
}
},
+ _onCellAddressMsg: function (textMsg) {
+ var address = textMsg.substring(13);
+ this._map.fire('celladdress', {address: address});
+ },
+
_onCellFormulaMsg: function (textMsg) {
var formula = textMsg.substring(13);
this._selectionTextContent = formula;
diff --git a/tools/KitClient.cpp b/tools/KitClient.cpp
index 95597b35..8aa38e73 100644
--- a/tools/KitClient.cpp
+++ b/tools/KitClient.cpp
@@ -77,6 +77,7 @@ extern "C"
CASE(REDLINE_TABLE_ENTRY_MODIFIED);
CASE(COMMENT);
CASE(INVALIDATE_HEADER);
+ CASE(CELL_ADDRESS);
#undef CASE
}
std::cout << " payload: " << payload << std::endl;
diff --git a/wsd/protocol.txt b/wsd/protocol.txt
index b2404a70..1d136eb7 100644
--- a/wsd/protocol.txt
+++ b/wsd/protocol.txt
@@ -375,6 +375,11 @@ comment:
Signals that comment has either been added, removed or modified. See
LOK_CALLBACK_COMMENT for JSON structure.
+celladdress: <payload>
+
+ Message is sent anytime the content of the address input box should be updated.
+ The <payload> is a string representing the new content.
+
stats: <key> <value>
Contains statistical data. Eg: 'stats: wopiloadduration 5' means that
More information about the Libreoffice-commits
mailing list