view 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 source

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");
            });
        }
    });
});