diff options
author | Morten Sorvig <msorvig@trolltech.com> | 2009-08-17 06:17:34 +0200 |
---|---|---|
committer | Morten Sorvig <msorvig@trolltech.com> | 2009-08-17 06:18:46 +0200 |
commit | 1a6fd4f87ec2bcad55765c189e6659e49c1e6dc4 (patch) | |
tree | 2f84403f00bd6e863b2e681620c6f8afb1d87cc2 /src/eventhandler.js | |
parent | 0a01acc909fce958acc2c40f1623831adc01682c (diff) |
Refactor the drag-drop handler
Diffstat (limited to 'src/eventhandler.js')
-rw-r--r-- | src/eventhandler.js | 71 |
1 files changed, 67 insertions, 4 deletions
diff --git a/src/eventhandler.js b/src/eventhandler.js index ab676ad..cca4e96 100644 --- a/src/eventhandler.js +++ b/src/eventhandler.js @@ -123,7 +123,7 @@ function createElement(widgetType, id) } else if (widgetType == "midisubwindow") { // console.log("midisubwindow") element = this.createWidgetElement(id); - DragHandler.attach(element); + dojo.connect(element, 'onmousedown', this, dragBegin); } else { element = this.createWidgetElement(id); } @@ -167,16 +167,28 @@ function updateText(element, text) element.value = text; } -function moveElement(contentElement, x, y) +function setElementRelativePosition(contentElement, x, y) { +// console.log("set element relative posisiton " + x + " " + y); var element = contentElement.structureElement; element.style.left = x; element.style.top = y; } +function moveElement(contentElement, dx, dy) +{ + var element = contentElement.structureElement; + element.style.left = parseInt(element.style.left) + dx; + element.style.top = parseInt(element.style.top) + dy; +// console.log("move element " + dx + " " + dy + element.style.left); +} + function sendMoveMessage(element) { - var message = this.jsonUrl + JSON.stringify({ "type" : "positionupdate", "id" : element.pointer, "x" : element.style.left, "y" : element.style.top }); + var structureElement = element.structureElement; +// console.log("element.structureElement" + structureElement + " " + element.pointer); + var message = this.jsonUrl + JSON.stringify({ "type" : "positionupdate", "id" : element.pointer, + "x" : structureElement.style.left, "y" : structureElement.style.top }); this.request(message); } @@ -257,7 +269,7 @@ function eventHandler(text) element.src = source; } else if (type == "geometry") { // console.log("geometry x " + event.x + " y " + event.y + " w " + event.w + " h " + event.h); - this.moveElement(element, event.x, event.y) + this.setElementRelativePosition(element, event.x, event.y) element.style.width = event.w; element.style.height = event.h; @@ -380,6 +392,52 @@ function getElementsByClass(searchClass,node,tag) { var webclientObjectCounter = 0; + function dragBegin (event) { + event = event ? event : window.event; + + var element = event.target.structureElement; + if (isNaN(parseInt(element.style.left))) { element.style.left = '0px'; } + if (isNaN(parseInt(element.style.top))) { element.style.top = '0px'; } + + var x = parseInt(element.style.left); + var y = parseInt(element.style.top); + + this.mouseX = event.clientX; + this.mouseY = event.clientY; + this.dragHandler = dojo.connect(document, 'onmousemove', this, drag); + this.dragEndHandler = dojo.connect(document, 'onmouseup', this, dragEnd); + this.dragElement = event.target; + + return false; + } + + function drag(event) { + var element = this.dragElement.structureElement; + //console.log(this.dragElement + this.dragElement.structureElement) + //console.log("Drag " + this + " " + this.dragElement + " " + element) + var x = parseInt(element.style.left); + var y = parseInt(element.style.top); + + event = event ? event : window.event; + + var dx = event.clientX - this.mouseX; + var dy = event.clientY - this.mouseY; + + this.moveElement(this.dragElement, dx, dy); + + this.mouseX = event.clientX; + this.mouseY = event.clientY; + + return false; + } + + function dragEnd(event) { + this.sendMoveMessage(this.dragElement); + dojo.disconnect(this.dragHandler); + dojo.disconnect(this.dragEndHandler); + } + + function setUpWebClientObject(webclientObject) { webclientObject.baseUrl = webclientObject.attributes["src"].value + "/"; @@ -403,6 +461,7 @@ function setUpWebClientObject(webclientObject) webclientObject.createTextInputElement = createTextInputElement; webclientObject.createButtonInputElement = createButtonInputElement; webclientObject.createElement = createElement + webclientObject.setElementRelativePosition = setElementRelativePosition webclientObject.moveElement = moveElement webclientObject.sendMoveMessage = sendMoveMessage webclientObject.eventHandler = eventHandler; @@ -419,6 +478,10 @@ function setUpWebClientObject(webclientObject) webclientObject.inputElementKeyPress = inputElementKeyPress webclientObject.inputElementKeyRelease = inputElementKeyRelease + webclientObject.dragBegin = dragBegin; + webclientObject.drag = drag; + webclientObject.dragEnd = dragEnd; + // console.log(webclientObject); // console.log(webclientObject.baseUrl); } |