kit/ChildSession.cpp                     |    5 +
 loleaflet/css/toolbar.css                |    1 
 loleaflet/images/lc_functiondialog.svg   |    1 
 loleaflet/src/control/Control.Tabs.js    |    1 
 loleaflet/src/control/Control.Toolbar.js |    2 
 loleaflet/src/control/Parts.js           |    1 
 loleaflet/src/layer/tile/TileLayer.js    |   83 +++++++++++++++++++++++++++++++
 loleaflet/src/unocommands.js             |    1 
 8 files changed, 92 insertions(+), 3 deletions(-)

New commits:
commit d712d97e3c7ac84352001405dc5f1fa9ac5a3630
Author:     Szymon Kłos <eszka...@gmail.com>
AuthorDate: Wed Oct 3 20:51:32 2018 +0200
Commit:     Tamás Zolnai <tamas.zol...@collabora.com>
CommitDate: Sat Sep 28 16:42:19 2019 +0200

    Draw reference marks for formulas
    
    (cherry picked from commit fd1b3b2a744388309fbbbcb73b2060183780109e)
    
    Change-Id: I3e361bd94cd6e0664e96494504064c2505c30774

diff --git a/kit/ChildSession.cpp b/kit/ChildSession.cpp
index 1f4ea15a5..815a8c54d 100644
--- a/kit/ChildSession.cpp
+++ b/kit/ChildSession.cpp
@@ -2111,7 +2111,8 @@ void ChildSession::rememberEventsForInactiveUser(const 
int type, const std::stri
              type == LOK_CALLBACK_GRAPHIC_SELECTION ||
              type == LOK_CALLBACK_DOCUMENT_SIZE_CHANGED ||
              type == LOK_CALLBACK_INVALIDATE_HEADER ||
-             type == LOK_CALLBACK_CELL_ADDRESS)
+             type == LOK_CALLBACK_CELL_ADDRESS ||
+             type == LOK_CALLBACK_REFERENCE_MARKS)
     {
         std::unique_lock<std::mutex> lock(getLock());
         _stateRecorder.recordEvent(type, payload);
@@ -2400,7 +2401,7 @@ void ChildSession::loKitCallback(const int type, const 
std::string& payload)
         sendTextFrame("tableselected: " + payload);
         break;
     case LOK_CALLBACK_REFERENCE_MARKS:
-        // TODO
+        sendTextFrame("referencemarks: " + payload);
         break;
     case LOK_CALLBACK_JSDIALOG:
         sendTextFrame("jsdialog: " + payload);
diff --git a/loleaflet/src/control/Control.Tabs.js 
b/loleaflet/src/control/Control.Tabs.js
index 5855c584e..eac204c3b 100644
--- a/loleaflet/src/control/Control.Tabs.js
+++ b/loleaflet/src/control/Control.Tabs.js
@@ -165,6 +165,7 @@ L.Control.Tabs = L.Control.extend({
        _setPart: function (e) {
                var part =  e.target.id.match(/\d+/g)[0];
                if (part !== null) {
+                       this._map._docLayer._clearReferences();
                        this._map.setPart(parseInt(part), /*external:*/ false, 
/*calledFromSetPartHandler:*/ true);
                }
        }
diff --git a/loleaflet/src/control/Parts.js b/loleaflet/src/control/Parts.js
index 95e5bc2a0..5acee51fb 100644
--- a/loleaflet/src/control/Parts.js
+++ b/loleaflet/src/control/Parts.js
@@ -19,6 +19,7 @@ L.Map.include({
                }
                else if (typeof (part) === 'number' && part >= 0 && part < 
docLayer._parts) {
                        docLayer._selectedPart = part;
+                       docLayer._updateReferenceMarks();
                }
                else {
                        return;
diff --git a/loleaflet/src/layer/tile/TileLayer.js 
b/loleaflet/src/layer/tile/TileLayer.js
index 08a8abafc..8a39c97b7 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -25,6 +25,24 @@ function hex2string(inData)
        return hexified.join('');
 }
 
+function marksAreEqual(mark1, mark2)
+{
+       return mark1._bounds._northEast.lat == mark2._bounds._northEast.lat
+               && mark1._bounds._northEast.lng == mark2._bounds._northEast.lng
+               && mark1._bounds._southWest.lat == mark2._bounds._southWest.lat
+               && mark1._bounds._southWest.lng == mark2._bounds._southWest.lng;
+}
+
+function hasMark(collection, mark)
+{
+       for (var i = 0; i < collection.length; i++) {
+               if (marksAreEqual(mark, collection[i])) {
+                       return true;
+               }
+       }
+       return false;
+}
+
 L.TileLayer = L.GridLayer.extend({
 
        options: {
@@ -179,8 +197,10 @@ L.TileLayer = L.GridLayer.extend({
                this._initContainer();
                this._getToolbarCommandsValues();
                this._selections = new L.LayerGroup();
+               this._references = new L.LayerGroup();
                if (this.options.permission !== 'readonly') {
                        map.addLayer(this._selections);
+                       map.addLayer(this._references);
                }
 
                // This layergroup contains all the layers corresponding to 
other's view
@@ -415,6 +435,12 @@ L.TileLayer = L.GridLayer.extend({
                else if (textMsg.startsWith('cellformula:')) {
                        this._onCellFormulaMsg(textMsg);
                }
+               else if (textMsg.startsWith('referencemarks:')) {
+                       this._onReferencesMsg(textMsg);
+               }
+               else if (textMsg.startsWith('referenceclear:')) {
+                       this._clearReferences();
+               }
                else if (textMsg.startsWith('hyperlinkclicked:')) {
                        this._onHyperlinkClickedMsg(textMsg);
                }
@@ -1348,6 +1374,59 @@ L.TileLayer = L.GridLayer.extend({
                this._onUpdateTextViewSelection(viewId);
        },
 
+       _updateReferenceMarks: function() {
+               this._clearReferences();
+               for (var i = 0; i < this._referencesAll.length; i++) {
+                       // Avoid doubed marks, add only marks for current sheet
+                       if ((this._references == null || 
!hasMark(this._references.getLayers(), this._referencesAll[i].mark))
+                               && this._selectedPart === 
this._referencesAll[i].part) {
+                               
this._references.addLayer(this._referencesAll[i].mark);
+                       }
+               }
+       },
+
+       _onReferencesMsg: function (textMsg) {
+               textMsg = textMsg.substr(textMsg.indexOf(' ') + 1);
+               var marks = JSON.parse(textMsg);
+               marks = marks.marks;
+               var references = [];
+               this._referencesAll = [];
+
+               for (var mark = 0; mark < marks.length; mark++) {
+                       var strTwips = marks[mark].rectangle.match(/\d+/g);
+                       var strColor = marks[mark].color;
+                       var part = parseInt(marks[mark].part);
+
+                       if (strTwips != null) {
+                               var rectangles = [];
+                               for (var i = 0; i < strTwips.length; i += 4) {
+                                       var topLeftTwips = new 
L.Point(parseInt(strTwips[i]), parseInt(strTwips[i + 1]));
+                                       var offset = new 
L.Point(parseInt(strTwips[i + 2]), parseInt(strTwips[i + 3]));
+                                       var topRightTwips = 
topLeftTwips.add(new L.Point(offset.x, 0));
+                                       var bottomLeftTwips = 
topLeftTwips.add(new L.Point(0, offset.y));
+                                       var bottomRightTwips = 
topLeftTwips.add(offset);
+                                       rectangles.push([bottomLeftTwips, 
bottomRightTwips, topLeftTwips, topRightTwips]);
+                               }
+
+                               var polygons = 
L.PolyUtil.rectanglesToPolygons(rectangles, this);
+                               var reference = new L.Polygon(polygons, {
+                                       pointerEvents: 'none',
+                                       fillColor: '#' + strColor,
+                                       fillOpacity: 0.25,
+                                       weight: 2,
+                                       opacity: 0.25});
+
+                               references.push({mark: reference, part: part});
+                       }
+               }
+
+               for (i = 0; i < references.length; i++) {
+                       this._referencesAll.push(references[i]);
+               }
+
+               this._updateReferenceMarks();
+       },
+
        _onTextSelectionContentMsg: function (textMsg) {
                this._selectionTextContent = textMsg.substr(22);
                
this._map._clipboardContainer.setValue(this._selectionTextContent);
@@ -1671,6 +1750,10 @@ L.TileLayer = L.GridLayer.extend({
                return ret;
        },
 
+       _clearReferences: function () {
+               this._references.clearLayers();
+       },
+
        _postMouseEvent: function(type, x, y, count, buttons, modifier) {
 
                this._sendClientZoom();
commit 9276ac2da166fda1bef383e570591c8bac831f42
Author:     Szymon Kłos <eszka...@gmail.com>
AuthorDate: Wed Oct 3 20:54:31 2018 +0200
Commit:     Tamás Zolnai <tamas.zol...@collabora.com>
CommitDate: Sat Sep 28 16:40:15 2019 +0200

    Added formula dialog to the toolbar
    
    Change-Id: Ic7b6da86660824acefa02e203601d912aba7ba2e

diff --git a/loleaflet/css/toolbar.css b/loleaflet/css/toolbar.css
index fcf000081..b69c9bc23 100644
--- a/loleaflet/css/toolbar.css
+++ b/loleaflet/css/toolbar.css
@@ -586,6 +586,7 @@ button.leaflet-control-search-next
 .w2ui-icon.insertobjectchart{ background: url('images/lc_drawchart.svg') 
no-repeat center !important; }
 .w2ui-icon.autosum{ background: url('images/lc_autosum.svg') no-repeat center 
!important; }
 
+.w2ui-icon.functiondialog{ background: url('images/lc_functiondialog.svg') 
no-repeat center !important; }
 .w2ui-icon.accepttrackedchanges{ background: 
url('images/lc_accepttrackedchanges.svg') no-repeat center !important; }
 .w2ui-icon.cancel{ background: url('images/lc_cancel.svg') no-repeat center 
!important; }
 .w2ui-icon.color{ background: url('images/lc_color.svg') no-repeat center 
!important; }
diff --git a/loleaflet/images/lc_functiondialog.svg 
b/loleaflet/images/lc_functiondialog.svg
new file mode 100644
index 000000000..ef807006a
--- /dev/null
+++ b/loleaflet/images/lc_functiondialog.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg";><g 
fill="#4d82b8"><path d="m8.4921985 9.429259-1.090909 9.199278-.6166 
2.131246q-.166008.602047-.52174.915112-.355732.325105-.996048.325105h-1.221343l1.505928-12.570741-.936758-.180613q-.296443-.0602-.474309-.228778-.177865-.180614-.130434-.517761l.142292-1.240216h1.660079l.10672-.830826q.118577-1.0234791.533597-1.842263.426877-.8308248
 1.07905-1.396749.664032-.5779651 1.517788-.8789885.853755-.3130645 
1.8498025-.3130645.735178 0 1.434783.2167369l-.272728 
1.5773632q-.05929.2769416-.332016.3371462-.272727.060205-.6166.060205-.486167 
0-.889329.1204094-.4031615.1204094-.7114625.397351-.296442.2769415-.498024.7224564-.189723.4455147-.26087
 1.0957249l-.08301.734498h2.7391315l-.260869 2.167368h-2.6561275z"/><path 
d="m15.644396 16.602206-2.053045-4.602214h2.27898q.245579 0 
.353634.0705.108055.0705.18664.241692l1.119844 
2.819737q.04911-.110775.108054-.21148.06877-.110775.147348-.22155l1.394894-2.346424q.127701-.1712.255403-.261834.
 127701-.09063.304518-.09063h2.259334l-3.231829 4.582073 2.269157 
5.417924h-2.269157q-.255404 
0-.392928-.140986-.137525-.140988-.21611-.322256l-1.257367-3.313192q-.04912.100705-.09823.18127-.04912.08057-.09823.161127l-1.827113
 
2.970795q-.127701.171199-.284872.322256-.157172.140986-.383105.140986h-2.210217l3.644402-5.397783z"/></g></svg>
\ No newline at end of file
diff --git a/loleaflet/src/control/Control.Toolbar.js 
b/loleaflet/src/control/Control.Toolbar.js
index 4be262f31..0776c8e61 100644
--- a/loleaflet/src/control/Control.Toolbar.js
+++ b/loleaflet/src/control/Control.Toolbar.js
@@ -900,7 +900,7 @@ function initNormalToolbar() {
                        {type: 'html',  id: 'left'},
                        {type: 'html', id: 'address', html: '<input 
id="addressInput" type="text">'},
                        {type: 'break'},
-                       {type: 'button',  id: 'functiondialog', img: 
'functiondialog', hint: _('Function Wizard'), uno: '.uno:FunctionDialog'},
+                       {type: 'button',  id: 'functiondialog', img: 
'functiondialog', hint: _UNO('.uno:FunctionDialog', '', true), uno: 
'.uno:FunctionDialog'},
                        {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')},
diff --git a/loleaflet/src/unocommands.js b/loleaflet/src/unocommands.js
index 6db9638dc..6622a9a9b 100644
--- a/loleaflet/src/unocommands.js
+++ b/loleaflet/src/unocommands.js
@@ -87,6 +87,7 @@ var unoCommandsArray = {
        FormatTextMenu:{global:{menu:_('Te~xt'),},},
        FormattingMarkMenu:{global:{menu:_('Formatting Mark'),},},
        FullScreen:{global:{menu:_('F~ull Screen'),},},
+       FunctionDialog:{spreadsheet:{menu:_('~Function...'),},},
        GoalSeekDialog:{spreadsheet:{menu:_('~Goal Seek...'),},},
        Group:{global:{menu:_('~Group...'),},},
        GroupOutlineMenu:{spreadsheet:{menu:_('~Group and Outline'),},},
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to