loleaflet/dist/spreadsheet.css                |    9 ++++
 loleaflet/src/control/Control.ColumnHeader.js |   11 +++++
 loleaflet/src/control/Control.Header.js       |   56 ++++++++++++++++++++++++++
 loleaflet/src/control/Control.RowHeader.js    |   11 +++++
 loleaflet/src/layer/tile/CalcTileLayer.js     |   19 ++++++++
 5 files changed, 106 insertions(+)

New commits:
commit 3c9eed3bb03880fd0044a361f4f7ca2ed7e31523
Author: Henry Castro <hcas...@collabora.com>
Date:   Sat Oct 29 15:56:44 2016 -0400

    loleaflet: row/column highlighting to reflect the existing selection

diff --git a/loleaflet/dist/spreadsheet.css b/loleaflet/dist/spreadsheet.css
index 9548f0d..19147d7 100644
--- a/loleaflet/dist/spreadsheet.css
+++ b/loleaflet/dist/spreadsheet.css
@@ -108,6 +108,15 @@
        overflow: hidden;
        }
 
+.spreadsheet-header-selected {
+       background: #3465A4; /* For browsers that do not support gradients */
+       background: -webkit-linear-gradient(#3465A4, #729FCF, #004586);
+       background: -o-linear-gradient(#3465A4, #729FCF, #004586);
+       background: -moz-linear-gradient(#3465A4, #729FCF, #004586);
+       background: linear-gradient(#3465A4, #729FCF, #004586);
+       color: white;
+       }
+
 .spreadsheet-header-column:hover {
        background-color: #DDD;
        }
diff --git a/loleaflet/src/control/Control.ColumnHeader.js 
b/loleaflet/src/control/Control.ColumnHeader.js
index 70fed02..e6e1351 100644
--- a/loleaflet/src/control/Control.ColumnHeader.js
+++ b/loleaflet/src/control/Control.ColumnHeader.js
@@ -19,6 +19,8 @@ L.Control.ColumnHeader = L.Control.Header.extend({
                this._map.on('updatescrolloffset', this.setScrollPosition, 
this);
                this._map.on('updateviewport', this.setViewPort, this);
                this._map.on('viewrowcolumnheaders', this.viewRowColumnHeaders, 
this);
+               this._map.on('updateselectionheader', this._onUpdateSelection, 
this);
+               this._map.on('clearselectionheader', this._onClearSelection, 
this);
                var docContainer = this._map.options.documentContainer;
                var cornerHeader = L.DomUtil.create('div', 
'spreadsheet-header-corner', docContainer.parentElement);
                L.DomEvent.addListener(cornerHeader, 'click', 
this._onCornerHeaderClick, this);
@@ -144,6 +146,14 @@ L.Control.ColumnHeader = L.Control.Header.extend({
                L.DomUtil.setStyle(this._columns, 'left', this._position + 
'px');
        },
 
+       _onClearSelection: function (e) {
+               this.clearSelection(this._columns);
+       },
+
+       _onUpdateSelection: function (e) {
+               this.updateSelection(this._columns, e.start.x, e.end.x);
+       },
+
        viewRowColumnHeaders: function (e) {
                this.fillColumns(e.data.columns, e.converter, e.context);
        },
@@ -158,6 +168,7 @@ L.Control.ColumnHeader = L.Control.Header.extend({
                        column = L.DomUtil.create('div', 
'spreadsheet-header-column', this._columns);
                        text = L.DomUtil.create('div', 
'spreadsheet-header-column-text', column);
                        resize = L.DomUtil.create('div', 
'spreadsheet-header-column-resize', column);
+                       column.size = columns[iterator].size;
                        var content = columns[iterator].text;
                        text.setAttribute('rel', 'spreadsheet-column-' + 
content); // for easy addressing
                        text.innerHTML = content;
diff --git a/loleaflet/src/control/Control.Header.js 
b/loleaflet/src/control/Control.Header.js
index a3014a1..c56e554 100644
--- a/loleaflet/src/control/Control.Header.js
+++ b/loleaflet/src/control/Control.Header.js
@@ -9,12 +9,68 @@ L.Control.Header = L.Control.extend({
 
        initialize: function () {
                this._clicks = 0;
+               this._selection = {start: -1, end: -1};
        },
 
        mouseInit: function (element) {
                L.DomEvent.on(element, 'mousedown', this._onMouseDown, this);
        },
 
+       select: function (item) {
+               if (item && !L.DomUtil.hasClass(item, 
'spreadsheet-header-selected')) {
+                       L.DomUtil.addClass(item, 'spreadsheet-header-selected');
+               }
+       },
+
+       unselect: function (item) {
+               if (item && L.DomUtil.hasClass(item, 
'spreadsheet-header-selected')) {
+                       L.DomUtil.removeClass(item, 
'spreadsheet-header-selected');
+               }
+       },
+
+       clearSelection: function (element) {
+               var childs = element.children;
+               for (var iterator = this._selection.start; iterator <= 
this._selection.end; iterator++) {
+                       this.unselect(childs[iterator]);
+               }
+               this._selection.start = this._selection.end = -1;
+       },
+
+       updateSelection: function(element, start, end) {
+               var childs = element.children;
+               var x0 = 0, x1 = 0;
+               var itStart = -1, itEnd = -1;
+               var selected = false;
+               var iterator = 0;
+               for (var len = childs.length; iterator < len; iterator++) {
+                       x0 = (iterator > 0 ? childs[iterator - 1].size : 0);
+                       x1 = childs[iterator].size;
+                       if (x0 <= start && start <= x1) {
+                               selected = true;
+                               itStart = iterator;
+                       }
+                       if (selected) {
+                               this.select(childs[iterator]);
+                       }
+                       if (x0 <= end && end <= x1) {
+                               itEnd = iterator;
+                               break;
+                       }
+               }
+               if (this._selection.start !== -1 && itStart !== -1 && itStart > 
this._selection.start) {
+                       for (iterator = this._selection.start; iterator < 
itStart; iterator++) {
+                               this.unselect(childs[iterator]);
+                       }
+               }
+               if (this._selection.end !== -1 && itEnd !== -1 && itEnd < 
this._selection.end) {
+                       for (iterator = itEnd + 1; iterator <= 
this._selection.end; iterator++) {
+                               this.unselect(childs[iterator]);
+                       }
+               }
+               this._selection.start = itStart;
+               this._selection.end = itEnd;
+       },
+
        _onMouseDown: function (e) {
                var target = e.target || e.srcElement;
 
diff --git a/loleaflet/src/control/Control.RowHeader.js 
b/loleaflet/src/control/Control.RowHeader.js
index 5263875..8575a24 100644
--- a/loleaflet/src/control/Control.RowHeader.js
+++ b/loleaflet/src/control/Control.RowHeader.js
@@ -19,6 +19,8 @@ L.Control.RowHeader = L.Control.Header.extend({
                this._map.on('updatescrolloffset', this.setScrollPosition, 
this);
                this._map.on('updateviewport', this.setViewPort, this);
                this._map.on('viewrowcolumnheaders', this.viewRowColumnHeaders, 
this);
+               this._map.on('updateselectionheader', this._onUpdateSelection, 
this);
+               this._map.on('clearselectionheader', this._onClearSelection, 
this);
                var docContainer = this._map.options.documentContainer;
                var headersContainer = L.DomUtil.create('div', 
'spreadsheet-header-rows-container', docContainer.parentElement);
                this._rows = L.DomUtil.create('div', 'spreadsheet-header-rows', 
headersContainer);
@@ -140,6 +142,14 @@ L.Control.RowHeader = L.Control.Header.extend({
                L.DomUtil.setStyle(this._rows, 'top', this._position + 'px');
        },
 
+       _onClearSelection: function (e) {
+               this.clearSelection(this._rows);
+       },
+
+       _onUpdateSelection: function (e) {
+               this.updateSelection(this._rows, e.start.y, e.end.y);
+       },
+
        viewRowColumnHeaders: function (e) {
                this.fillRows(e.data.rows, e.converter, e.context);
        },
@@ -154,6 +164,7 @@ L.Control.RowHeader = L.Control.Header.extend({
                        row = L.DomUtil.create('div', 'spreadsheet-header-row', 
this._rows);
                        text = L.DomUtil.create('div', 
'spreadsheet-header-row-text', row);
                        resize = L.DomUtil.create('div', 
'spreadsheet-header-row-resize', row);
+                       row.size = rows[iterator].size;
                        var content = rows[iterator].text;
                        text.setAttribute('rel', 'spreadsheet-row-' + content); 
// for easy addressing
                        text.innerHTML = content;
diff --git a/loleaflet/src/layer/tile/CalcTileLayer.js 
b/loleaflet/src/layer/tile/CalcTileLayer.js
index 1157f60..237fb92 100644
--- a/loleaflet/src/layer/tile/CalcTileLayer.js
+++ b/loleaflet/src/layer/tile/CalcTileLayer.js
@@ -155,6 +155,19 @@ L.CalcTileLayer = L.TileLayer.extend({
                });
        },
 
+       _onUpdateSelectionHeader: function () {
+               var layers = this._selections.getLayers();
+               var layer = layers.pop();
+               if (layers.length === 0 && layer && layer.getLatLngs().length 
=== 1) {
+                       var start = 
this._latLngToTwips(layer.getBounds().getNorthWest()).add([1, 1]);
+                       var end = 
this._latLngToTwips(layer.getBounds().getSouthEast()).subtract([1, 1]);
+                       this._map.fire('updateselectionheader', {start: start, 
end: end});
+               }
+               else {
+                       this._map.fire('clearselectionheader');
+               }
+       },
+
        _onStatusMsg: function (textMsg) {
                var command = this._map._socket.parseServerCmd(textMsg);
                if (command.width && command.height && this._documentInfo !== 
textMsg) {
@@ -210,9 +223,15 @@ L.CalcTileLayer = L.TileLayer.extend({
                                context: this
                        });
                        this._onUpdateViewPort();
+                       this._onUpdateSelectionHeader();
                }
                else {
                        L.TileLayer.prototype._onCommandValuesMsg.call(this, 
textMsg);
                }
+       },
+
+       _onTextSelectionMsg: function (textMsg) {
+               L.TileLayer.prototype._onTextSelectionMsg.call(this, textMsg);
+               this._onUpdateSelectionHeader();
        }
 });
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to