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

Reply via email to