summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMorten Sørvig <msorvig@trolltech.com>2009-03-13 16:19:07 +0100
committerMorten Sørvig <msorvig@trolltech.com>2009-03-13 16:19:07 +0100
commite067fd7c2b2dd92e787316d9dd4bd9a372e74bd5 (patch)
treeb25a9da17917d606fa6533a30354725918e63786 /src
parentf5e73467f4db30738d521581b88ca55033c21d46 (diff)
Attach the a drag handler to QMdiSubWindow windows.
Diffstat (limited to 'src')
-rw-r--r--src/draghandler.js87
-rwxr-xr-xsrc/eventhandler.js11
-rwxr-xr-xsrc/eventqueue.cpp2
-rwxr-xr-xsrc/index.html34
-rwxr-xr-xsrc/src.qrc1
-rwxr-xr-xsrc/widgeteventhandler.cpp2
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()));