Subversion Repositories Applications.papyrus

Rev

Blame | Last modification | View Log | RSS feed

if(!dojo._hasResource["dojox.grid._grid.drag"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dojox.grid._grid.drag"] = true;
dojo.provide("dojox.grid._grid.drag");

// summary:
//      utility functions for dragging as used in grid.
// begin closure
(function(){

var dgdrag = dojox.grid.drag = {};

dgdrag.dragging = false;
dgdrag.hysteresis = 2;

dgdrag.capture = function(inElement) {
        //console.debug('dojox.grid.drag.capture');
        if (inElement.setCapture)
                inElement.setCapture();
        else {
                document.addEventListener("mousemove", inElement.onmousemove, true);
                document.addEventListener("mouseup", inElement.onmouseup, true);
                document.addEventListener("click", inElement.onclick, true);
        }
}

dgdrag.release = function(inElement) {
        //console.debug('dojox.grid.drag.release');
        if(inElement.releaseCapture){
                inElement.releaseCapture();
        }else{
                document.removeEventListener("click", inElement.onclick, true);
                document.removeEventListener("mouseup", inElement.onmouseup, true);
                document.removeEventListener("mousemove", inElement.onmousemove, true);
        }
}

dgdrag.start = function(inElement, inOnDrag, inOnEnd, inEvent, inOnStart){
        if(/*dgdrag.elt ||*/ !inElement || dgdrag.dragging){
                console.debug('failed to start drag: bad input node or already dragging');
                return;
        }
        dgdrag.dragging = true;
        dgdrag.elt = inElement;
        dgdrag.events = {
                drag: inOnDrag || dojox.grid.nop, 
                end: inOnEnd || dojox.grid.nop, 
                start: inOnStart || dojox.grid.nop, 
                oldmove: inElement.onmousemove, 
                oldup: inElement.onmouseup, 
                oldclick: inElement.onclick 
        };
        dgdrag.positionX = (inEvent && ('screenX' in inEvent) ? inEvent.screenX : false);
        dgdrag.positionY = (inEvent && ('screenY' in inEvent) ? inEvent.screenY : false);
        dgdrag.started = (dgdrag.position === false);
        inElement.onmousemove = dgdrag.mousemove;
        inElement.onmouseup = dgdrag.mouseup;
        inElement.onclick = dgdrag.click;
        dgdrag.capture(dgdrag.elt);
}

dgdrag.end = function(){
        //console.debug("dojox.grid.drag.end");
        dgdrag.release(dgdrag.elt);
        dgdrag.elt.onmousemove = dgdrag.events.oldmove;
        dgdrag.elt.onmouseup = dgdrag.events.oldup;
        dgdrag.elt.onclick = dgdrag.events.oldclick;
        dgdrag.elt = null;
        try{
                if(dgdrag.started){
                        dgdrag.events.end();
                }
        }finally{
                dgdrag.dragging = false;
        }
}

dgdrag.calcDelta = function(inEvent){
        inEvent.deltaX = inEvent.screenX - dgdrag.positionX;
        inEvent.deltaY = inEvent.screenY - dgdrag.positionY;
}

dgdrag.hasMoved = function(inEvent){
        return Math.abs(inEvent.deltaX) + Math.abs(inEvent.deltaY) > dgdrag.hysteresis;
}

dgdrag.mousemove = function(inEvent){
        inEvent = dojo.fixEvent(inEvent);
        dojo.stopEvent(inEvent);
        dgdrag.calcDelta(inEvent);
        if((!dgdrag.started)&&(dgdrag.hasMoved(inEvent))){
                dgdrag.events.start(inEvent);
                dgdrag.started = true;
        }
        if(dgdrag.started){
                dgdrag.events.drag(inEvent);
        }
}

dgdrag.mouseup = function(inEvent){
        //console.debug("dojox.grid.drag.mouseup");
        dojo.stopEvent(dojo.fixEvent(inEvent));
        dgdrag.end();
}

dgdrag.click = function(inEvent){
        dojo.stopEvent(dojo.fixEvent(inEvent));
        //dgdrag.end();
}

})();
// end closure

}