dragdrop.js
Summary
No overview generated for 'dragdrop.js'
draw2d.Drag=function()
{
}
draw2d.Drag.current = null;
draw2d.Drag.currentTarget =null;
draw2d.Drag.dragging = false;
draw2d.Drag.isDragging = function ()
{
return this.dragging;
}
draw2d.Drag.setCurrent = function (oDraggable )
{
this.current = oDraggable;
this.dragging = true;
}
draw2d.Drag.getCurrent = function ()
{
return this.current;
}
draw2d.Drag.clearCurrent = function ()
{
this.current = null;
this.dragging = false;
};
draw2d.Draggable=function(oElement, iConstraints)
{
draw2d.EventTarget.call(this);
this.construct(oElement, iConstraints);
this.diffX = 0;
this.diffY = 0;
this.targets = new draw2d.ArrayList();
}
draw2d.Draggable.prototype = new draw2d.EventTarget;
draw2d.Draggable.prototype.construct = function (oElement , iConstraints )
{
this.element = oElement;
this.constraints = iConstraints;
var oThis = this;
var dblTemp = function()
{
var oDragStartEvent = new draw2d.DragDropEvent();
oDragStartEvent.initDragDropEvent("dblclick", true);
oThis.dispatchEvent(oDragStartEvent);
var oEvent = arguments[0] || window.event;
oEvent.cancelBubble = true;
oEvent.returnValue = false;
}
var fnTemp = function () {
var oEvent = arguments[0] || window.event;
var oDragStartEvent = new draw2d.DragDropEvent();
var xOffset = oThis.node.workflow.getAbsoluteX();
var yOffset = oThis.node.workflow.getAbsoluteY();
var scrollLeft = oThis.node.workflow.getScrollLeft();
var scrollTop = oThis.node.workflow.getScrollTop();
oDragStartEvent.x = oEvent.clientX - oThis.element.offsetLeft+scrollLeft-xOffset;
oDragStartEvent.y = oEvent.clientY - oThis.element.offsetTop+scrollTop-yOffset;
if(oEvent.button==2)
{
oDragStartEvent.initDragDropEvent("contextmenu", true);
oThis.dispatchEvent(oDragStartEvent)
}
else
{
oDragStartEvent.initDragDropEvent("dragstart", true);
if (oThis.dispatchEvent(oDragStartEvent))
{
oThis.diffX = oEvent.clientX - oThis.element.offsetLeft;
oThis.diffY = oEvent.clientY - oThis.element.offsetTop;
draw2d.Drag.setCurrent(oThis);
if(oThis.isAttached==true)
oThis.detachEventHandlers();
oThis.attachEventHandlers();
}
}
oEvent.cancelBubble = true;
oEvent.returnValue = false;
};
var fnMouseMove = function ()
{
if(draw2d.Drag.getCurrent()==null)
{
var oEvent = arguments[0] || window.event;
if(draw2d.Drag.currentHover!=null && oThis!=draw2d.Drag.currentHover)
{
var oDropEvent = new draw2d.DragDropEvent();
oDropEvent.initDragDropEvent("mouseleave", false, oThis);
draw2d.Drag.currentHover.dispatchEvent(oDropEvent);
}
if(oThis!=null && oThis!=draw2d.Drag.currentHover)
{
var oDropEvent = new draw2d.DragDropEvent();
oDropEvent.initDragDropEvent("mouseenter", false, oThis);
oThis.dispatchEvent(oDropEvent);
}
draw2d.Drag.currentHover = oThis;
}
else
{
}
};
if (this.element.addEventListener) {
this.element.addEventListener("mousemove", fnMouseMove, false);
this.element.addEventListener("mousedown", fnTemp, false);
this.element.addEventListener("dblclick", dblTemp, false);
} else if (this.element.attachEvent) {
this.element.attachEvent("onmousemove", fnMouseMove);
this.element.attachEvent("onmousedown", fnTemp);
this.element.attachEvent("ondblclick", dblTemp);
} else {
throw new Error("Drag not supported in this browser.");
}
};
draw2d.Draggable.prototype.attachEventHandlers = function () {
var oThis = this;
oThis.isAttached = true;
this.tempMouseMove = function () {
var oEvent = arguments[0] || window.event;
var newPos = new draw2d.Point(oEvent.clientX - oThis.diffX, oEvent.clientY - oThis.diffY);
if(oThis.node.getCanSnapToHelper())
{
newPos = oThis.node.getWorkflow().snapToHelper(oThis.node, newPos);
}
oThis.element.style.left = newPos.x+"px";
oThis.element.style.top = newPos.y+"px";
var scrollLeft = oThis.node.workflow.getScrollLeft();
var scrollTop = oThis.node.workflow.getScrollTop();
var xOffset = oThis.node.workflow.getAbsoluteX();
var yOffset = oThis.node.workflow.getAbsoluteY();
var oDropTarget = oThis.getDropTarget(oEvent.clientX+scrollLeft-xOffset, oEvent.clientY+scrollTop-yOffset);
var oCompartment = oThis.getCompartment(oEvent.clientX+scrollLeft-xOffset, oEvent.clientY+scrollTop-yOffset);
if(draw2d.Drag.currentTarget!=null && oDropTarget!=draw2d.Drag.currentTarget)
{
var oDropEvent = new draw2d.DragDropEvent();
oDropEvent.initDragDropEvent("dragleave", false, oThis);
draw2d.Drag.currentTarget.dispatchEvent(oDropEvent);
}
if(oDropTarget!=null && oDropTarget!=draw2d.Drag.currentTarget)
{
var oDropEvent = new draw2d.DragDropEvent();
oDropEvent.initDragDropEvent("dragenter", false, oThis);
oDropTarget.dispatchEvent(oDropEvent);
}
draw2d.Drag.currentTarget = oDropTarget;
if(draw2d.Drag.currentCompartment!=null && oCompartment!=draw2d.Drag.currentCompartment)
{
var oDropEvent = new draw2d.DragDropEvent();
oDropEvent.initDragDropEvent("figureleave", false, oThis);
draw2d.Drag.currentCompartment.dispatchEvent(oDropEvent);
}
if(oCompartment!=null && oCompartment.node!=oThis.node && oCompartment!=draw2d.Drag.currentCompartment)
{
var oDropEvent = new draw2d.DragDropEvent();
oDropEvent.initDragDropEvent("figureenter", false, oThis);
oCompartment.dispatchEvent(oDropEvent);
}
draw2d.Drag.currentCompartment = oCompartment;
var oDragEvent = new draw2d.DragDropEvent();
oDragEvent.initDragDropEvent("drag", false);
oThis.dispatchEvent(oDragEvent);
};
oThis.tempMouseUp = function () {
oThis.detachEventHandlers();
var oEvent = arguments[0] || window.event;
var oDragEndEvent = new draw2d.DragDropEvent();
oDragEndEvent.initDragDropEvent("dragend", false);
oThis.dispatchEvent(oDragEndEvent);
var scrollLeft = oThis.node.workflow.getScrollLeft();
var scrollTop = oThis.node.workflow.getScrollTop();
var xOffset = oThis.node.workflow.getAbsoluteX();
var yOffset = oThis.node.workflow.getAbsoluteY();
var oDropTarget = oThis.getDropTarget(oEvent.clientX+scrollLeft-xOffset, oEvent.clientY+scrollTop-yOffset);
var oCompartment= oThis.getCompartment(oEvent.clientX+scrollLeft-xOffset, oEvent.clientY+scrollTop-yOffset);
if (oDropTarget != null)
{
var oDropEvent = new draw2d.DragDropEvent();
oDropEvent.initDragDropEvent("drop", false, oThis);
oDropTarget.dispatchEvent(oDropEvent);
}
if (oCompartment != null && oCompartment.node != oThis.node)
{
var oDropEvent = new draw2d.DragDropEvent();
oDropEvent.initDragDropEvent("figuredrop", false, oThis);
oCompartment.dispatchEvent(oDropEvent);
}
if(draw2d.Drag.currentTarget!=null)
{
var oDropEvent = new draw2d.DragDropEvent();
oDropEvent.initDragDropEvent("dragleave", false, oThis);
draw2d.Drag.currentTarget.dispatchEvent(oDropEvent);
draw2d.Drag.currentTarget=null;
}
draw2d.Drag.currentCompartment=null;
draw2d.Drag.clearCurrent();
};
if (document.body.addEventListener) {
document.body.addEventListener("mousemove", this.tempMouseMove, false);
document.body.addEventListener("mouseup", this.tempMouseUp, false);
} else if (document.body.attachEvent) {
document.body.attachEvent("onmousemove", this.tempMouseMove);
document.body.attachEvent("onmouseup", this.tempMouseUp);
} else {
throw new Error("Drag doesn't support this browser.");
}
};
draw2d.Draggable.prototype.detachEventHandlers = function ()
{
this.isAttached = false;
if (document.body.removeEventListener) {
document.body.removeEventListener("mousemove", this.tempMouseMove, false);
document.body.removeEventListener("mouseup", this.tempMouseUp, false);
} else if (document.body.detachEvent) {
document.body.detachEvent("onmousemove", this.tempMouseMove);
document.body.detachEvent("onmouseup", this.tempMouseUp);
} else {
throw new Error("Drag doesn't support this browser.");
}
};
draw2d.Draggable.prototype.getDropTarget = function ( x , y )
{
for(var i=0;i<this.targets.getSize();i++)
{
var target = this.targets.get(i);
if (target.node.isOver(x, y) && target.node!=this.node)
{
return target;
}
}
return null;
}
draw2d.Draggable.prototype.getCompartment = function (x , y )
{
var result = null;
for(var i=0;i<this.node.workflow.compartments.getSize();i++)
{
var target = this.node.workflow.compartments.get(i);
if (target.isOver(x, y) && target!=this.node)
{
if(result==null)
result = target;
else if(result.getZOrder() < target.getZOrder())
result = target;
}
}
return result==null?null:result.dropable;
}
draw2d.Draggable.prototype.getLeft = function ()
{
return this.element.offsetLeft;
}
draw2d.Draggable.prototype.getTop = function ()
{
return this.element.offsetTop;
}
draw2d.DragDropEvent=function()
{
draw2d.Event.call(this);
}
draw2d.DragDropEvent.prototype = new draw2d.Event();
draw2d.DragDropEvent.prototype.initDragDropEvent = function(sType ,
bCancelable ,
oRelatedTarget ) {
this.initEvent(sType, bCancelable);
this.relatedTarget = oRelatedTarget;
}
draw2d.DropTarget=function(oElement)
{
draw2d.EventTarget.call(this);
this.construct(oElement);
}
draw2d.DropTarget.prototype = new draw2d.EventTarget;
draw2d.DropTarget.prototype.construct = function (oElement )
{
this.element = oElement;
}
draw2d.DropTarget.prototype.getLeft = function ()
{
var el = this.element;
var ol=el.offsetLeft;
while((el=el.offsetParent) != null)
{
ol += el.offsetLeft;
}
return ol;
}
draw2d.DropTarget.prototype.getTop = function ()
{
var el = this.element;
var ot=el.offsetTop;
while((el=el.offsetParent) != null)
{
ot += el.offsetTop;
}
return ot;
}
draw2d.DropTarget.prototype.getHeight = function ()
{
return this.element.offsetHeight;
}
draw2d.DropTarget.prototype.getWidth = function ()
{
return this.element.offsetWidth;
}
Documentation generated by
JSDoc on Thu Feb 7 23:45:47 2008