diff options
author | Morten Sørvig <msorvig@trolltech.com> | 2009-06-12 10:58:53 +0200 |
---|---|---|
committer | Morten Sørvig <msorvig@trolltech.com> | 2009-06-12 10:58:53 +0200 |
commit | f01248927746673860ab2ec767482ee89d050b5b (patch) | |
tree | 176609d904df0cc012062d8ddab1f8b39ff60232 /src | |
parent | b4095c33436fb66af8db1d4ab11b2b7a4ddb5a1c (diff) |
Implement text updates for labels and line edits.
Diffstat (limited to 'src')
-rw-r--r--[-rwxr-xr-x] | src/eventhandler.js | 34 | ||||
-rw-r--r--[-rwxr-xr-x] | src/eventqueue.cpp | 27 | ||||
-rw-r--r--[-rwxr-xr-x] | src/eventqueue.h | 0 | ||||
-rw-r--r--[-rwxr-xr-x] | src/index.html | 0 | ||||
-rw-r--r--[-rwxr-xr-x] | src/json2.js | 0 | ||||
-rw-r--r--[-rwxr-xr-x] | src/sessionhandler.js | 0 | ||||
-rw-r--r--[-rwxr-xr-x] | src/sessionserver.cpp | 0 | ||||
-rw-r--r--[-rwxr-xr-x] | src/sessionserver.h | 0 | ||||
-rw-r--r--[-rwxr-xr-x] | src/src.qrc | 0 | ||||
-rw-r--r--[-rwxr-xr-x] | src/webclientserver.cpp | 1 | ||||
-rw-r--r--[-rwxr-xr-x] | src/webclientserver.h | 1 | ||||
-rw-r--r--[-rwxr-xr-x] | src/widgeteventhandler.cpp | 17 | ||||
-rw-r--r--[-rwxr-xr-x] | src/widgeteventhandler.h | 0 |
13 files changed, 71 insertions, 9 deletions
diff --git a/src/eventhandler.js b/src/eventhandler.js index d197232..4b839b2 100755..100644 --- a/src/eventhandler.js +++ b/src/eventhandler.js @@ -44,11 +44,32 @@ function createInputElement(pointer) return inputElement; } +function createLabelElement(pointer) +{ + var spanElement = document.createElement("span"); + spanElement.id = elmentId(pointer); + spanElement.pointer = pointer; + spanElement.className = "nativeWidget"; + spanElement.style.visibility = "visible"; + + // roughly position and size the text to match the + // default Qt label style. + spanElement.style.marginTop = 4; + spanElement.style.fontSize = 11; + spanElement.style.fontFamily = "sans-serif"; + + document.body.appendChild(spanElement); + + return spanElement; +} + function createElement(widgetType, id) { if (widgetType == "lineedit") { return createInputElement(id); - } if (widgetType == "midisubwindow") { + } else if (widgetType == "label") { + return createLabelElement(id); + } else if (widgetType == "midisubwindow") { // console.log("midisubwindow") var element = createWidgetElement(id); DragHandler.attach(element); @@ -58,6 +79,15 @@ function createElement(widgetType, id) } } +function updateText(element, text) +{ + console.log("update text" + text + " " + element.nodeName); + if (element.nodeName == "SPAN") + element.innerHTML = text; + else + element.value = text; +} + function updateTreeElementPositions(element, dx, dy) { if (!element.style.left) @@ -231,7 +261,7 @@ function eventHandler(text) addParent(parent, child); udpateZIndexes(child); } else if (type == "textUpdate") { - element.value = event.text; + updateText(element, event.text); } } } diff --git a/src/eventqueue.cpp b/src/eventqueue.cpp index 7b3b5f5..a801379 100755..100644 --- a/src/eventqueue.cpp +++ b/src/eventqueue.cpp @@ -21,15 +21,36 @@ public: void emitTextEdited(const QString &text) { QLineEdit::textChanged(text); QLineEdit::textEdited(text); } }; +void encodeText(QString &text) +{ + // encode "breakout" characters + text.replace("&", "&"); + text.replace("<", "<"); + text.replace(">", ">"); + text.replace("'", "'"); + text.replace('"', """); + text.replace("/", "/"); + + // white-list for safe tags + text.replace("<b>", "<b>"); + text.replace("</b>", "</b>"); +} + QString widgetGetText(QWidget *widget) { + QString text; + if (QLineEdit *lineEdit = qobject_cast<QLineEdit *>(widget)) { - return lineEdit->text(); + text = lineEdit->text(); } else if (QLabel *label = qobject_cast<QLabel*>(widget)) { - return label->text(); + text = label->text(); } else { - return QString(" "); + text = "unsupported text widget";; } + + encodeText(text); + + return text; } EventQueue::EventQueue(Session *session) diff --git a/src/eventqueue.h b/src/eventqueue.h index d31330b..d31330b 100755..100644 --- a/src/eventqueue.h +++ b/src/eventqueue.h diff --git a/src/index.html b/src/index.html index 7f9f4c5..7f9f4c5 100755..100644 --- a/src/index.html +++ b/src/index.html diff --git a/src/json2.js b/src/json2.js index 241a271..241a271 100755..100644 --- a/src/json2.js +++ b/src/json2.js diff --git a/src/sessionhandler.js b/src/sessionhandler.js index 9e33eb8..9e33eb8 100755..100644 --- a/src/sessionhandler.js +++ b/src/sessionhandler.js diff --git a/src/sessionserver.cpp b/src/sessionserver.cpp index 9489aa6..9489aa6 100755..100644 --- a/src/sessionserver.cpp +++ b/src/sessionserver.cpp diff --git a/src/sessionserver.h b/src/sessionserver.h index 9f844e7..9f844e7 100755..100644 --- a/src/sessionserver.h +++ b/src/sessionserver.h diff --git a/src/src.qrc b/src/src.qrc index 7b7f6ca..7b7f6ca 100755..100644 --- a/src/src.qrc +++ b/src/src.qrc diff --git a/src/webclientserver.cpp b/src/webclientserver.cpp index 6ae483b..6b7ebfa 100755..100644 --- a/src/webclientserver.cpp +++ b/src/webclientserver.cpp @@ -223,6 +223,7 @@ void Server::dataOnSocket() response.setCookie("qtcookie", QByteArray::number(sessionId)); // set new. session = new Session(this, sessionId); + session->address = socket->peerAddress(); activeSessions.insert(sessionId, session); // DEBUG << "new session" << sessionId << session; diff --git a/src/webclientserver.h b/src/webclientserver.h index b8b126c..f121fa6 100755..100644 --- a/src/webclientserver.h +++ b/src/webclientserver.h @@ -59,6 +59,7 @@ public slots: void idleSocketDisconnect(); public: int m_sessionId; + QHostAddress address; QTcpSocket *m_idleSocket; HttpRequest m_idleRequest; HttpResponse m_idleResponse; diff --git a/src/widgeteventhandler.cpp b/src/widgeteventhandler.cpp index 7c3614b..c170569 100755..100644 --- a/src/widgeteventhandler.cpp +++ b/src/widgeteventhandler.cpp @@ -2,6 +2,8 @@ #include "widgeteventhandler.h" #include "webclient.h" +bool takeEvents = true; + QWidget * findEventTarget(QWidget *root, QPoint pos) { QWidget *current = root; @@ -37,9 +39,10 @@ void WidgetEventHandler::recursivelyInstallEventHandler(QWidget *widget) if (QLineEdit *lineEdit = qobject_cast<QLineEdit *>(widget)) { connect(lineEdit, SIGNAL(textChanged(const QString &)), this, SLOT(lineEditTextChange())); - } - - if (QAbstractScrollArea *scrollArea = qobject_cast<QAbstractScrollArea *>(widget)) { + events.addEvent((int)widget, EventEntry::TextUpdate); + } else if (QLabel *label = qobject_cast<QLabel*>(widget)) { + events.addEvent((int)widget, EventEntry::TextUpdate); + } else if (QAbstractScrollArea *scrollArea = qobject_cast<QAbstractScrollArea *>(widget)) { recursivelyInstallEventHandler(scrollArea->viewport()); } @@ -74,7 +77,6 @@ bool WidgetEventHandler::eventFilter(QObject *object, QEvent *event) if (QLabel *label = qobject_cast<QLabel *>(widget)) { events.addEvent((int)widget, EventEntry::TextUpdate); } - if (!grabbing) { DEBUG << " add paint update" << object; addPendingUpdate(widget, static_cast<QPaintEvent*>(event)->rect()); @@ -266,6 +268,13 @@ void WidgetEventHandler::recursivelyAddUpdate(QWidget *widget) events.addGeometryEvent((int)widget, globalGeometry(widget)); events.addParentChangeEvent((int) widget); + if (QLineEdit *lineEdit = qobject_cast<QLineEdit *>(widget)) { + events.addEvent((int)widget, EventEntry::TextUpdate); + } + else if (QLabel *label = qobject_cast<QLabel *>(widget)) { + events.addEvent((int)widget, EventEntry::TextUpdate); + } + // Add pending paint update addPendingUpdate(widget, widget->rect()); diff --git a/src/widgeteventhandler.h b/src/widgeteventhandler.h index 8dab3d2..8dab3d2 100755..100644 --- a/src/widgeteventhandler.h +++ b/src/widgeteventhandler.h |