loleaflet/build/deps.js | 7 ++ loleaflet/debug/document/document_simple_example.html | 1 loleaflet/src/control/Control.Selection.js | 49 +++++++++++++++ loleaflet/src/control/Permission.js | 18 +++++ loleaflet/src/layer/tile/TileLayer.js | 58 ++++++++---------- 5 files changed, 101 insertions(+), 32 deletions(-)
New commits: commit d605b501df466801517b70c24afecd0d93a4548e Author: Mihai Varga <mihai.va...@collabora.com> Date: Mon Jul 13 15:50:02 2015 +0300 loleaflet: enabled mouse selection in viewing mode Mouse selection is enabled by by calling map.enableSelection() which disables dragging and selection can be disabled to re-enable dragging by calling map.disableSelection() The above only work for 'view' and 'readonly' mode Conflicts: loleaflet/build/deps.js diff --git a/loleaflet/build/deps.js b/loleaflet/build/deps.js index 65d5452..b3ce61c 100644 --- a/loleaflet/build/deps.js +++ b/loleaflet/build/deps.js @@ -228,6 +228,13 @@ var deps = { desc: 'Switches edit, view and readOnly modes' }, + ControlSelection: { + src: ['control/Control.js', + 'control/Control.Selection.js'], + heading: 'Controls', + desc: 'Enables selection in view mode' + }, + ControlStatusIndicator: { src: ['control/Control.js', 'control/Control.StatusIndicator.js'], diff --git a/loleaflet/debug/document/document_simple_example.html b/loleaflet/debug/document/document_simple_example.html index 7d90824..d259531 100644 --- a/loleaflet/debug/document/document_simple_example.html +++ b/loleaflet/debug/document/document_simple_example.html @@ -70,6 +70,7 @@ ////// Controls ///// map.addControl(L.control.search()); map.addControl(L.control.permissionSwitch()); + map.addControl(L.control.selection()); map.addControl(L.control.zoom()); map.addControl(L.control.parts()); map.addControl(L.control.statusIndicator()); diff --git a/loleaflet/src/control/Control.Selection.js b/loleaflet/src/control/Control.Selection.js new file mode 100644 index 0000000..abe3237 --- /dev/null +++ b/loleaflet/src/control/Control.Selection.js @@ -0,0 +1,49 @@ +/* + * L.Control.Selection enables by mouse drag selection in viewing mode + */ + +L.Control.Selection = L.Control.extend({ + options: { + position: 'topleft' + }, + + onAdd: function (map) { + var partName = 'leaflet-control-editviewswitch', + container = L.DomUtil.create('label', partName + ' leaflet-bar'); + + this._checkBox = L.DomUtil.create('input', 'editview-cb', container); + this._checkBox.type = 'checkbox'; + L.DomEvent.on(this._checkBox, 'change', this._onChange, this); + map.on('updatepermission', this._onUpdatePermission, this); + container.appendChild(document.createTextNode('Enable Selection')); + return container; + }, + + _onChange: function () { + if (this._checkBox.checked) { + this._map.enableSelection(); + } + else { + this._map.disableSelection(); + } + }, + + _onUpdatePermission: function (e) { + if (e.perm === 'edit') { + this._checkBox.checked = false; + this._checkBox.disabled = true; + } + else if (e.perm === 'view') { + this._checkBox.checked = false; + this._checkBox.disabled = false; + } + else if (e.perm === 'readonly') { + this._checkBox.checked = false; + this._checkBox.disabled = false; + } + } +}); + +L.control.selection = function (options) { + return new L.Control.Selection(options); +}; diff --git a/loleaflet/src/control/Permission.js b/loleaflet/src/control/Permission.js index 6933f64..f48d2e4 100644 --- a/loleaflet/src/control/Permission.js +++ b/loleaflet/src/control/Permission.js @@ -18,6 +18,24 @@ L.Map.include({ L.DomUtil.removeClass(this._container, className); } this.fire('updatepermission', {perm : perm}); + }, + + enableSelection: function () { + if (this._docLayer._permission === 'edit') { + return; + } + var className = 'leaflet-editmode'; + this.dragging.disable(); + L.DomUtil.addClass(this._container, className); + }, + + disableSelection: function () { + if (this._docLayer._permission === 'edit') { + return; + } + var className = 'leaflet-editmode'; + this.dragging.enable(); + L.DomUtil.removeClass(this._container, className); } }); diff --git a/loleaflet/src/layer/tile/TileLayer.js b/loleaflet/src/layer/tile/TileLayer.js index a6e9bff..f240ca8 100644 --- a/loleaflet/src/layer/tile/TileLayer.js +++ b/loleaflet/src/layer/tile/TileLayer.js @@ -723,10 +723,6 @@ L.TileLayer = L.GridLayer.extend({ return; } - if (this._permission === 'readonly') { - return; - } - if (e.type === 'mousedown') { this._mouseDown = true; if (this._holdMouseEvent) { @@ -739,7 +735,7 @@ L.TileLayer = L.GridLayer.extend({ } else if (e.type === 'mouseup') { this._mouseDown = false; - if (this._permission !== 'edit') { + if (this._map.dragging.enabled()) { if (this._mouseEventsQueue.length === 0) { // mouse up after panning return; @@ -764,7 +760,7 @@ L.TileLayer = L.GridLayer.extend({ if (this._mouseEventsQueue.length > 1) { // it's a click, fire mousedown this._mouseEventsQueue[0](); - if (this._permission !== 'edit') { + if (this._permission === 'view') { this._map.setPermission('edit'); } } @@ -786,7 +782,7 @@ L.TileLayer = L.GridLayer.extend({ if (this._holdMouseEvent) { clearTimeout(this._holdMouseEvent); this._holdMouseEvent = null; - if (this._permission !== 'edit') { + if (this._map.dragging.enabled()) { // The user just panned the document this._mouseEventsQueue = []; return; @@ -798,7 +794,7 @@ L.TileLayer = L.GridLayer.extend({ } this._mouseEventsQueue = []; } - if (this._permission === 'edit') { + if (!this._map.dragging.enabled()) { mousePos = this._latLngToTwips(e.latlng); this._postMouseEvent('move', mousePos.x, mousePos.y, 1); if (this._startMarker._icon) { @@ -820,15 +816,6 @@ L.TileLayer = L.GridLayer.extend({ _executeMouseEvents: function () { this._holdMouseEvent = null; - if (this._mouseEventsQueue.length === 1 && this._permission !== 'edit') { - // long mouse down or a mouseup after panning - this._mouseEventsQueue = []; - return; - } - else if (this._permission !== 'edit') { - // this time we have a mousedown and mouseup - this._map.setPermission('edit'); - } for (var i = 0; i < this._mouseEventsQueue.length; i++) { this._mouseEventsQueue[i](); } commit 9225bf09ac6e372366c144e357ad7539baf6025d Author: Mihai Varga <mihai.va...@collabora.com> Date: Mon Jul 13 10:24:40 2015 +0300 loleaflet: enable selection in viewing mode by dblclicking a word diff --git a/loleaflet/src/layer/tile/TileLayer.js b/loleaflet/src/layer/tile/TileLayer.js index f62ecfc..a6e9bff 100644 --- a/loleaflet/src/layer/tile/TileLayer.js +++ b/loleaflet/src/layer/tile/TileLayer.js @@ -753,19 +753,26 @@ L.TileLayer = L.GridLayer.extend({ return; } else { - // if it's a click or mouseup after selecting - if (this._mouseEventsQueue.length > 0) { - // it's a click, fire mousedown - this._mouseEventsQueue[0](); - this._clickTime = Date.now(); - if (this._permission !== 'edit') { - this._map.setPermission('edit'); - } - } - this._mouseEventsQueue = []; + this._clickTime = Date.now(); mousePos = this._latLngToTwips(e.latlng); - this._postMouseEvent('buttonup', mousePos.x, mousePos.y, 1); - this._textArea.focus(); + var timeOut = 250; + if (this._permission === 'edit') { + timeOut = 0; + } + this._mouseEventsQueue.push(L.bind(function() { + // if it's a click or mouseup after selecting + if (this._mouseEventsQueue.length > 1) { + // it's a click, fire mousedown + this._mouseEventsQueue[0](); + if (this._permission !== 'edit') { + this._map.setPermission('edit'); + } + } + this._mouseEventsQueue = []; + this._postMouseEvent('buttonup', mousePos.x, mousePos.y, 1); + this._textArea.focus(); + }, this)); + this._holdMouseEvent = setTimeout(L.bind(this._executeMouseEvents, this), timeOut); if (this._startMarker._icon) { L.DomUtil.removeClass(this._startMarker._icon, 'leaflet-not-clickable'); @@ -835,10 +842,6 @@ L.TileLayer = L.GridLayer.extend({ // Receives a key press or release event. _signalKey: function (e) { - if (this._permission !== 'edit') { - return; - } - if (e.originalEvent.ctrlKey) { // we prepare for a copy event this._textArea.value = 'dummy text'; @@ -847,6 +850,10 @@ L.TileLayer = L.GridLayer.extend({ return; } + if (this._permission !== 'edit') { + return; + } + var charCode = e.originalEvent.charCode; var keyCode = e.originalEvent.keyCode; if (e.type === 'keydown' && this.handleOnKeyDown[keyCode] && charCode === 0) { _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits