diff options
author | Morten Sørvig <msorvig@trolltech.com> | 2009-03-13 16:19:07 +0100 |
---|---|---|
committer | Morten Sørvig <msorvig@trolltech.com> | 2009-03-13 16:19:07 +0100 |
commit | e067fd7c2b2dd92e787316d9dd4bd9a372e74bd5 (patch) | |
tree | b25a9da17917d606fa6533a30354725918e63786 /src | |
parent | f5e73467f4db30738d521581b88ca55033c21d46 (diff) |
Attach the a drag handler to QMdiSubWindow windows.
Diffstat (limited to 'src')
-rw-r--r-- | src/draghandler.js | 87 | ||||
-rwxr-xr-x | src/eventhandler.js | 11 | ||||
-rwxr-xr-x | src/eventqueue.cpp | 2 | ||||
-rwxr-xr-x | src/index.html | 34 | ||||
-rwxr-xr-x | src/src.qrc | 1 | ||||
-rwxr-xr-x | src/widgeteventhandler.cpp | 2 |
6 files changed, 101 insertions, 36 deletions
diff --git a/src/draghandler.js b/src/draghandler.js new file mode 100644 index 0000000..7048977 --- /dev/null +++ b/src/draghandler.js @@ -0,0 +1,87 @@ +/** +* +* Crossbrowser Drag Handler +* http://www.webtoolkit.info/ +* +**/ +var DragHandler = { + // private property. + _oElem : null, + + // public method. Attach drag handler to an element. + attach : function(oElem) { + oElem.onmousedown = DragHandler._dragBegin; + + // callbacks + oElem.dragBegin = new Function(); + oElem.drag = new Function(); + oElem.dragEnd = new Function(); + + return oElem; + }, + + + // private method. Begin drag process. + _dragBegin : function(e) { + var oElem = DragHandler._oElem = this; + + // ### hack: only drag widgets near the top of the hiearchy + if (oElem.parentWidget && oElem.parentWidget.parentWidget && oElem.parentWidget.parentWidget.parentWidget) + return; + + + if (isNaN(parseInt(oElem.style.left))) { oElem.style.left = '0px'; } + if (isNaN(parseInt(oElem.style.top))) { oElem.style.top = '0px'; } + + var x = parseInt(oElem.style.left); + var y = parseInt(oElem.style.top); + + e = e ? e : window.event; + oElem.mouseX = e.clientX; + oElem.mouseY = e.clientY; + + oElem.dragBegin(oElem, x, y); + + document.onmousemove = DragHandler._drag; + document.onmouseup = DragHandler._dragEnd; + return false; + }, + + + // private method. Drag (move) element. + _drag : function(e) { + var oElem = DragHandler._oElem; + + var x = parseInt(oElem.style.left); + var y = parseInt(oElem.style.top); + + e = e ? e : window.event; + moveElement(oElem, x + (e.clientX - oElem.mouseX), y + (e.clientY - oElem.mouseY)); + +// oElem.style.left = x + (e.clientX - oElem.mouseX) + 'px'; +// oElem.style.top = y + (e.clientY - oElem.mouseY) + 'px'; + + oElem.mouseX = e.clientX; + oElem.mouseY = e.clientY; + + oElem.drag(oElem, x, y); + + return false; + }, + + + // private method. Stop drag process. + _dragEnd : function() { + var oElem = DragHandler._oElem; + + var x = parseInt(oElem.style.left); + var y = parseInt(oElem.style.top); + + oElem.dragEnd(oElem, x, y); + + document.onmousemove = null; + document.onmouseup = null; + DragHandler._oElem = null; + } + +} diff --git a/src/eventhandler.js b/src/eventhandler.js index c460834..7e4c63c 100755 --- a/src/eventhandler.js +++ b/src/eventhandler.js @@ -45,10 +45,16 @@ function createInputElement(pointer) function createElement(widgetType, id) { - if (widgetType == "lineedit") + if (widgetType == "lineedit") { return createInputElement(id); - else + } if (widgetType == "midisubwindow") { + console.log("midisubwindow") + var element = createWidgetElement(id); + DragHandler.attach(element); + return element; + } else { return createWidgetElement(id); + } } function updateTreeElementPositions(element, dx, dy) @@ -228,6 +234,7 @@ function sendMouseEventReq(description, xpos, ypos) { } function sendMousePressed(event) { + event.preventDefault(); sendMouseEventReq("mousepress", event.clientX, event.clientY); } diff --git a/src/eventqueue.cpp b/src/eventqueue.cpp index 96bc448..0d7e5d0 100755 --- a/src/eventqueue.cpp +++ b/src/eventqueue.cpp @@ -283,5 +283,7 @@ json_object *EventQueue::toJsonWidgetType(QWidget *widget) const return json_object_new_string("lineedit"); if (qobject_cast<QLabel *>(widget)) return json_object_new_string("label"); + if (qobject_cast<QMdiSubWindow *>(widget)) + return json_object_new_string("midisubwindow"); return json_object_new_string("generic"); } diff --git a/src/index.html b/src/index.html index ee1382f..7f9f4c5 100755 --- a/src/index.html +++ b/src/index.html @@ -1,33 +1 @@ -
-<html>
-<head>
-
-<style type="text/css">
-
-.divWidget {
- position: absolute;
- padding:0px; margin:0px;
-}
-
-.nativeWidget {
- position: absolute;
- padding:0px; margin:0px;
-}
-
-</style>
-
-
-<script type="text/javascript" src=":dojo.js" djConfig="parseOnLoad: true"></script>
-<script type="text/javascript" src=":json2.js"></script>
-<script type="text/javascript" src=":sessionhandler.js"></script>
-<script type="text/javascript" src=":eventhandler.js"></script>
-
-
-</head>
-<body>
-<div id="foo" style="width:10000px">
- </div>
-
-
-</body>
-</html>
+<html>
<head>
<style type="text/css">
.divWidget {
position: absolute;
padding:0px; margin:0px;
}
.nativeWidget {
position: absolute;
padding:0px; margin:0px;
}
</style>
<script type="text/javascript" src=":dojo.js" djConfig="parseOnLoad: true"></script>
<script type="text/javascript" src=":draghandler.js"></script>
<script type="text/javascript" src=":json2.js"></script>
<script type="text/javascript" src=":sessionhandler.js"></script>
<script type="text/javascript" src=":eventhandler.js"></script>
</head>
<body>
<div id="foo" style="width:10000px">
</div>
</body>
</html>
\ No newline at end of file diff --git a/src/src.qrc b/src/src.qrc index a7897f9..7b7f6ca 100755 --- a/src/src.qrc +++ b/src/src.qrc @@ -1,5 +1,6 @@ <!DOCTYPE RCC><RCC version="1.0"> <qresource> + <file>draghandler.js</file> <file>sessionhandler.js</file> <file>eventhandler.js</file> <file>json2.js</file> diff --git a/src/widgeteventhandler.cpp b/src/widgeteventhandler.cpp index 88f3e51..07192cc 100755 --- a/src/widgeteventhandler.cpp +++ b/src/widgeteventhandler.cpp @@ -33,7 +33,7 @@ void WidgetEventHandler::recursivelyInstallEventHandler(QWidget *widget) { widget->installEventFilter(this); -// DEBUG << widget->metaObject()->className() << widget->objectName(); +// qDebug() << "event filter on" << widget->metaObject()->className() << widget->objectName(); if (QLineEdit *lineEdit = qobject_cast<QLineEdit *>(widget)) { connect(lineEdit, SIGNAL(textChanged(const QString &)), this, SLOT(lineEditTextChange())); |