diff src/djol/_OneshotTool.js @ 10:8705103f074f

Слияние
author cin
date Mon, 21 Aug 2017 18:03:00 +0300
parents f0035923ff3e
children 9c21e656cbec
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/djol/_OneshotTool.js	Mon Aug 21 18:03:00 2017 +0300
@@ -0,0 +1,65 @@
+define([ "dojo/_base/declare", "implab/safe", "implab/guard", "ol3/_ToolBase", "ol3/ToolType" ],
+
+function(declare, safe, guard, _ToolBase, ToolType) {
+    return declare([ _ToolBase ], {
+        _pending : null,
+        
+        _lastResult : null,
+
+        toolType : ToolType.Oneshot,
+
+        invoke : function() {
+        },
+
+        onActivating : function() {
+            var me = this;
+            
+            // start the operation
+            me._lastResult = me._pending = guard(me,"invoke");
+            
+            return this.inherited(arguments);
+        },
+        
+        onActivated : function() {
+            var me = this;
+            
+            // fire the activate event
+            this.inherited(arguments);
+            
+            me._pending.then(function() {
+                if (me._pending) {
+                    me.log("Operation finished, deactivating.");
+                    me._pending = null;
+                    me.deactivate();
+                }
+            }, function(ex) {
+                if (me._pending) {
+                    me.error("Operation failed, deactivating: {0}", ex);
+                    me._pending = null;
+                    me.deactivate();
+                }
+            });
+        },
+
+        onDeactivated : function() {
+            var d = this._pending;
+            if (d) {
+                this.log("Cancelling pending operation");
+                this._pending = null;
+                d.cancel();
+            }
+
+            return this.inherited(arguments);
+        },
+        
+        run : function() {
+            var me = this;
+            
+            return me.activate().then(function(success) {
+                if (success)
+                    return me._lastResult;
+                throw new Error("Operation declined");
+            });
+        }
+    });
+});
\ No newline at end of file